System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 2971145260f9d0c79f2fbd001098bff5b0e33749:

• File lib/System.Data.SQLite/common.eagle — part of check-in [4555e3f885] at 2016-03-24 04:42:26 on branch trunk — Check-in [42b74232eb] did not go far enough. In the test suite, prefer the interop assembly when available; however, always attempt to choose the most appropriate library available, based on the managed assembly configuration. (user: mistachkin size: 161469) [more...]

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  etSQLiteDefineCo
0340: 6e 73 74 61 6e 74 50 72 65 66 69 78 20 7b 7d 20  nstantPrefix {}
0350: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
0360: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
0370: 20 74 68 65 20 64 65 66 69 6e 65 20 63 6f 6e 73   the define cons
0380: 74 61 6e 74 20 70 72 65 66 69 78 20 73 65 74 74  tant prefix sett
0390: 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ing has been ove
03a0: 72 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 23  rridden..      #
03b0: 20 20 20 20 20 20 20 62 79 20 74 68 65 20 75 73         by the us
03c0: 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20  er (e.g. on the
03d0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a  command line)...
03e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
03f0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
0400: 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74 61 6e  ::define_constan
0410: 74 5f 70 72 65 66 69 78 5d 20 26 26 20 5c 0d 0a  t_prefix] && \..
0420: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
0430: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 65 66 69  g length $::defi 0440: 6e 65 5f 63 6f 6e 73 74 61 6e 74 5f 70 72 65 66 ne_constant_pref 0450: 69 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ix] > 0} then {. 0460: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 0470: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 0480: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 65 the specified de 0490: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 70 72 fine constant pr 04a0: 65 66 69 78 2e 0d 0a 20 20 20 20 20 20 20 20 23 efix... # 04b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 04c0: 20 24 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74$::define_const
04d0: 61 6e 74 5f 70 72 65 66 69 78 0d 0a 20 20 20 20  ant_prefix..
04e0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
04f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
0500: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
0510: 65 66 61 75 6c 74 20 64 65 66 69 6e 65 20 63 6f  efault define co
0520: 6e 73 74 61 6e 74 20 70 72 65 66 69 78 2e 0d 0a  nstant prefix...
0530: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
0540: 20 20 20 72 65 74 75 72 6e 20 64 65 66 69 6e 65     return define
0550: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
0560: 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20  Data.SQLite...
0570: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
0580: 0a 20 20 20 20 70 72 6f 63 20 68 61 76 65 53 51  .    proc haveSQ
0590: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61  LiteDefineConsta
05a0: 6e 74 20 7b 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20  nt { name } {..
05b0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 68 61 76       return [hav
05c0: 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20  eConstraint \..
05d0: 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64           [append
05e0: 41 72 67 73 20 5b 67 65 74 53 51 4c 69 74 65 44  Args [getSQLiteD
05f0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65  efineConstantPre
0600: 66 69 78 5d 20 24 6e 61 6d 65 5d 5d 0d 0a 20 20  fix] $name]].. 0610: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 0620: 20 67 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d getBuildYear {} 0630: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 0640: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 # NOTE: See i 0650: 66 20 74 68 65 20 22 79 65 61 72 22 20 73 65 74 f the "year" set 0660: 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 ting has been ov 0670: 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 erridden by the 0680: 75 73 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 user (e.g... 0690: 20 20 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 # on the 06a0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 command line). 06b0: 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 This helps cont 06c0: 72 6f 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 rol exactly whic 06d0: 68 20 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 h set of.. 06e0: 23 20 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 # binaries 06f0: 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c we are testing, 0700: 20 74 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 those produced 0710: 75 73 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c using the Visual 0720: 20 53 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 Studio.. # 0730: 20 20 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 2005, 200 0740: 38 2c 20 32 30 31 30 2c 20 32 30 31 32 2c 20 32 8, 2010, 2012, 2 0750: 30 31 33 2c 20 6f 72 20 32 30 31 35 20 62 75 69 013, or 2015 bui 0760: 6c 64 20 73 79 73 74 65 6d 73 2e 20 20 54 6f 20 ld systems. To 0770: 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 override.. 0780: 23 20 20 20 20 20 20 20 74 68 69 73 20 76 61 6c # this val 0790: 75 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 ue via the comma 07a0: 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 nd line, enter a 07b0: 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 command similar 07c0: 20 74 6f 20 6f 6e 65 0d 0a 20 20 20 20 20 20 23 to one.. # 07d0: 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 66 6f of the fo 07e0: 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 llowing (all on 07f0: 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 one line):.. 0800: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 #.. # 0810: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 EagleShell.ex 0820: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 e -anyInitialize 0830: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 "set test_year 0840: 32 30 30 35 22 0d 0a 20 20 20 20 20 20 23 20 20 2005".. # 0850: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 -file .\p 0860: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 ath\to\all.eagle 0870: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 0880: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 # EagleSh 0890: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 ell.exe -anyInit 08a0: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 ialize "set test 08b0: 5f 79 65 61 72 20 32 30 30 38 22 0d 0a 20 20 20 _year 2008".. 08c0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 # -fi 08d0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 08e0: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d .eagle.. #. 08f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 0900: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 agleShell.exe -a 0910: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 nyInitialize "se 0920: 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 31 30 t test_year 2010 0930: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ".. # 0940: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c -file .\path\ 0950: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 to\all.eagle.. 0960: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 #.. # 0970: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e EagleShell. 0980: 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 exe -anyInitiali 0990: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 ze "set test_yea 09a0: 72 20 32 30 31 32 22 0d 0a 20 20 20 20 20 20 23 r 2012".. # 09b0: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e -file . 09c0: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 \path\to\all.eag 09d0: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 le.. #.. 09e0: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 # Eagle 09f0: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e Shell.exe -anyIn 0a00: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 itialize "set te 0a10: 73 74 5f 79 65 61 72 20 32 30 31 33 22 0d 0a 20 st_year 2013".. 0a20: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d # - 0a30: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 file .\path\to\a 0a40: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 ll.eagle.. 0a50: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 #.. # 0a60: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 EagleShell.exe 0a70: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 -anyInitialize " 0a80: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 set test_year 20 0a90: 31 35 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 15".. # 0aa0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 -file .\pat 0ab0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a h\to\all.eagle.. 0ac0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 0ad0: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c EagleShel 0ae0: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 l.exe -anyInitia 0af0: 6c 69 7a 65 20 22 75 6e 73 65 74 20 2d 6e 6f 63 lize "unset -noc 0b00: 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 79 65 61 omplain test_yea 0b10: 72 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 r".. # 0b20: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 -file .\path 0b30: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 \to\all.eagle.. 0b40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 0b50: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 0b60: 3a 74 65 73 74 5f 79 65 61 72 5d 20 26 26 20 5b :test_year] && [ 0b70: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
0b80: 3a 74 65 73 74 5f 79 65 61 72 5d 20 3e 20 30 7d  :test_year] > 0}
0b90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
0ba0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
0bb0: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63  TE: Use the spec
0bc0: 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 2e  ified test year.
0bd0: 20 20 49 66 20 74 68 69 73 20 76 61 72 69 61 62    If this variab
0be0: 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74  le is not set, t
0bf0: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
0c00: 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75      default valu
0c10: 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20  e will be based
0c20: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
0c30: 74 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e  t Eagle has been
0c40: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
0c50: 20 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e    compiled again
0c60: 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20  st the CLR v2.0
0c70: 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20  or CLR v4.0...
0c80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
0c90: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f   return $::test_ 0ca0: 79 65 61 72 0d 0a 20 20 20 20 20 20 7d 20 65 6c year.. } el 0cb0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 0cc0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 0cd0: 20 49 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 If Eagle has be 0ce0: 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 en compiled agai 0cf0: 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 nst the CLR v4.0 0d00: 2c 20 75 73 65 20 22 32 30 31 30 22 20 62 79 0d , use "2010" by. 0d10: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 0d20: 20 64 65 66 61 75 6c 74 20 28 77 65 20 63 6f 75 default (we cou 0d30: 6c 64 20 75 73 65 20 22 32 30 31 32 22 2c 20 22 ld use "2012", " 0d40: 32 30 31 33 22 2c 20 6f 72 20 22 32 30 31 35 22 2013", or "2015" 0d50: 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 61 73 in that case as 0d60: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 0d70: 20 20 77 65 6c 6c 29 20 61 73 20 74 68 65 20 74 well) as the t 0d80: 65 73 74 20 79 65 61 72 3b 20 6f 74 68 65 72 77 est year; otherw 0d90: 69 73 65 2c 20 75 73 65 20 22 32 30 30 38 22 20 ise, use "2008" 0da0: 62 79 20 64 65 66 61 75 6c 74 20 28 77 65 0d 0a by default (we.. 0db0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 0dc0: 63 6f 75 6c 64 20 75 73 65 20 22 32 30 30 35 22 could use "2005" 0dd0: 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 61 73 in that case as 0de0: 20 77 65 6c 6c 29 2e 20 20 49 66 20 61 6e 6f 74 well). If anot 0df0: 68 65 72 20 6d 61 6a 6f 72 0d 0a 20 20 20 20 20 her major.. 0e00: 20 20 20 23 20 20 20 20 20 20 20 5b 69 6e 63 6f # [inco 0e10: 6d 70 61 74 69 62 6c 65 5d 20 76 65 72 73 69 6f mpatible] versio 0e20: 6e 20 6f 66 20 74 68 65 20 43 4c 52 20 69 73 20 n of the CLR is 0e30: 72 65 6c 65 61 73 65 64 2c 20 74 68 69 73 20 63 released, this c 0e40: 68 65 63 6b 20 77 69 6c 6c 0d 0a 20 20 20 20 20 heck will.. 0e50: 20 20 20 23 20 20 20 20 20 20 20 68 61 76 65 20 # have 0e60: 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e 20 20 to be changed. 0e70: 54 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74 The default test 0e80: 20 79 65 61 72 20 74 6f 20 75 73 65 20 66 6f 72 year to use for 0e90: 20 61 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 a.. # 0ea0: 20 20 20 20 70 61 72 74 69 63 75 6c 61 72 20 43 particular C 0eb0: 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79 20 62 LR version may b 0ec0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 e overridden by 0ed0: 73 65 74 74 69 6e 67 20 74 68 65 20 67 6c 6f 62 setting the glob 0ee0: 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 al.. # 0ef0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 22 74 65 variable "te 0f00: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 24 58 22 st_year_clr_v$X"
0f10: 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d 61 79  , where "$X" may 0f20: 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 62 65 0d [currently] be. 0f30: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 0f40: 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 20 22 either "2" or " 0f50: 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 4"... #.. 0f60: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 if {[hav 0f70: 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d 61 67 eConstraint imag 0f80: 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 68 65 eRuntime40]} the 0f90: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 0fa0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 0fb0: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f ::test_year_clr_ 0fc0: 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 v4] && \.. 0fd0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 0fe0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 length$::test_y
0ff0: 65 61 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 30 7d  ear_clr_v4] > 0}
1000: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1010: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1020: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
1030: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65  the specified te
1040: 73 74 20 79 65 61 72 20 66 6f 72 20 74 68 65 20  st year for the
1050: 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20  CLR v4.0...
1060: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1070: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 1080: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34 test_year_clr_v4 1090: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 10a0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 10b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 10c0: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 10d0: 20 64 65 66 61 75 6c 74 20 74 65 73 74 20 79 65 default test ye 10e0: 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 ar for the CLR v 10f0: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 4.0... 1100: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1110: 20 72 65 74 75 72 6e 20 32 30 31 30 3b 20 23 20 return 2010; # 1120: 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c TODO: Good "fall 1130: 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a back" default?.. 1140: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1150: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1160: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e if {[in 1170: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 1180: 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 26 26 _year_clr_v2] && 1190: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11a0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 11b0: 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c$::test_year_cl
11c0: 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 6e 20  r_v2] > 0} then
11d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
11e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
11f0: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70  NOTE: Use the sp
1200: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61  ecified test yea
1210: 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32  r for the CLR v2
1220: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .0...
1230: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1240: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79  return $::test_y 1250: 65 61 72 5f 63 6c 72 5f 76 32 0d 0a 20 20 20 20 ear_clr_v2.. 1260: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1270: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1280: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1290: 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 E: Use the defau 12a0: 6c 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 lt test year for 12b0: 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a the CLR v2.0... 12c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 12d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur 12e0: 6e 20 32 30 30 38 3b 20 23 20 54 4f 44 4f 3a 20 n 2008; # TODO: 12f0: 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 Good "fallback" 1300: 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 default?.. 1310: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1320: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1330: 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 ..... #.. 1340: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f # NOTE: This pro 1350: 63 65 64 75 72 65 20 69 73 20 6f 6e 6c 79 20 75 cedure is only u 1360: 73 65 64 20 77 68 65 6e 20 61 64 64 69 6e 67 20 sed when adding 1370: 73 68 69 6d 6d 65 64 20 74 65 73 74 20 63 6f 6e shimmed test con 1380: 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 23 straints... # 1390: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 .. proc getBu 13a0: 69 6c 64 43 6c 72 56 65 72 73 69 6f 6e 20 7b 7d ildClrVersion {} 13b0: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 {.. if {[i 13c0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 nfo exists ::tes 13d0: 74 5f 63 6c 72 5d 20 26 26 20 5b 73 74 72 69 6e t_clr] && [strin 13e0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 g length$::test
13f0: 5f 63 6c 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20  _clr] > 0} then
1400: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1410: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1420: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1430: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72  test version for
1440: 20 74 68 65 20 43 4c 52 2e 20 20 49 66 20 74 68   the CLR.  If th
1450: 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20  is variable..
1460: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20       #       is
1470: 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 64 65 66  not set, the def
1480: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will
1490: 62 65 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74  be based on whet
14a0: 68 65 72 20 6f 72 20 6e 6f 74 0d 0a 20 20 20 20  her or not..
14b0: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
14c0: 65 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69  e has been compi
14d0: 6c 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20  led against the
14e0: 43 4c 52 20 76 32 2e 30 20 6f 72 20 43 4c 52 20  CLR v2.0 or CLR
14f0: 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 23  v4.0...        #
1500: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1510: 20 24 3a 3a 74 65 73 74 5f 63 6c 72 0d 0a 20 20   $::test_clr.. 1520: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1530: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1540: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i 1550: 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e f Eagle has been 1560: 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 compiled agains 1570: 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 t the CLR v4.0. 1580: 20 49 66 20 73 6f 2c 0d 0a 20 20 20 20 20 20 20 If so,.. 1590: 20 23 20 20 20 20 20 20 20 6a 75 73 74 20 75 73 # just us 15a0: 65 20 74 68 61 74 20 43 4c 52 20 76 65 72 73 69 e that CLR versi 15b0: 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20 on. Otherwise, 15c0: 75 73 65 20 74 68 65 20 76 65 72 73 69 6f 6e 20 use the version 15d0: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20 for the.. 15e0: 20 23 20 20 20 20 20 20 20 43 4c 52 20 76 32 2e # CLR v2. 15f0: 30 2e 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 0. If another m 1600: 61 6a 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 ajor [incompatib 1610: 6c 65 5d 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 le] version of t 1620: 68 65 20 43 4c 52 0d 0a 20 20 20 20 20 20 20 20 he CLR.. 1630: 23 20 20 20 20 20 20 20 69 73 20 72 65 6c 65 61 # is relea 1640: 73 65 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 sed, this check 1650: 77 69 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 20 will have to be 1660: 63 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 changed. The de 1670: 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 23 fault.. # 1680: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 76 version v 1690: 61 6c 75 65 20 66 6f 72 20 61 20 70 61 72 74 69 alue for a parti 16a0: 63 75 6c 61 72 20 43 4c 52 20 76 65 72 73 69 6f cular CLR versio 16b0: 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72 69 64 n may be overrid 16c0: 64 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 den.. # 16d0: 20 20 20 20 20 62 79 20 73 65 74 74 69 6e 67 20 by setting 16e0: 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 the global varia 16f0: 62 6c 65 20 22 74 65 73 74 5f 63 6c 72 5f 76 24 ble "test_clr_v$
1700: 58 22 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d  X", where "$X" m 1710: 61 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ay.. # 1720: 20 20 20 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 [currently] 1730: 62 65 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 be either "2" or 1740: 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 "4"... # 1750: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 .. if {[h 1760: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d aveConstraint im 1770: 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 ageRuntime40]} t 1780: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1790: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 17a0: 73 20 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 5d s ::test_clr_v4] 17b0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 17c0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 17d0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f gth$::test_clr_
17e0: 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  v4] > 0} then {.
17f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
1800: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1810: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63  TE: Use the spec
1820: 69 66 69 65 64 20 74 65 73 74 20 76 65 72 73 69  ified test versi
1830: 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  on for the CLR v
1840: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  4.0...
1850: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1860: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f   return $::test_ 1870: 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20 clr_v4.. 1880: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1890: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 18a0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 18b0: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 se the default t 18c0: 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 est version for 18d0: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 the CLR v4.0... 18e0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 18f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 1900: 20 34 2e 30 2e 33 30 33 31 39 3b 20 23 20 54 4f 4.0.30319; # TO 1910: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 DO: Good "fallba 1920: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 ck" default?.. 1930: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1940: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1950: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 1960: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 exists ::test_c 1970: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20 lr_v2] && \.. 1980: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 1990: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 ng length$::tes
19a0: 74 5f 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74  t_clr_v2] > 0} t
19b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
19d0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
19e0: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74  e specified test
19f0: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65   version for the
1a00: 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20   CLR v2.0...
1a10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1a20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 1a30: 3a 74 65 73 74 5f 63 6c 72 5f 76 32 0d 0a 20 20 :test_clr_v2.. 1a40: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1a50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 1a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 1a70: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 OTE: Use the def 1a80: 61 75 6c 74 20 74 65 73 74 20 76 65 72 73 69 6f ault test versio 1a90: 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 n for the CLR v2 1aa0: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .0... 1ab0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1ac0: 72 65 74 75 72 6e 20 32 2e 30 2e 35 30 37 32 37 return 2.0.50727 1ad0: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 ; # TODO: Good " 1ae0: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c fallback" defaul 1af0: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d t?.. }. 1b00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 1b10: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 1b20: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 proc getBuild 1b30: 59 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 Years {} {.. 1b40: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1b50: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 E: See if the li 1b60: 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 st of test years 1b70: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 1b80: 64 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 dden by the user 1b90: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1ba0: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d (e.g. on the com 1bb0: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 mand line)... 1bc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 1bd0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 1be0: 65 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c est_years] && [l 1bf0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 length$::test_y
1c00: 65 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ears] > 0} then
1c10: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1c20: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1c30: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1c40: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61  list of test yea
1c50: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rs...        #..
1c60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $1c70: 3a 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 ::test_years.. 1c80: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1c90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1ca0: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 1cb0: 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 default list of 1cc0: 20 74 65 73 74 20 79 65 61 72 73 20 28 69 2e 65 test years (i.e 1cd0: 2e 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 . all)... 1ce0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 1cf0: 72 6e 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30 rn [list 2005 20 1d00: 30 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31 08 2010 2012 201 1d10: 33 20 32 30 31 35 5d 0d 0a 20 20 20 20 20 20 7d 3 2015].. } 1d20: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1d30: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 4e 65 74 proc getBuildNet 1d40: 46 78 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 Fx {} {.. # 1d50: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 1d60: 53 65 65 20 69 66 20 74 68 65 20 74 65 73 74 20 See if the test 1d70: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 73 .NET Framework s 1d80: 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 etting has been 1d90: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20 overridden by.. 1da0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 1db0: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 user (e.g. on t 1dc0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 he command line) 1dd0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1de0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 1df0: 74 73 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 ts ::test_net_fx 1e00: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1e10: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 1e20: 20 24 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5d$::test_net_fx]
1e30: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
1e40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1e50: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65   # NOTE: Use the
1e60: 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20   specified test
1e70: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 0d  .NET Framework..
1e80: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1e90: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65      return $::te 1ea0: 73 74 5f 6e 65 74 5f 66 78 0d 0a 20 20 20 20 20 st_net_fx.. 1eb0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1ec0: 20 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 set year [get 1ed0: 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 BuildYear].. 1ee0: 20 20 20 20 73 65 74 20 79 65 61 72 56 61 72 4e set yearVarN 1ef0: 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 ame [appendArgs 1f00: 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5f 20 24 ::test_net_fx_$
1f10: 79 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  year]....
1f20: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
1f30: 73 20 24 79 65 61 72 56 61 72 4e 61 6d 65 5d 20  s $yearVarName] 1f40: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 1f50: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 1f60: 20 5b 73 65 74 20 24 79 65 61 72 56 61 72 4e 61 [set$yearVarNa
1f70: 6d 65 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  me]] > 0} then {
1f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1f90: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1fa0: 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69   Use the specifi
1fb0: 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 72 61  ed test .NET Fra
1fc0: 6d 65 77 6f 72 6b 2c 20 62 61 73 65 64 20 6f 6e  mework, based on
1fd0: 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 20   the build..
1fe0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 79 65        #       ye
1ff0: 61 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ar...          #
2000: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
2010: 72 6e 20 5b 73 65 74 20 24 79 65 61 72 56 61 72  rn [set $yearVar 2020: 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d Name].. } 2030: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 2040: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 2050: 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b # NOTE: Fallback 2060: 20 74 6f 20 74 68 65 20 22 77 65 6c 6c 20 6b 6e to the "well kn 2070: 6f 77 6e 22 20 2e 4e 45 54 20 46 72 61 6d 65 77 own" .NET Framew 2080: 6f 72 6b 20 76 65 72 73 69 6f 6e 20 74 68 61 74 ork version that 2090: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 20a0: 20 20 20 20 69 73 20 6d 6f 73 74 20 63 6c 6f 73 is most clos 20b0: 65 6c 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 ely associated w 20c0: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 ith a particular 20d0: 20 76 65 72 73 69 6f 6e 20 6f 66 0d 0a 20 20 20 version of.. 20e0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 56 # V 20f0: 69 73 75 61 6c 20 53 74 75 64 69 6f 2e 0d 0a 20 isual Studio... 2100: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 2110: 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 switch -ex 2120: 61 63 74 20 2d 2d 20 24 79 65 61 72 20 7b 0d 0a act --$year {..
2130: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 30 35              2005
2140: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2150: 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 32 30    return netFx20
2160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 30  .            200
2180: 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  8 {..
2190: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33     return netFx3
21a0: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  5..            }
21b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30  ..            20
21c0: 31 30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  10 {..
21d0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78      return netFx
21e0: 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  40..
21f0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32  }..            2
2200: 30 31 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  012 {..
2210: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46       return netF
2220: 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x45..
2230: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
2240: 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 20  2013 {..
2250: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74        return net
2260: 46 78 34 35 31 3b 20 23 20 54 4f 44 4f 3a 20 4f  Fx451; # TODO: O
2270: 72 20 22 6e 65 74 46 78 34 35 32 22 3f 0d 0a 20  r "netFx452"?..
2280: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
2290: 20 20 20 20 20 20 20 20 20 20 32 30 31 35 20 7b            2015 {
22a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22b0: 72 65 74 75 72 6e 20 6e 65 74 46 78 34 36 3b 20  return netFx46;
22c0: 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 46  # TODO: Or "netF
22d0: 78 34 36 31 22 3f 0d 0a 20 20 20 20 20 20 20 20  x461"?..
22e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
22f0: 20 20 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20     default {..
2300: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2310: 72 6e 20 6e 65 74 46 78 33 35 3b 20 23 20 54 4f  rn netFx35; # TO
2320: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61  DO: Good "fallba
2330: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20  ck" default?..
2340: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2350: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
2360: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
2370: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20    }.....    #..
2380: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
2390: 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64  procedure should
23a0: 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   return non-zero
23b0: 20 69 66 20 74 68 65 20 63 6f 6e 66 69 67 75 72   if the configur
23c0: 65 64 20 74 65 73 74 0d 0a 20 20 20 20 23 20 20  ed test..    #
23d0: 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 69 73       platform is
23e0: 20 6d 6f 73 74 20 6c 69 6b 65 6c 79 20 74 68 65   most likely the
23f0: 20 64 65 66 61 75 6c 74 20 66 6f 72 20 74 68 69   default for thi
2400: 73 20 6d 61 63 68 69 6e 65 2e 0d 0a 20 20 20 20  s machine...
2410: 23 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 44 65  #..    proc isDe
2420: 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f  faultBuildPlatfo
2430: 72 6d 20 7b 20 7b 76 65 72 62 6f 73 65 20 66 61  rm { {verbose fa
2440: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
2450: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
2460: 20 52 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36   Running on WoW6
2470: 34 20 69 73 20 6e 65 76 65 72 20 74 68 65 20 64  4 is never the d
2480: 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e  efault platform.
2490: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
24a0: 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57   if {[isRunningW
24b0: 6f 57 36 34 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  oW64]} then {..
24c0: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb 24d0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. 24e0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
24f0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
2510: 2d 2d 2d 20 64 65 74 65 63 74 65 64 20 6e 6f 6e  --- detected non
2520: 2d 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72  -default platfor
2530: 6d 20 28 57 6f 57 36 34 29 5c 6e 22 0d 0a 20 20  m (WoW64)\n"..
2540: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
2550: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20   return false..
2560: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2570: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
2580: 20 54 68 69 73 20 68 61 73 20 61 20 67 6f 6f 64   This has a good
2590: 20 63 68 61 6e 63 65 20 6f 66 20 62 65 69 6e 67   chance of being
25a0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61   the default pla
25b0: 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d  tform...      #.
25c0: 0a 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62  .      if {$verb 25d0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. 25e0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
25f0: 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  st_channel "----
2600: 20 64 65 74 65 63 74 65 64 20 64 65 66 61 75 6c   detected defaul
2610: 74 20 70 6c 61 74 66 6f 72 6d 5c 6e 22 0d 0a 20  t platform\n"..
2620: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65       }..      re
2630: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 7d  turn true..    }
2640: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
2650: 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 7b  tBuildPlatform {
2660: 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20   native } {..
2670: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
2680: 73 74 73 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66  sts ::test_platf
2690: 6f 72 6d 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  orm] && \..
26a0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
26b0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74  gth $::test_plat 26c0: 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 26d0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 26e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 26f0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 2700: 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 2e 20 20 test platform. 2710: 49 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 If this variable 2720: 20 69 73 20 6e 6f 74 20 73 65 74 2c 0d 0a 20 20 is not set,.. 2730: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 2740: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 e default value 2750: 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e will be based on 2760: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 the machine arc 2770: 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 hitecture... 2780: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 2790: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6e 61 eturn [expr {$na
27a0: 74 69 76 65 20 3f 20 24 3a 3a 74 65 73 74 5f 70  tive ? $::test_p 27b0: 6c 61 74 66 6f 72 6d 20 3a 20 22 22 7d 5d 0d 0a latform : ""}].. 27c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 27d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 27e0: 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 26 26 20 est_machine] && 27f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 2800: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 ring length$::t
2810: 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3e 20 30  est_machine] > 0
2820: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2830: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2840: 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 20  OTE: For native
2850: 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 74  builds, return t
2860: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  he platform name
2870: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
2880: 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  o..        #
2890: 20 20 20 74 68 65 20 74 65 73 74 20 6d 61 63 68     the test mach
28a0: 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65  ine architecture
28b0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72 65 74  ; otherwise, ret
28c0: 75 72 6e 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20  urn an empty..
28d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74        #       st
28e0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23  ring...        #
28f0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2900: 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20   [expr {..
2910: 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20 5b 6d      $native ? [m 2920: 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d achineToPlatform 2930: 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65$::test_machine
2940: 5d 20 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20  ] : ""..
2950: 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  }]..      } else
2960: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2970: 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   ::tcl_platform(
2980: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20  machine)]} then
2990: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
29a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f        # NOTE: Fo
29b0: 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c  r native builds,
29c0: 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74   return the plat
29d0: 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73  form name corres
29e0: 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20  ponding to..
29f0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
2a00: 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63  machine architec
2a10: 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c  ture; otherwise,
2a20: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
2a30: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
2a40: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
2a50: 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20  urn [expr {..
2a60: 20 20 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f         $native ? 2a70: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 [machineToPlatf 2a80: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 orm$::tcl_platf
2a90: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 20 3a 20  orm(machine)] :
2aa0: 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a  ""..        }]..
2ab0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
2ac0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2ad0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61     # NOTE: No ma
2ae0: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75  chine architectu
2af0: 72 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  re is available,
2b00: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
2b10: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
2b20: 20 20 23 20 20 20 20 20 20 20 49 74 20 69 73 20    #       It is
2b30: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74  important to ret
2b40: 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72  urn an empty str
2b50: 69 6e 67 20 68 65 72 65 20 62 65 63 61 75 73 65  ing here because
2b60: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
2b70: 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20        result of
2b80: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d  this procedure m
2b90: 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ay be used with
2ba0: 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20  [file join]...
2bb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2bc0: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
2bd0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
2be0: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
2bf0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 7d  Configuration {}
2c00: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
2c10: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
2c20: 66 20 74 68 65 20 22 63 6f 6e 66 69 67 75 72 61  f the "configura
2c30: 74 69 6f 6e 22 20 73 65 74 74 69 6e 67 20 68 61  tion" setting ha
2c40: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
2c50: 6e 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  n by the..
2c60: 23 20 20 20 20 20 20 20 75 73 65 72 20 28 65 2e  #       user (e.
2c70: 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  g. on the comman
2c80: 64 20 6c 69 6e 65 29 2e 20 20 54 68 69 73 20 68  d line).  This h
2c90: 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20 65 78 61  elps control exa
2ca0: 63 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  ctly..      #
2cb0: 20 20 20 20 77 68 69 63 68 20 73 65 74 20 6f 66      which set of
2cc0: 20 62 69 6e 61 72 69 65 73 20 77 65 20 61 72 65   binaries we are
2cd0: 20 74 65 73 74 69 6e 67 20 28 69 2e 65 2e 20 74   testing (i.e. t
2ce0: 68 6f 73 65 20 62 75 69 6c 74 20 69 6e 20 74 68  hose built in th
2cf0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
2d00: 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c   "Debug" or "Rel
2d10: 65 61 73 65 22 20 62 75 69 6c 64 20 63 6f 6e 66  ease" build conf
2d20: 69 67 75 72 61 74 69 6f 6e 73 29 2e 20 20 54 6f  igurations).  To
2d30: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 0d 0a   override this..
2d40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
2d50: 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d  lue via the comm
2d60: 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20  and line, enter
2d70: 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61  a command simila
2d80: 72 20 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20 20 20  r to one of..
2d90: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 66     #       the f
2da0: 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e  ollowing (all on
2db0: 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20   one line):..
2dc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
2dd0: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
2de0: 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a  xe -anyInitializ
2df0: 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66  e "set test_conf
2e00: 69 67 75 72 61 74 69 6f 6e 20 44 65 62 75 67 22  iguration Debug"
2e10: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2e20: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74    -file .\path\t
2e30: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20  o\all.eagle..
2e40: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
2e50: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
2e60: 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a  xe -anyInitializ
2e70: 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66  e "set test_conf
2e80: 69 67 75 72 61 74 69 6f 6e 20 52 65 6c 65 61 73  iguration Releas
2e90: 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  e"..      #
2ea0: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
2eb0: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
2ec0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
2ed0: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
2ee0: 2e 65 78 65 20 2d 66 69 6c 65 20 2e 5c 70 61 74  .exe -file .\pat
2ef0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 20 2d  h\to\all.eagle -
2f00: 70 72 65 54 65 73 74 0d 0a 20 20 20 20 20 20 23  preTest..      #
2f10: 20 20 20 20 20 20 20 20 20 22 75 6e 73 65 74 20           "unset
2f20: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74  -nocomplain test
2f30: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 0d  _configuration".
2f40: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
2f50: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2f60: 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72   ::test_configur
2f70: 61 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20  ation] && \..
2f80: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
2f90: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f  ength $::test_co 2fa0: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e 20 30 nfiguration] > 0 2fb0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2fc0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2fd0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 2fe0: 63 69 66 69 65 64 20 74 65 73 74 20 63 6f 6e 66 cified test conf 2ff0: 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 iguration. The 3000: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 75 73 default value us 3010: 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ed.. # 3020: 20 20 20 20 66 6f 72 20 74 68 69 73 20 76 61 72 for this var 3030: 69 61 62 6c 65 20 69 73 20 74 79 70 69 63 61 6c iable is typical 3040: 6c 79 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 ly "Release", as 3050: 20 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 set by the test 3060: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3070: 20 20 73 75 69 74 65 20 69 74 73 65 6c 66 2e 0d suite itself.. 3080: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 3090: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 return$::te
30a0: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
30b0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
30c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
30d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72       # NOTE: Nor
30e0: 6d 61 6c 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e  mally, we will n
30f0: 65 76 65 72 20 68 69 74 20 74 68 69 73 20 63 61  ever hit this ca
3100: 73 65 20 62 65 63 61 75 73 65 20 74 68 65 20 76  se because the v
3110: 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 20  alue of the..
3120: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
3130: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  t configuration
3140: 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c 77 61  variable is alwa
3150: 79 73 20 73 65 74 20 62 79 20 74 68 65 20 74 65  ys set by the te
3160: 73 74 20 73 75 69 74 65 0d 0a 20 20 20 20 20 20  st suite..
3170: 20 20 23 20 20 20 20 20 20 20 69 74 73 65 6c 66    #       itself
3180: 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61  ; however, it ca
3190: 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20  n be overridden
31a0: 75 73 69 6e 67 20 74 68 65 20 75 6e 73 65 74 20  using the unset
31b0: 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20  command..
31c0: 20 23 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68   #       from th
31d0: 65 20 2d 70 72 65 54 65 73 74 20 6f 70 74 69 6f  e -preTest optio
31e0: 6e 20 74 6f 20 74 68 65 20 74 65 73 74 20 73 75  n to the test su
31f0: 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ite...        #.
3200: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3210: 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72  $::eagle_platfor 3220: 6d 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 m(configuration) 3230: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 3240: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 3250: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 tBuildConfigurat 3260: 69 6f 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ions {} {.. 3270: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 3280: 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 : See if the lis 3290: 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 t of test config 32a0: 75 72 61 74 69 6f 6e 73 20 68 61 73 20 62 65 65 urations has bee 32b0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d n overridden by. 32c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 32d0: 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e he user (e.g. on 32e0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e the command lin 32f0: 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e)... #.. 3300: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 3310: 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 ists ::test_conf 3320: 69 67 75 72 61 74 69 6f 6e 73 5d 20 26 26 20 5c igurations] && \ 3330: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 .. [lle 3340: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e ngth$::test_con
3350: 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 3e 20 30  figurations] > 0
3360: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
3370: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
3380: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65  OTE: Use the spe
3390: 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 20 74  cified list of t
33a0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
33b0: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ns...        #..
33c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $33d0: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 ::test_configura 33e0: 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d 20 65 tions.. } e 33f0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 3400: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 3410: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c : Use the defaul 3420: 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 t list of test c 3430: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a onfigurations... 3440: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 3450: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list 3460: 44 65 62 75 67 20 52 65 6c 65 61 73 65 5d 0d 0a Debug Release].. 3470: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 3480: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 3490: 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 uildBaseDirector 34a0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 34b0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 34c0: 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 62 61 igure out the ba 34d0: 73 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 se directory whe 34e0: 72 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 re all the build 34f0: 73 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 s should be.. 3500: 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 # locat 3510: 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 ed. This will b 3520: 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 e the directory 3530: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 that contains th 3540: 65 20 61 63 74 75 61 6c 0d 0a 20 20 20 20 20 20 e actual.. 3550: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 6f 75 # build ou 3560: 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 20 28 tput directory ( 3570: 65 2e 67 2e 20 70 61 72 65 6e 74 20 6f 66 20 22 e.g. parent of " 3580: 62 69 6e 22 29 2e 0d 0a 20 20 20 20 20 20 23 0d bin")... #. 3590: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 35a0: 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f exists ::build_ 35b0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 35c0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 35d0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
35e0: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
35f0: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
3600: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
3610: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
3620: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
3630: 74 68 65 20 62 75 69 6c 64 20 62 61 73 65 20 64  the build base d
3640: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65  irectory has bee
3650: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20  n overridden;..
3660: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
3670: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
3680: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20   verbatim...
3690: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
36a0: 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 62  eturn $::build_b 36b0: 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 ase_directory.. 36c0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 36d0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f info exists ::co 36e0: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 mmon_directory] 36f0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 3700: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
3710: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
3720: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
3730: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
3740: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65 78 74      # NOTE: Next
3750: 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68  , fallback to th
3760: 65 20 67 72 61 6e 64 70 61 72 65 6e 74 20 64 69  e grandparent di
3770: 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f  rectory of the o
3780: 6e 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ne..        #
3790: 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74      containing t
37a0: 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e 20 22  his file (i.e. "
37b0: 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20  common.eagle"),
37c0: 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20  if available...
37d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
37e0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64    return [file d
37f0: 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72  irname [file dir
3800: 6e 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64  name $::common_d 3810: 69 72 65 63 74 6f 72 79 5d 5d 0d 0a 20 20 20 20 irectory]].. 3820: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 } elseif {[inf 3830: 6f 20 65 78 69 73 74 73 20 3a 3a 70 61 74 68 5d o exists ::path] 3840: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 3850: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 3860: 24 3a 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74 68$::path] > 0} th
3870: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
3880: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
3890: 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 61   Finally, fallba
38a0: 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74  ck to the parent
38b0: 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68   directory of th
38c0: 65 20 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 20  e EagleTest..
38d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 74       #       pat
38e0: 68 2e 20 20 54 68 65 20 45 61 67 6c 65 54 65 73  h.  The EagleTes
38f0: 74 20 70 61 63 6b 61 67 65 20 67 75 61 72 61 6e  t package guaran
3900: 74 65 65 73 20 74 68 61 74 20 74 68 69 73 20 76  tees that this v
3910: 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ariable..
3920: 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65   #       will be
3930: 20 73 65 74 20 74 6f 20 74 68 65 20 64 69 72 65   set to the dire
3940: 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  ctory containing
3950: 20 74 68 65 20 66 69 72 73 74 20 66 69 6c 65 20   the first file
3960: 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  to..        #
3970: 20 20 20 20 65 78 65 63 75 74 65 20 74 68 65 20      execute the
3980: 5b 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 65  [runTestPrologue
3990: 5d 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79  ] script library
39a0: 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20   procedure...
39b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
39c0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72  return [file dir
39d0: 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20  name $::path].. 39e0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 39f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3a00: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 74 # NOTE: No pat 3a10: 68 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 h is available, 3a20: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 return an empty 3a30: 73 74 72 69 6e 67 2e 20 20 54 68 69 73 20 70 6f string. This po 3a40: 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 int.. # 3a50: 20 20 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 20 should not 3a60: 62 65 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 20 be reached... 3a70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 3a80: 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 return "".. 3a90: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 3aa0: 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 proc getSQLite 3ab0: 54 65 73 74 44 61 74 61 50 61 74 68 20 7b 7d 20 TestDataPath {} 3ac0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 3ad0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 # NOTE: Figure 3ae0: 20 6f 75 74 20 74 68 65 20 64 69 72 65 63 74 6f out the directo 3af0: 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 ry where all the 3b00: 20 74 65 73 74 20 64 61 74 61 20 66 69 6c 65 73 test data files 3b10: 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 23 should.. # 3b20: 20 20 20 20 20 20 20 62 65 20 6c 6f 63 61 74 65 be locate 3b30: 64 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 d. This should 3b40: 62 65 20 74 68 65 20 22 64 61 74 61 22 20 64 69 be the "data" di 3b50: 72 65 63 74 6f 72 79 20 62 65 6e 65 61 74 68 20 rectory beneath 3b60: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 3b70: 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e directory con 3b80: 74 61 69 6e 69 6e 67 20 74 68 65 20 61 63 74 75 taining the actu 3b90: 61 6c 20 74 65 73 74 20 73 63 72 69 70 74 73 2e al test scripts. 3ba0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 3bb0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f return [file jo 3bc0: 69 6e 20 24 3a 3a 70 61 74 68 20 64 61 74 61 5d in$::path data]
3bd0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3be0: 70 72 6f 63 20 69 73 52 75 6e 6e 69 6e 67 57 6f  proc isRunningWo
3bf0: 57 36 34 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  W64 {} {..
3c00: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
3c10: 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 73 74 20 75   For now, just u
3c20: 73 65 20 74 68 65 20 65 78 69 73 74 69 6e 67 20  se the existing
3c30: 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 20  test constraint
3c40: 66 6f 72 20 64 65 74 65 63 74 69 6e 67 0d 0a 20  for detecting..
3c50: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 20 57       #       a W
3c60: 6f 57 36 34 20 70 72 6f 63 65 73 73 2e 0d 0a 20  oW64 process...
3c70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
3c80: 74 75 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 72  turn [haveConstr
3c90: 61 69 6e 74 20 77 6f 77 36 34 5d 0d 0a 20 20 20  aint wow64]..
3ca0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
3cb0: 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d  isMixedModeAssem
3cc0: 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  bly { fileName {
3cd0: 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  varName ""} } {.
3ce0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3cf0: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 6d  # NOTE: First, m
3d00: 61 6b 65 20 73 75 72 65 20 74 68 65 20 74 65 73  ake sure the tes
3d10: 74 20 73 75 69 74 65 20 69 6e 66 72 61 73 74 72  t suite infrastr
3d20: 75 63 74 75 72 65 20 69 73 20 61 6c 6c 6f 77 65  ucture is allowe
3d30: 64 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  d to..      #
3d40: 20 20 20 20 75 73 65 20 74 68 65 20 5b 65 78 65      use the [exe
3d50: 63 5d 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20  c] command...
3d60: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
3d70: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
3d80: 6e 6f 28 65 78 65 63 29 5d 20 26 26 20 21 5b 69  no(exec)] && ![i
3d90: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
3da0: 63 6f 72 46 6c 61 67 73 29 5d 7d 20 74 68 65 6e  corFlags)]} then
3db0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
3dc0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
3dd0: 66 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f  f the location o
3de0: 66 20 43 6f 72 46 6c 61 67 73 20 69 73 20 70 72  f CorFlags is pr
3df0: 65 73 65 6e 74 20 69 6e 20 74 68 65 20 65 6e 76  esent in the env
3e00: 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20 20 20  ironment,..
3e10: 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20 69     #       use i
3e20: 74 3b 20 6f 74 68 65 72 77 69 73 65 20 61 73 73  t; otherwise ass
3e30: 75 6d 65 20 69 74 20 69 73 20 69 6e 20 74 68 65  ume it is in the
3e40: 20 50 41 54 48 2e 0d 0a 20 20 20 20 20 20 20 20   PATH...
3e50: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  #..        set c
3e60: 6f 72 46 6c 61 67 73 20 5b 65 78 70 72 20 7b 0d  orFlags [expr {.
3e70: 0a 20 20 20 20 20 20 20 20 20 20 5b 69 6e 66 6f  .          [info
3e80: 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 43 6f   exists ::env(Co
3e90: 72 46 6c 61 67 73 29 5d 20 3f 20 24 3a 3a 65 6e  rFlags)] ? $::en 3ea0: 76 28 43 6f 72 46 6c 61 67 73 29 20 3a 20 22 43 v(CorFlags) : "C 3eb0: 6f 72 46 6c 61 67 73 22 0d 0a 20 20 20 20 20 20 orFlags".. 3ec0: 20 20 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }].... 3ed0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 3ee0: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 E: Attempt to ex 3ef0: 65 63 75 74 65 20 43 6f 72 46 6c 61 67 73 20 6f ecute CorFlags o 3f00: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 n the specified 3f10: 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 file... # 3f20: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 3f30: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 3f40: 20 20 65 78 65 63 20 2d 2d 20 24 63 6f 72 46 6c exec --$corFl
3f50: 61 67 73 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ags [file native
3f60: 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  name $fileName]. 3f70: 0a 20 20 20 20 20 20 20 20 7d 20 65 78 65 63 5d . } exec] 3f80: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 3f90: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 3fa0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 3fb0: 20 72 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 requested by ou 3fc0: 72 20 63 61 6c 6c 65 72 2c 20 61 74 74 65 6d 70 r caller, attemp 3fd0: 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 t to determine t 3fe0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 he.. # 3ff0: 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 66 platform f 4000: 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 64 or the specified 4010: 20 66 69 6c 65 20 61 73 20 77 65 6c 6c 2e 0d 0a file as well... 4020: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 4030: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 4040: 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 ng length$varNa
4050: 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
4060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
4070: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
4080: 54 45 3a 20 53 74 6f 72 65 20 74 68 65 20 70 6c  TE: Store the pl
4090: 61 74 66 6f 72 6d 20 69 6e 20 74 68 65 20 6e 61  atform in the na
40a0: 6d 65 64 20 76 61 72 69 61 62 6c 65 20 69 6e 20  med variable in
40b0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..
40c0: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74   #       context
40d0: 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   of our caller..
40e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
40f0: 20 20 20 20 20 20 20 20 20 20 20 20 75 70 76 61              upva
4100: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 70 6c 61  r 1 $varName pla 4110: 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 20 tform.... 4120: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4130: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 4140: 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 mpt to extract t 4150: 68 65 20 50 45 20 6c 69 6e 65 20 66 72 6f 6d 20 he PE line from 4160: 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 the captured.. 4170: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 4180: 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 output. If th 4190: 69 73 20 76 61 6c 75 65 20 69 73 20 22 50 45 33 is value is "PE3 41a0: 32 22 20 6f 72 20 22 50 45 33 32 2b 22 2c 20 74 2" or "PE32+", t 41b0: 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 he.. 41c0: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly 41d0: 20 66 69 6c 65 20 69 73 20 33 32 2d 62 69 74 20 file is 32-bit 41e0: 6f 72 20 36 34 2d 62 69 74 2c 20 72 65 73 70 65 or 64-bit, respe 41f0: 63 74 69 76 65 6c 79 3b 0d 0a 20 20 20 20 20 20 ctively;.. 4200: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 # ot 4210: 68 65 72 77 69 73 65 2c 20 69 74 73 20 74 79 70 herwise, its typ 4220: 65 20 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a 20 e is unknown... 4230: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 4240: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 set pa 4250: 74 74 65 72 6e 20 7b 5e 50 45 20 20 20 20 20 20 ttern {^PE 4260: 20 20 3a 20 28 50 45 33 32 7c 50 45 33 32 5c 2b : (PE32|PE32\+ 4270: 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 )\s+$}....
4280: 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78        if {[regex
4290: 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74  p -line -- $patt 42a0: 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 ern$exec dummy
42b0: 70 65 33 32 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  pe32]} then {..
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
42d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
42e0: 48 41 43 4b 3a 20 54 68 69 73 20 5b 73 77 69 74  HACK: This [swit
42f0: 63 68 5d 20 61 73 73 75 6d 65 73 20 74 68 61 74  ch] assumes that
4300: 20 33 32 2d 62 69 74 20 65 78 65 63 75 74 61 62   32-bit executab
4310: 6c 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20  les are..
4320: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
4330: 6c 77 61 79 73 20 78 38 36 20 61 6e 64 20 74 68  lways x86 and th
4340: 61 74 20 36 34 2d 62 69 74 20 65 78 65 63 75 74  at 64-bit execut
4350: 61 62 6c 65 73 20 61 72 65 20 61 6c 77 61 79 73  ables are always
4360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
4370: 23 20 20 20 20 20 20 20 78 36 34 2e 0d 0a 20 20  #       x64...
4380: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
4390: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69               swi
43a0: 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 70  tch -exact -- $p 43b0: 65 33 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 e32 {.. 43c0: 20 20 20 20 20 20 20 50 45 33 32 20 7b 0d 0a 20 PE32 {.. 43d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43e0: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 57 69 set platform Wi 43f0: 6e 33 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n32.. 4400: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 4410: 20 20 20 20 20 20 20 20 50 45 33 32 2b 20 7b 0d PE32+ {. 4420: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 4430: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 4440: 78 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x64.. 4450: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 4460: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 default 4470: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 4480: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 4490: 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 m "".. 44a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 44b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 44c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se 44e0: 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 t platform "".. 44f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 4500: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 4510: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4520: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 4530: 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 mpt to extract t 4540: 68 65 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 20 66 he ILONLY line f 4550: 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 rom the captured 4560: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 4570: 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 output. If 4580: 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 7a 65 this value is ze 4590: 72 6f 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 ro, the specifie 45a0: 64 20 66 69 6c 65 20 6d 75 73 74 0d 0a 20 20 20 d file must.. 45b0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 45c0: 65 20 61 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 e a mixed-mode a 45d0: 73 73 65 6d 62 6c 79 3b 20 6f 74 68 65 72 77 69 ssembly; otherwi 45e0: 73 65 2c 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 se, it contains 45f0: 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 only.. 4600: 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 # managed 4610: 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 20 20 components... 4620: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4630: 20 20 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 set pattern 4640: 7b 5e 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 28 30 {^ILONLY : (0 4650: 7c 31 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 |1)\s+$}....
4660: 20 20 20 20 20 20 69 66 20 7b 21 5b 72 65 67 65        if {![rege
4670: 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74  xp -line -- $pat 4680: 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 tern$exec dummy
4690: 20 69 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e 20 7b   ilOnly]} then {
46a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
46b0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
46c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
46d0: 20 20 20 20 20 69 66 20 7b 21 24 69 6c 4f 6e 6c       if {!$ilOnl 46e0: 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 y} then {.. 46f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 4700: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d ue.. }. 4710: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 4720: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 4730: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 4740: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 4750: 63 61 6e 6e 6f 74 20 75 73 65 20 5b 65 78 65 63 cannot use [exec 4760: 5d 20 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 6f ] or execution o 4770: 66 20 43 6f 72 46 6c 61 67 73 0d 0a 20 20 20 20 f CorFlags.. 4780: 20 20 23 20 20 20 20 20 20 20 66 61 69 6c 65 64 # failed 4790: 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0d , return false.. 47a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 47b0: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. 47c0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 47d0: 20 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 getNativeLibrar 47e0: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b yFileNamesOnly { 47f0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4800: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 4810: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 t, check if the 4820: 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c list of native l 4830: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 ibrary file name 4840: 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 s has been.. 4850: 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c # manual 4860: 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e 0d 0a ly overridden... 4870: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 4880: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 4890: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 ::native_library 48a0: 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 26 20 _file_names] && 48b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c \.. [ll 48c0: 65 6e 67 74 68 20 24 3a 3a 6e 61 74 69 76 65 5f ength$::native_
48d0: 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e 61 6d  library_file_nam
48e0: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
48f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4900: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
4910: 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c  list of native l
4920: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65  ibrary file name
4930: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  s has been overr
4940: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
4950: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
4960: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74  e, use it verbat
4970: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
4980: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $4990: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 ::native_library 49a0: 5f 66 69 6c 65 5f 6e 61 6d 65 73 0d 0a 20 20 20 _file_names.. 49b0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 } elseif {[is 49c0: 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20 7b Windows]} then { 49d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 49e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68 # NOTE: Oth 49f0: 65 72 77 69 73 65 2c 20 6f 6e 20 57 69 6e 64 6f erwise, on Windo 4a00: 77 73 2c 20 61 6c 77 61 79 73 20 75 73 65 20 74 ws, always use t 4a10: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 he default file 4a20: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 name.. # 4a30: 20 20 20 20 20 20 22 73 71 6c 69 74 65 33 2e 64 "sqlite3.d 4a40: 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ll"... #. 4a50: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 4a60: 5b 6c 69 73 74 20 73 71 6c 69 74 65 33 2e 64 6c [list sqlite3.dl 4a70: 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 l].. } else 4a80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 4a90: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f # NOTE: O 4aa0: 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e therwise, return 4ab0: 20 62 6f 74 68 20 74 68 65 20 67 65 6e 65 72 69 both the generi 4ac0: 63 20 50 4f 53 49 58 20 66 69 6c 65 20 6e 61 6d c POSIX file nam 4ad0: 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 20 20 e and the.. 4ae0: 20 20 20 23 20 20 20 20 20 20 20 4d 61 63 20 4f # Mac O 4af0: 53 20 58 20 66 69 6c 65 20 6e 61 6d 65 2c 20 73 S X file name, s 4b00: 69 6e 63 65 20 77 65 20 64 6f 20 6e 6f 74 20 63 ince we do not c 4b10: 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61 6e urrently have an 4b20: 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 easy.. # 4b30: 20 20 20 20 20 20 20 77 61 79 20 74 6f 20 64 65 way to de 4b40: 74 65 63 74 20 77 68 69 63 68 20 6f 66 20 74 68 tect which of th 4b50: 6f 73 65 20 70 6c 61 74 66 6f 72 6d 73 20 77 65 ose platforms we 4b60: 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 2e are running on. 4b70: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 4b80: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 4b90: 74 20 6c 69 62 73 71 6c 69 74 65 33 2e 73 6f 20 t libsqlite3.so 4ba0: 6c 69 62 73 71 6c 69 74 65 33 2e 64 79 6c 69 62 libsqlite3.dylib 4bb0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 4bc0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 4bd0: 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c etInteropAssembl 4be0: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b yFileNamesOnly { 4bf0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4c00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 4c10: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 t, check if the 4c20: 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f 70 20 list of interop 4c30: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 assembly file na 4c40: 6d 65 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 mes has been.. 4c50: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 # manu 4c60: 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e ally overridden. 4c70: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4c80: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 4c90: 73 20 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 73 65 s ::interop_asse 4ca0: 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d mbly_file_names] 4cb0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 4cc0: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 69 6e 74 [llength$::int
4cd0: 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69  erop_assembly_fi
4ce0: 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d 20 74  le_names] > 0} t
4cf0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
4d00: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
4d10: 3a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 69 6e  : The list of in
4d20: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66  terop assembly f
4d30: 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62 65  ile names has be
4d40: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
4d50: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4d60: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
4d70: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20  t verbatim...
4d80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4d90: 72 65 74 75 72 6e 20 24 3a 3a 69 6e 74 65 72 6f  return $::intero 4da0: 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69 6c 65 5f p_assembly_file_ 4db0: 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 names.. } e 4dc0: 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 lseif {[isWindow 4dd0: 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 s]} then {.. 4de0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4df0: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 4e00: 2c 20 6f 6e 20 57 69 6e 64 6f 77 73 2c 20 61 6c , on Windows, al 4e10: 77 61 79 73 20 75 73 65 20 74 68 65 20 64 65 66 ways use the def 4e20: 61 75 6c 74 20 66 69 6c 65 20 6e 61 6d 65 0d 0a ault file name.. 4e30: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4e40: 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e "SQLite.Interop. 4e50: 64 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 dll"... # 4e60: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 4e70: 20 5b 6c 69 73 74 20 53 51 4c 69 74 65 2e 49 6e [list SQLite.In 4e80: 74 65 72 6f 70 2e 64 6c 6c 5d 0d 0a 20 20 20 20 terop.dll].. 4e90: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 4ea0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4eb0: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 4ec0: 2c 20 72 65 74 75 72 6e 20 62 6f 74 68 20 74 68 , return both th 4ed0: 65 20 67 65 6e 65 72 69 63 20 50 4f 53 49 58 20 e generic POSIX 4ee0: 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64 20 74 68 file name and th 4ef0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 4f00: 20 20 20 4d 61 63 20 4f 53 20 58 20 66 69 6c 65 Mac OS X file 4f10: 20 6e 61 6d 65 2c 20 73 69 6e 63 65 20 77 65 20 name, since we 4f20: 64 6f 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 do not currently 4f30: 20 68 61 76 65 20 61 6e 20 65 61 73 79 0d 0a 20 have an easy.. 4f40: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 4f50: 61 79 20 74 6f 20 64 65 74 65 63 74 20 77 68 69 ay to detect whi 4f60: 63 68 20 6f 66 20 74 68 6f 73 65 20 70 6c 61 74 ch of those plat 4f70: 66 6f 72 6d 73 20 77 65 20 61 72 65 20 72 75 6e forms we are run 4f80: 6e 69 6e 67 20 6f 6e 2e 0d 0a 20 20 20 20 20 20 ning on... 4f90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 4fa0: 75 72 6e 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 urn [list \.. 4fb0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 2e SQLite. 4fc0: 49 6e 74 65 72 6f 70 2e 64 6c 6c 2e 73 6f 20 53 Interop.dll.so S 4fd0: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 73 6f QLite.Interop.so 4fe0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 4ff0: 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 SQLite.Interop.d 5000: 79 6c 69 62 20 53 51 4c 69 74 65 2e 49 6e 74 65 ylib SQLite.Inte 5010: 72 6f 70 2e 64 6c 6c 2e 64 79 6c 69 62 5d 0d 0a rop.dll.dylib].. 5020: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 5030: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 ... proc getC 5040: 6f 72 65 45 78 74 65 6e 73 69 6f 6e 42 69 6e 61 oreExtensionBina 5050: 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 64 65 ryFileName { {de 5060: 66 61 75 6c 74 20 22 22 7d 20 7d 20 7b 0d 0a 20 fault ""} } {.. 5070: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam 5080: 65 20 5b 67 65 74 43 6f 72 65 42 69 6e 61 72 79 e [getCoreBinary 5090: 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 FileName].... 50a0: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 if {[file exi 50b0: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
50c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
50d0: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65  return $fileName 50e0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 50f0: 20 20 20 72 65 74 75 72 6e 20 24 64 65 66 61 75 return$defau
5100: 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  lt..    }.....
5110: 20 20 70 72 6f 63 20 69 73 42 75 69 6c 64 41 76    proc isBuildAv
5120: 61 69 6c 61 62 6c 65 20 7b 20 6e 61 74 69 76 65  ailable { native
5130: 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e   directory {varN
5140: 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  ame ""} } {..
5150: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
5160: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75  TE: Build the fu
5170: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
5180: 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  le name for the
5190: 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79  primary assembly
51a0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
51b0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
51c0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
51d0: 65 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e  e managed compon
51e0: 65 6e 74 73 2e 20 20 49 74 0d 0a 20 20 20 20 20  ents.  It..
51f0: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
5200: 62 65 20 6e 6f 74 65 64 20 74 68 61 74 20 74 68  be noted that th
5210: 69 73 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  is assembly file
5220: 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69   may also contai
5230: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  n the..      #
5240: 20 20 20 20 20 6e 61 74 69 76 65 20 63 6f 6d 70       native comp
5250: 6f 6e 65 6e 74 73 2c 20 69 66 20 61 20 6e 61 74  onents, if a nat
5260: 69 76 65 20 62 75 69 6c 64 20 69 73 20 69 6e 20  ive build is in
5270: 75 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  use...      #..
5280: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
5290: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
52a0: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d 52b0: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 52c0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 52d0: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a a.SQLite.dll]].. 52e0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 .. if {![fi 52f0: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
5300: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
5310: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
5320: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  se..      }....
5330: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
5340: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
5350: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
5360: 65 74 65 63 74 20 69 66 20 74 68 65 20 70 72 69  etect if the pri
5370: 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20  mary assembly..
5380: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
5390: 74 61 69 6e 73 20 61 6e 79 20 6e 61 74 69 76 65  tains any native
53a0: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20   components, if
53b0: 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20  necessary...
53c0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
53d0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e  string length $n 53e0: 61 74 69 76 65 5d 20 3d 3d 20 30 7d 20 74 68 65 ative] == 0} the 53f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 5400: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 5410: 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74$varName] > 0} t
5420: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
5430: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 5440: 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 e$varName..
5450: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
5460: 20 73 65 74 20 6e 61 74 69 76 65 20 5b 69 73 4d   set native [isM
5470: 69 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79  ixedModeAssembly
5480: 20 24 66 69 6c 65 4e 61 6d 65 20 24 76 61 72 4e   $fileName$varN
5490: 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  ame]..      }...
54a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
54b0: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 70  # NOTE: If the p
54c0: 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 20  rimary assembly
54d0: 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68  also contains th
54e0: 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65  e native compone
54f0: 6e 74 73 2c 0d 0a 20 20 20 20 20 20 23 20 20 20  nts,..      #
5500: 20 20 20 20 77 65 20 68 61 76 65 20 65 76 65 72      we have ever
5510: 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d  ything we need..
5520: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
5530: 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65  if {$native} the 5540: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret 5550: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. 5560: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 5570: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61 74 # NOTE: What 5580: 20 69 73 20 74 68 65 20 61 72 63 68 69 74 65 63 is the architec 5590: 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 6d 61 ture for this ma 55a0: 63 68 69 6e 65 3f 0d 0a 20 20 20 20 20 20 23 0d chine?.. #. 55b0: 0a 20 20 20 20 20 20 73 65 74 20 61 72 63 68 69 . set archi 55c0: 74 65 63 74 75 72 65 20 5b 6d 61 63 68 69 6e 65 tecture [machine 55d0: 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 ToPlatform$::tc
55e0: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69  l_platform(machi
55f0: 6e 65 29 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20  ne) true]....
5600: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
5610: 54 45 3a 20 57 68 61 74 20 69 73 20 74 68 65 20  TE: What is the
5620: 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 74 68 69  platform for thi
5630: 73 20 6d 61 63 68 69 6e 65 3f 0d 0a 20 20 20 20  s machine?..
5640: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 70    #..      set p
5650: 6c 61 74 66 6f 72 6d 20 5b 6d 61 63 68 69 6e 65  latform [machine
5660: 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63  ToPlatform $::tc 5670: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 l_platform(machi 5680: 6e 65 29 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d ne)].... #. 5690: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 . # NOTE: B 56a0: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 uild the fully q 56b0: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 ualified file na 56c0: 6d 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 me for the inter 56d0: 6f 70 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 op assembly.. 56e0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 # conta 56f0: 69 6e 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d ining the System 5700: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 .Data.SQLite nat 5710: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 ive components. 5720: 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 If this.. 5730: 23 20 20 20 20 20 20 20 66 69 6c 65 20 65 78 69 # file exi 5740: 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 sts, we should h 5750: 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 ave everything w 5760: 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 e need... # 5770: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 .. foreach 5780: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 fileNameOnly [ge 5790: 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79 tInteropAssembly 57a0: 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b FileNamesOnly] { 57b0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 .. set fi 57c0: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 leName [file nat 57d0: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 57e0: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d in$directory \.
57f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72  .            $ar 5800: 63 68 69 74 65 63 74 75 72 65 20 24 66 69 6c 65 chitecture$file
5810: 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20  NameOnly]]....
5820: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
5830: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 5840: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 5850: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 5860: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 5870: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e set fileN 5880: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ame [file native 5890: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 58a0: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20$directory \..
58b0: 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66            $platf 58c0: 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c orm$fileNameOnl
58d0: 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  y]]....        i
58e0: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
58f0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 5900: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 {.. re 5910: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 5920: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 5930: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi 5940: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 5950: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 ile join$direct
5960: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
5970: 20 20 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79     $fileNameOnly 5980: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 ]].... if 5990: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
59a0: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
59b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  {..          ret
59c0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
59d0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
59e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
59f0: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
5a00: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
5a10: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74   file name for t
5a20: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a  he SQLite core..
5a30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69        #       li
5a40: 62 72 61 72 79 2e 20 20 49 66 20 74 68 69 73 20  brary.  If this
5a50: 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 20  file exists, we
5a60: 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 72  should have ever
5a70: 79 74 68 69 6e 67 20 77 65 0d 0a 20 20 20 20 20  ything we..
5a80: 20 23 20 20 20 20 20 20 20 6e 65 65 64 2e 0d 0a   #       need...
5a90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66        #..      f
5aa0: 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f  oreach fileNameO
5ab0: 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c 69  nly [getNativeLi
5ac0: 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e  braryFileNamesOn
5ad0: 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  ly] {..        s
5ae0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
5af0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
5b00: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f  le join $directo 5b10: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. 5b20: 20 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20$architecture
5b30: 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d  $fileNameOnly]]. 5b40: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 5b50: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
5b60: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
5b70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5b80: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d   true..        }
5b90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
5ba0: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e  fileName [file n
5bb0: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
5bc0: 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20  join $directory 5bd0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
5be0: 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61  platform $fileNa 5bf0: 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 meOnly]].... 5c00: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 5c10: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
5c20: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
5c30: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
5c40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
5c50: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
5c60: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
5c70: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d 5c80: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 5c90: 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d$fileNam
5ca0: 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eOnly]]....
5cb0: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
5cc0: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 5cd0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 5ce0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. 5cf0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 5d00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 5d10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6e 65 20 # NOTE: One 5d20: 6f 72 20 6d 6f 72 65 20 6e 61 74 69 76 65 20 63 or more native c 5d30: 6f 6d 70 6f 6e 65 6e 74 73 20 6e 65 65 64 65 64 omponents needed 5d40: 20 62 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e by System.Data. 5d50: 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20 SQLite.. # 5d60: 20 20 20 20 20 20 61 72 65 20 6d 69 73 73 69 6e are missin 5d70: 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 g... #.. 5d80: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d return false. 5d90: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 5da0: 72 6f 63 20 69 73 52 65 6c 65 61 73 65 41 76 61 roc isReleaseAva 5db0: 69 6c 61 62 6c 65 20 7b 20 64 69 72 65 63 74 6f ilable { directo 5dc0: 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 ry {varName ""} 5dd0: 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b } {.. if {[ 5de0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
5df0: 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65  arName] > 0} the
5e00: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76  n {..        upv
5e10: 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 24 76  ar 1 $varName$v
5e20: 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d  arName..      }.
5e30: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
5e40: 5b 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c  [isBuildAvailabl
5e50: 65 20 22 22 20 24 64 69 72 65 63 74 6f 72 79 20  e "" $directory 5e60: 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 7d$varName]..    }
5e70: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6a 6f  .....    proc jo
5e80: 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79  inBuildDirectory
5e90: 20 7b 20 6e 61 74 69 76 65 20 70 61 74 68 20 79   { native path y
5ea0: 65 61 72 20 70 6c 61 74 66 6f 72 6d 20 63 6f 6e  ear platform con
5eb0: 66 69 67 75 72 61 74 69 6f 6e 20 7d 20 7b 0d 0a  figuration } {..
5ec0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
5ed0: 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
5ee0: 74 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72  t and then retur
5ef0: 6e 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c  n the fully qual
5f00: 69 66 69 65 64 20 70 61 74 68 20 74 6f 20 74 68  ified path to th
5f10: 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 23  e build..      #
5f20: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
5f30: 20 62 61 73 65 64 20 6f 6e 20 61 6c 6c 20 74 68   based on all th
5f40: 65 20 61 72 67 75 6d 65 6e 74 73 20 70 72 6f 76  e arguments prov
5f50: 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  ided by our call
5f60: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
5f70: 20 20 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d      if {$native} 5f80: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 5f90: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f return [file jo 5fa0: 69 6e 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 in$path bin $ye 5fb0: 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f ar$platform $co 5fc0: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 nfiguration].. 5fd0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 5fe0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 return [fi 5ff0: 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 le join$path bi
6000: 6e 20 24 79 65 61 72 20 24 63 6f 6e 66 69 67 75  n $year$configu
6010: 72 61 74 69 6f 6e 20 62 69 6e 5d 0d 0a 20 20 20  ration bin]..
6020: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
6030: 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c      proc getBuil
6040: 64 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d  dDirectory {} {.
6050: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
6060: 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74  # NOTE: See if t
6070: 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74  he "native" runt
6080: 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 62  ime option has b
6090: 65 65 6e 20 73 65 74 2e 20 20 49 66 20 73 6f 2c  een set.  If so,
60a0: 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20   use the..
60b0: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72  #       director
60c0: 79 20 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d  y for the mixed-
60d0: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 28 61  mode assembly (a
60e0: 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69 76 65  .k.a. the native
60f0: 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20   interop..
6100: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  #       assembly
6110: 29 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68  ).  To enable th
6120: 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68  is option via th
6130: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20  e command line,
6140: 65 6e 74 65 72 20 61 0d 0a 20 20 20 20 20 20 23  enter a..      #
6150: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 73         command s
6160: 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66  imilar to one of
6170: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28   the following (
6180: 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29  all on one line)
6190: 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  :..      #..
61a0: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53    #       EagleS
61b0: 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61  hell.exe -initia
61c0: 6c 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f 70 74  lize -runtimeOpt
61d0: 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20  ion native..
61e0: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
61f0: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
6200: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
6210: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 54 6f        #       To
6220: 20 65 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74   enable this opt
6230: 69 6f 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d  ion via the comm
6240: 61 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72 20 74  and line prior t
6250: 6f 20 74 68 65 20 22 62 65 74 61 20 31 36 22 0d  o the "beta 16".
6260: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72  .      #       r
6270: 65 6c 65 61 73 65 20 6f 66 20 45 61 67 6c 65 2c  elease of Eagle,
6280: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   the following c
6290: 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65 20 75  ommand must be u
62a0: 73 65 64 20 69 6e 73 74 65 61 64 0d 0a 20 20 20  sed instead..
62b0: 20 20 20 23 20 20 20 20 20 20 20 28 61 6c 73 6f     #       (also
62c0: 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65   all on one line
62d0: 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ):..      #..
62e0: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
62f0: 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69  Shell.exe -initi
6300: 61 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69 74 69  alize -postIniti
6310: 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23 20 20  alize..      #
6320: 20 20 20 20 20 20 20 22 6f 62 6a 65 63 74 20 69         "object i
6330: 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65  nvoke Interprete
6340: 72 2e 47 65 74 41 63 74 69 76 65 20 41 64 64 52  r.GetActive AddR
6350: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74  untimeOption nat
6360: 69 76 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ive"..      #
6370: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
6380: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
6390: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
63a0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
63b0: 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f   ::build_directo
63c0: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ry] && \..
63d0: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
63e0: 74 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65  th $::build_dire 63f0: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e ctory] > 0} then 6400: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 6410: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 6420: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 he location of t 6430: 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f he build directo 6440: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 ry has been over 6450: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 ridden;.. 6460: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f # therefo 6470: 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 re, use it verba 6480: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d tim... #. 6490: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 64a0: 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f$::build_directo
64b0: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ry..      } else
64c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
64d0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
64e0: 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72  f the "native" r
64f0: 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  untime option is
6500: 20 73 65 74 2c 20 74 68 65 20 6d 69 78 65 64 2d   set, the mixed-
6510: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20  mode assembly..
6520: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
6530: 73 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 20  s being tested.
6540: 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 74   In that case, t
6550: 68 65 20 70 61 74 68 20 74 6f 20 74 68 65 20 62  he path to the b
6560: 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a  uild directory..
6570: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6580: 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65  will contain the
6590: 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 61   platform name a
65a0: 6e 64 20 61 6c 6c 20 74 68 65 20 62 69 6e 61 72  nd all the binar
65b0: 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 0d 0a  ies under test..
65c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
65d0: 73 68 6f 75 6c 64 20 62 65 20 70 72 65 73 65 6e  should be presen
65e0: 74 20 69 6e 20 74 68 61 74 20 64 69 72 65 63 74  t in that direct
65f0: 6f 72 79 2e 20 20 49 66 20 74 68 65 20 22 6e 61  ory.  If the "na
6600: 74 69 76 65 22 20 72 75 6e 74 69 6d 65 0d 0a 20  tive" runtime..
6610: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f         #       o
6620: 70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 73 65 74  ption is not set
6630: 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65  , the build dire
6640: 63 74 6f 72 79 20 77 69 6c 6c 20 62 65 20 63 6f  ctory will be co
6650: 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65 0d 0a  nsidered to be..
6660: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6670: 22 70 6c 61 74 66 6f 72 6d 2d 6e 65 75 74 72 61  "platform-neutra
6680: 6c 22 2c 20 77 69 74 68 20 74 68 65 20 6e 6f 74  l", with the not
6690: 61 62 6c 65 20 65 78 63 65 70 74 69 6f 6e 20 6f  able exception o
66a0: 66 20 61 6e 79 20 6e 61 74 69 76 65 0d 0a 20 20  f any native..
66b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73        #       as
66c0: 73 65 6d 62 6c 79 20 28 65 2e 67 2e 20 22 53 51  sembly (e.g. "SQ
66d0: 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c  Lite.Interop.dll
66e0: 22 29 20 63 6f 70 69 65 64 20 74 68 65 72 65 20  ") copied there
66f0: 64 75 72 69 6e 67 20 74 68 65 0d 0a 20 20 20 20  during the..
6700: 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c      #       buil
6710: 64 20 70 72 6f 63 65 73 73 20 69 74 73 65 6c 66  d process itself
6720: 2e 20 20 49 66 20 74 68 65 20 62 75 69 6c 64 20  .  If the build
6730: 70 72 6f 63 65 73 73 20 73 6f 6d 65 68 6f 77 20  process somehow
6740: 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20  does not..
6750: 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 20 74    #       copy t
6760: 68 65 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62  he native assemb
6770: 6c 79 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74  ly for this plat
6780: 66 6f 72 6d 2c 20 6d 6f 73 74 20 6f 66 20 74 68  form, most of th
6790: 65 20 74 65 73 74 73 0d 0a 20 20 20 20 20 20 20  e tests..
67a0: 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20   #       in the
67b0: 73 75 69 74 65 20 77 69 6c 6c 20 73 69 6d 70 6c  suite will simpl
67c0: 79 20 62 65 20 73 6b 69 70 70 65 64 2e 20 20 47  y be skipped.  G
67d0: 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e  enerally speakin
67e0: 67 2c 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20  g, there..
67f0: 20 20 23 20 20 20 20 20 20 20 61 72 65 20 74 77    #       are tw
6800: 6f 20 77 61 79 73 20 74 6f 20 62 75 69 6c 64 20  o ways to build
6810: 74 68 65 20 62 69 6e 61 72 69 65 73 20 77 68 65  the binaries whe
6820: 6e 20 70 72 65 70 61 72 69 6e 67 20 74 6f 20 72  n preparing to r
6830: 75 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  un the..
6840: 23 20 20 20 20 20 20 20 74 65 73 74 20 73 75 69  #       test sui
6850: 74 65 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  te:..        #..
6860: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6870: 31 2e 20 42 75 69 6c 64 20 74 68 65 20 73 65 70  1. Build the sep
6880: 61 72 61 74 65 20 6d 61 6e 61 67 65 64 20 61 6e  arate managed an
6890: 64 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c  d native assembl
68a0: 69 65 73 20 75 73 69 6e 67 20 73 6f 6d 65 0d 0a  ies using some..
68b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
68c0: 20 20 20 63 6f 6d 6d 61 6e 64 73 20 73 69 6d 69     commands simi
68d0: 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20  lar to:..
68e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20   #..        #
68f0: 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74         build.bat
6900: 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ${Configuration 6910: 7d 4d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 7b 50 }ManagedOnly${P
6920: 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20  latform}..
6930: 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69    #          bui
6940: 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75  ld.bat ${Configu 6950: 72 61 74 69 6f 6e 7d 4e 61 74 69 76 65 4f 6e 6c ration}NativeOnl 6960: 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 y${Platform}..
6970: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
6980: 20 20 23 20 20 20 20 20 20 20 20 20 20 57 68 65    #          Whe
6990: 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69  re ${Configurati 69a0: 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20 22 44 on} is either "D 69b0: 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 ebug" or "Releas 69c0: 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 e" and.. 69d0: 23 20 20 20 20 20 20 20 20 20 20 24 7b 50 6c 61 #${Pla
69e0: 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68 65 72  tform} is either
69f0: 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78 36 34   "Win32" or "x64
6a00: 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  "...        #..
6a10: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 32         #       2
6a20: 2e 20 42 75 69 6c 64 20 74 68 65 20 6d 69 78 65  . Build the mixe
6a30: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20  d-mode assembly
6a40: 75 73 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 20  using a command
6a50: 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20  similar to:..
6a60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6a70: 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64  #          build
6a80: 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61  .bat ${Configura 6a90: 74 69 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f 72 6d tion}${Platform
6aa0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  }..        #..
6ab0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
6ac0: 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75   Where ${Configu 6ad0: 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 ration} is eithe 6ae0: 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 r "Debug" or "Re 6af0: 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 lease" and.. 6b00: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 24 #$
6b10: 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69  {Platform} is ei
6b20: 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20  ther "Win32" or
6b30: 22 78 36 34 22 2e 20 20 49 66 20 74 68 69 73 20  "x64".  If this
6b40: 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20  command is..
6b50: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 75      #          u
6b60: 73 65 64 2c 20 76 61 72 69 6f 75 73 20 74 65 73  sed, various tes
6b70: 74 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20  ts that require
6b80: 73 75 70 70 6c 65 6d 65 6e 74 61 72 79 20 6d 61  supplementary ma
6b90: 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23  naged..        #
6ba0: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62            assemb
6bb0: 6c 69 65 73 20 28 65 2e 67 2e 20 4c 49 4e 51 29  lies (e.g. LINQ)
6bc0: 20 6d 61 79 20 62 65 20 73 6b 69 70 70 65 64 20   may be skipped
6bd0: 75 6e 6c 65 73 73 20 74 68 6f 73 65 20 62 69 6e  unless those bin
6be0: 61 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20 23  aries..        #
6bf0: 20 20 20 20 20 20 20 20 20 20 61 72 65 20 73 75            are su
6c00: 62 73 65 71 75 65 6e 74 6c 79 20 63 6f 70 69 65  bsequently copie
6c10: 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65  d into the corre
6c20: 63 74 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e  ct directory (i.
6c30: 65 2e 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23  e. by..        #
6c40: 20 20 20 20 20 20 20 20 20 20 22 74 65 73 74 5f            "test_
6c50: 61 6c 6c 2e 62 61 74 22 29 2e 0d 0a 20 20 20 20  all.bat")...
6c60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6c70: 20 20 20 20 20 20 20 4e 6f 74 65 20 74 68 61 74         Note that
6c80: 20 61 6c 6c 20 6f 66 20 74 68 65 20 62 75 69 6c   all of the buil
6c90: 64 20 63 6f 6d 6d 61 6e 64 73 20 61 62 6f 76 65  d commands above
6ca0: 20 77 69 6c 6c 20 64 65 66 61 75 6c 74 20 74 6f   will default to
6cb0: 20 75 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20   using..
6cc0: 23 20 20 20 20 20 20 20 74 68 65 20 6c 61 74 65  #       the late
6cd0: 73 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53  st version of MS
6ce0: 42 75 69 6c 64 20 61 76 61 69 6c 61 62 6c 65 20  Build available
6cf0: 61 6e 64 20 74 68 65 20 22 74 65 73 74 5f 79 65  and the "test_ye
6d00: 61 72 22 20 6d 61 79 0d 0a 20 20 20 20 20 20 20  ar" may..
6d10: 20 23 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f   #       need to
6d20: 20 62 65 20 61 64 6a 75 73 74 65 64 20 61 63 63   be adjusted acc
6d30: 6f 72 64 69 6e 67 6c 79 20 74 6f 20 61 63 74 75  ordingly to actu
6d40: 61 6c 6c 79 20 72 75 6e 20 74 68 65 20 74 65 73  ally run the tes
6d50: 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20  t suite...
6d60: 20 20 23 20 20 20 20 20 20 20 52 65 66 65 72 20    #       Refer
6d70: 74 6f 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20  to the comments
6d80: 69 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72  in [getBuildYear
6d90: 5d 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72  ] for more infor
6da0: 6d 61 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20 20 20  mation on..
6db0: 20 20 20 23 20 20 20 20 20 20 20 68 6f 77 20 74     #       how t
6dc0: 6f 20 73 65 74 20 74 68 69 73 20 76 61 72 69 61  o set this varia
6dd0: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ble...        #.
6de0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74  .        set nat
6df0: 69 76 65 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f  ive [hasRuntimeO
6e00: 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 0d  ption native]...
6e10: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
6e20: 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74  [joinBuildDirect
6e30: 6f 72 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74  ory $native [get 6e40: 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f BuildBaseDirecto 6e50: 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ry] \.. 6e60: 20 20 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 [getBuildYear 6e70: 5d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 ] [getBuildPlatf 6e80: 6f 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65 orm$native] [ge
6e90: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74  tBuildConfigurat
6ea0: 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ion]]..      }..
6eb0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
6ec0: 6f 63 20 67 65 74 52 65 6c 65 61 73 65 56 65 72  oc getReleaseVer
6ed0: 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  sion {} {..
6ee0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
6ef0: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65  : Figure out the
6f00: 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e   release version
6f10: 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 74 68   for use with th
6f20: 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72  e build director
6f30: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
6f40: 20 77 68 65 6e 20 63 68 65 63 6b 69 6e 67 20 66   when checking f
6f50: 6f 72 20 61 76 61 69 6c 61 62 6c 65 20 72 65 6c  or available rel
6f60: 65 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d  eases...      #.
6f70: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
6f80: 20 65 78 69 73 74 73 20 3a 3a 72 65 6c 65 61 73   exists ::releas
6f90: 65 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d  e_version] && \.
6fa0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
6fb0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c  ng length $::rel 6fc0: 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20 ease_version] > 6fd0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 6fe0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 6ff0: 4e 4f 54 45 3a 20 54 68 65 20 72 65 6c 65 61 73 NOTE: The releas 7000: 65 20 76 65 72 73 69 6f 6e 20 68 61 73 20 62 65 e version has be 7010: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 20 74 en overridden; t 7020: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 7030: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 7040: 20 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 verbatim... 7050: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 7060: 72 65 74 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73 return$::releas
7070: 65 5f 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  e_version..
7080: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
7090: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
70a0: 4e 4f 54 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65  NOTE: No release
70b0: 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69   version is avai
70c0: 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e  lable, return an
70d0: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a   empty string...
70e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
70f0: 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20  It is important
7100: 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70  to return an emp
7110: 74 79 20 73 74 72 69 6e 67 20 68 65 72 65 20 62  ty string here b
7120: 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20  ecause the..
7130: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 75      #       resu
7140: 6c 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65  lt of this proce
7150: 64 75 72 65 20 6d 61 79 20 62 65 20 75 73 65 64  dure may be used
7160: 20 77 69 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e   with [file join
7170: 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ]...        #..
7180: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22         return ""
7190: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
71a0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
71b0: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b  tBuildFileName {
71c0: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66   fileName {platf
71d0: 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  orm ""} } {..
71e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
71f0: 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20  TE: Returns the
7200: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e  specified file n
7210: 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 72  ame as if it wer
7220: 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65  e located in the
7230: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7240: 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 2c  build directory,
7250: 20 64 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20   discarding any
7260: 64 69 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d  directory inform
7270: 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20  ation present..
7280: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20       #       in
7290: 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73  the file name as
72a0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
72b0: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...
72c0: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73  #..      set res
72d0: 75 6c 74 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ult [file native
72e0: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  name \..
72f0: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65    [file join [ge
7300: 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 5d  tBuildDirectory]
7310: 20 24 70 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65   $platform [file 7320: 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d tail$fileName]
7330: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ]]....      #..
7340: 20 20 20 20 20 23 20 48 41 43 4b 3a 20 57 68 65       # HACK: Whe
7350: 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57  n running on WoW
7360: 36 34 2c 20 61 73 73 75 6d 65 20 74 68 65 20 74  64, assume the t
7370: 65 73 74 20 65 78 65 63 75 74 61 62 6c 65 73 20  est executables
7380: 61 72 65 20 70 72 65 73 65 6e 74 0d 0a 20 20 20  are present..
7390: 20 20 20 23 20 20 20 20 20 20 20 77 69 74 68 20     #       with
73a0: 74 68 65 20 22 33 32 22 20 73 75 66 66 69 78 20  the "32" suffix
73b0: 6f 6e 20 74 68 65 6d 2e 0d 0a 20 20 20 20 20 20  on them...
73c0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73  #..      if {[is
73d0: 52 75 6e 6e 69 6e 67 57 6f 57 36 34 5d 20 26 26  RunningWoW64] &&
73e0: 20 5b 66 69 6c 65 20 65 78 74 65 6e 73 69 6f 6e   [file extension
73f0: 20 24 72 65 73 75 6c 74 5d 20 65 71 20 22 2e 65   $result] eq ".e 7400: 78 65 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 xe"} then {.. 7410: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result 7420: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c [appendArgs [fil 7430: 65 20 72 6f 6f 74 6e 61 6d 65 20 24 72 65 73 75 e rootname$resu
7440: 6c 74 5d 20 33 32 2e 65 78 65 5d 0d 0a 20 20 20  lt] 32.exe]..
7450: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
7460: 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result.. 7470: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 7480: 20 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 getExternalDire 7490: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 ctory {} {.. 74a0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 74b0: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 74c0: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 e returns the di 74d0: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 rectory where th 74e0: 65 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 e external binar 74f0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 7500: 20 66 69 6c 65 73 20 61 72 65 20 6c 6f 63 61 74 files are locat 7510: 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 7520: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 7530: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 7540: 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 e dirname [file 7550: 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 62 69 dirname [info bi 7560: 6e 61 72 79 5d 5d 5d 5d 0d 0a 20 20 20 20 7d 0d nary]]]].. }. 7570: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 7580: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 20 BinaryDirectory 7590: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 75a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 75b0: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 s procedure retu 75c0: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 rns the director 75d0: 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 y where the test 75e0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 application.. 75f0: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65 # itse 7600: 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45 61 67 lf (i.e. the Eag 7610: 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f 63 le shell) is loc 7620: 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c ated. This will 7630: 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20 20 20 be used as.. 7640: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 # the d 7650: 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74 estination for t 7660: 68 65 20 63 6f 70 69 65 64 20 53 79 73 74 65 6d he copied System 7670: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 .Data.SQLite nat 7680: 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 ive and.. # 7690: 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 managed a 76a0: 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e 20 ssemblies (i.e. 76b0: 62 65 63 61 75 73 65 20 74 68 69 73 20 69 73 20 because this is 76c0: 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77 20 70 one of the few p 76d0: 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23 20 20 laces.. # 76e0: 20 20 20 20 20 77 68 65 72 65 20 74 68 65 20 43 where the C 76f0: 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 LR will actually 7700: 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20 74 find and load t 7710: 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d 0a hem properly)... 7720: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 7730: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 7740: 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f ::binary_directo 7750: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 7760: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 7770: 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 th$::binary_dir
7780: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
7790: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
77a0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
77b0: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
77c0: 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 65 63  the binary direc
77d0: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
77e0: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
77f0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
7800: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72  fore, use it ver
7810: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
7820: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
7830: 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65  n $::binary_dire 7840: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 7850: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 7860: 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 eturn [info bina 7870: 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 ry].. }.. 7880: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 7890: 20 67 65 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 getExternalFile 78a0: 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 Name { fileName 78b0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 78c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu 78d0: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 rns the specifie 78e0: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 d file name as i 78f0: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 f it were locate 7900: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 d in the.. 7910: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 7920: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 y containing the 7930: 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 external binari 7940: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 es... #.. 7950: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 7960: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 7970: 65 20 6a 6f 69 6e 20 5b 67 65 74 45 78 74 65 72 e join [getExter 7980: 6e 61 6c 44 69 72 65 63 74 6f 72 79 5d 20 24 66 nalDirectory]$f
7990: 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d  ileName]]..    }
79a0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
79b0: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
79c0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74  { fileName {plat
79d0: 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20  form ""} } {..
79e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
79f0: 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65  OTE: Returns the
7a00: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20   specified file
7a10: 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65  name as if it we
7a20: 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68  re located in th
7a30: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
7a40: 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72   binary director
7a50: 79 2c 20 64 69 73 63 61 72 64 69 6e 67 20 61 6e  y, discarding an
7a60: 79 20 64 69 72 65 63 74 6f 72 79 20 69 6e 66 6f  y directory info
7a70: 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d  rmation present.
7a80: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
7a90: 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20  n the file name
7aa0: 61 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f  as provided by o
7ab0: 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20  ur caller...
7ac0: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
7ad0: 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  n [file nativena
7ae0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
7af0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
7b00: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20  inaryDirectory]
7b10: 24 70 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20  $platform [file 7b20: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d tail$fileName]]
7b30: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
7b40: 20 70 72 6f 63 20 67 65 74 43 6f 72 65 42 69 6e   proc getCoreBin
7b50: 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 70  aryFileName { {p
7b60: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 73 74 61  latform ""} {sta
7b70: 6e 64 61 72 64 20 22 22 7d 20 7d 20 7b 0d 0a 20  ndard ""} } {..
7b80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
7b90: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68  NOTE: Returns th
7ba0: 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f 72 20  e full path for
7bb0: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
7bc0: 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 63  ing the SQLite c
7bd0: 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ore..      #
7be0: 20 20 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72     native librar
7bf0: 79 20 63 6f 64 65 20 66 6f 72 20 74 68 69 73 20  y code for this
7c00: 70 6c 61 74 66 6f 72 6d 2e 20 20 46 69 72 73 74  platform.  First
7c10: 2c 20 63 68 65 63 6b 20 61 6e 64 20 73 65 65 20  , check and see
7c20: 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  if..      #
7c30: 20 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72    the SQLite cor
7c40: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
7c50: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
7c60: 6e 20 6c 6f 61 64 65 64 2e 20 20 4e 65 78 74 2c  n loaded.  Next,
7c70: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7c80: 66 61 6c 6c 62 61 63 6b 20 74 6f 20 77 68 61 74  fallback to what
7c90: 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 73   the full path s
7ca0: 68 6f 75 6c 64 20 62 65 2c 20 62 61 73 65 64 20  hould be, based
7cb0: 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 0d 0a  on whether the..
7cc0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69        #       mi
7cd0: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c  xed-mode assembl
7ce0: 79 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 20  y is being used
7cf0: 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of
7d00: 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20  the current..
7d10: 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66     #       platf
7d20: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  orm...      #..
7d30: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
7d40: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
7d50: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
7d60: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
7d70: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
7d80: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
7d90: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
7da0: 20 5f 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f   _SQLiteNativeMo
7db0: 64 75 6c 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20  duleFileName..
7dc0: 20 20 20 20 7d 20 66 69 6c 65 4e 61 6d 65 5d 20      } fileName]
7dd0: 3d 3d 20 30 20 26 26 20 5b 73 74 72 69 6e 67 20  == 0 && [string
7de0: 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65  length $fileName 7df0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 7e00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 7e10: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 53 51 # NOTE: The SQ 7e20: 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65 Lite core native 7e30: 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 library has alr 7e40: 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 eady been loaded 7e50: 20 76 69 61 0d 0a 20 20 20 20 20 20 20 20 23 20 via.. # 7e60: 20 20 20 20 20 20 74 68 65 20 6e 61 74 69 76 65 the native 7e70: 20 6c 69 62 72 61 72 79 20 70 72 65 2d 6c 6f 61 library pre-loa 7e80: 64 65 72 2e 20 20 52 65 74 75 72 6e 20 74 68 61 der. Return tha 7e90: 74 20 66 69 6c 65 20 6e 61 6d 65 20 6e 6f 77 2e t file name now. 7ea0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 7eb0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c return$fil
7ec0: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  eName..      }..
7ed0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
7ee0: 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20   # NOTE: If the
7ef0: 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65  "native" runtime
7f00: 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 65 6e   option has been
7f10: 20 73 65 74 2c 20 61 6c 77 61 79 73 20 72 65 74   set, always ret
7f20: 75 72 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23  urn the..      #
7f30: 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65         file name
7f40: 20 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d 6d   for the mixed-m
7f50: 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ode assembly...
7f60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
7f70: 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74   {[hasRuntimeOpt
7f80: 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65  ion native]} the
7f90: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
7fa0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
7fb0: 52 65 74 75 72 6e 20 74 68 65 20 6d 69 78 65 64  Return the mixed
7fc0: 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66  -mode assembly f
7fd0: 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ile name...
7fe0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
7ff0: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76  turn [file nativ
8000: 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  ename \..
8010: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20       [file join
8020: 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74  [getBinaryDirect
8030: 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 53  ory] $platform S 8040: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 8050: 65 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d e.dll]].. } 8060: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 8070: 20 20 20 23 20 4e 4f 54 45 3a 20 41 72 65 20 77 # NOTE: Are w 8080: 65 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 e attempting to 8090: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 automatically de 80a0: 74 65 63 74 20 77 68 65 74 68 65 72 20 6f 72 20 tect whether or 80b0: 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20 20 20 23 not the.. # 80c0: 20 20 20 20 20 20 20 69 6e 74 65 72 6f 70 20 61 interop a 80d0: 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64 20 62 ssembly should b 80e0: 65 20 75 73 65 64 3f 0d 0a 20 20 20 20 20 20 23 e used?.. # 80f0: 0d 0a 20 20 20 20 20 20 73 65 74 20 61 75 74 6f .. set auto 8100: 6d 61 74 69 63 20 5b 65 78 70 72 20 7b 5b 73 74 matic [expr {[st 8110: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 74 61 ring length$sta
8120: 6e 64 61 72 64 5d 20 3d 3d 20 30 7d 5d 0d 0a 0d  ndard] == 0}]...
8130: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
8140: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 69  # NOTE: First, i
8150: 6e 20 65 69 74 68 65 72 20 22 61 75 74 6f 6d 61  n either "automa
8160: 74 69 63 22 20 6f 72 20 22 6e 6f 6e 2d 73 74 61  tic" or "non-sta
8170: 6e 64 61 72 64 22 20 6d 6f 64 65 73 2c 20 61 74  ndard" modes, at
8180: 74 65 6d 70 74 0d 0a 20 20 20 20 20 20 23 20 20  tempt..      #
8190: 20 20 20 20 20 74 6f 20 66 69 6e 64 20 74 68 65       to find the
81a0: 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74   native-only int
81b0: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  erop assembly...
81c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
81d0: 66 20 7b 24 61 75 74 6f 6d 61 74 69 63 20 7c 7c  f {$automatic || 81e0: 20 21 24 73 74 61 6e 64 61 72 64 7d 20 74 68 65 !$standard} the
81f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
8200: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
8210: 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72  Attempt to deter
8220: 6d 69 6e 65 20 74 68 65 20 6e 61 74 69 76 65 2d  mine the native-
8230: 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73  only interop ass
8240: 65 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20  embly file..
8250: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65      #       name
8260: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f   for this platfo
8270: 72 6d 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75  rm and then retu
8280: 72 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  rn it...
8290: 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61  #..        forea
82a0: 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  ch fileNameOnly
82b0: 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d  [getInteropAssem
82c0: 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79  blyFileNamesOnly
82d0: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ] {..          s
82e0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
82f0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a  e nativename \..
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
8310: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e  ile join [getBin
8320: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70  aryDirectory] $p 8330: 6c 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d latform$fileNam
8340: 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eOnly]]....
8350: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
8360: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] 8370: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 8380: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 return$fi
8390: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..
83a0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
83b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
83c0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
83d0: 3a 20 54 68 65 6e 2c 20 69 6e 20 65 69 74 68 65  : Then, in eithe
83e0: 72 20 22 61 75 74 6f 6d 61 74 69 63 22 20 6f 72  r "automatic" or
83f0: 20 22 73 74 61 6e 64 61 72 64 22 20 6d 6f 64 65   "standard" mode
8400: 73 2c 20 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20  s, attempt to..
8410: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6e       #       fin
8420: 64 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 53  d the standard S
8430: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0d 0a  QLite library...
8440: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
8450: 66 20 7b 24 61 75 74 6f 6d 61 74 69 63 20 7c 7c  f {$automatic || 8460: 20 24 73 74 61 6e 64 61 72 64 7d 20 74 68 65 6e$standard} then
8470: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
8480: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
8490: 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d  ttempt to determ
84a0: 69 6e 65 20 74 68 65 20 6e 61 74 69 76 65 2d 6f  ine the native-o
84b0: 6e 6c 79 20 73 74 61 6e 64 61 72 64 20 53 51 4c  nly standard SQL
84c0: 69 74 65 20 6c 69 62 72 61 72 79 0d 0a 20 20 20  ite library..
84d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
84e0: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 69 73 20  e name for this
84f0: 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 74 68 65  platform and the
8500: 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d 0a 20 20  n return it...
8510: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8520: 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
8530: 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65  eOnly [getNative
8540: 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73  LibraryFileNames
8550: 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20  Only] {..
8560: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
8570: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
8580: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
8590: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65    [file join [ge
85a0: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79  tBinaryDirectory
85b0: 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c  ] $platform$fil
85c0: 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20  eNameOnly]]....
85d0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69           if {[fi
85e0: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN 85f0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 8600: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 8610: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
8620: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
8630: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
8640: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
8650: 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 20 6d 61  NOTE: Was the ma
8660: 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 63  naged assembly c
8670: 6f 6d 70 69 6c 65 64 20 65 78 70 65 63 74 69 6e  ompiled expectin
8680: 67 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20 74  g to deal with t
8690: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
86a0: 20 20 73 74 61 6e 64 61 72 64 20 63 6f 72 65 20    standard core
86b0: 6c 69 62 72 61 72 79 3f 0d 0a 20 20 20 20 20 20  library?..
86c0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  #..      if {[ha
86d0: 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  veSQLiteDefineCo
86e0: 6e 73 74 61 6e 74 20 53 51 4c 49 54 45 5f 53 54  nstant SQLITE_ST
86f0: 41 4e 44 41 52 44 5d 20 7c 7c 20 5c 0d 0a 20 20  ANDARD] || \..
8700: 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c          [haveSQL
8710: 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  iteDefineConstan
8720: 74 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52  t SQLITE_STANDAR
8730: 44 5f 4c 49 42 52 41 52 59 5f 4e 41 4d 45 5d 7d  D_LIBRARY_NAME]}
8740: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
8750: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
8760: 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20  TE: Fallback to
8770: 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20 6e 61  returning the na
8780: 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61  tive-only standa
8790: 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  rd SQLite librar
87a0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
87b0: 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72     file name for
87c0: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a   the platform...
87d0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
87e0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 73     set fileNames
87f0: 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c  Only [getNativeL
8800: 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f  ibraryFileNamesO
8810: 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nly]....
8820: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66 69  if {[llength $fi 8830: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d 20 leNamesOnly] == 8840: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 8850: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 8860: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 8870: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 8880: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 8890: 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. 88a0: 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 [getBinar 88b0: 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 yDirectory]$pla
88c0: 74 66 6f 72 6d 20 5b 6c 69 6e 64 65 78 20 24 66  tform [lindex $f 88d0: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d 5d ileNamesOnly 0]] 88e0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 88f0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 8900: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 # NOTE: Fa 8910: 6c 6c 62 61 63 6b 20 74 6f 20 72 65 74 75 72 6e llback to return 8920: 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 2d 6f ing the native-o 8930: 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 nly interop asse 8940: 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 20 mbly file.. 8950: 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 # name 8960: 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d for the platform 8970: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 8980: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 8990: 6d 65 73 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 mesOnly [getInte 89a0: 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e ropAssemblyFileN 89b0: 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 amesOnly].... 89c0: 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt 89d0: 68 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 h$fileNamesOnly
89e0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
89f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8a00: 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   ""..        }..
8a10: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
8a20: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
8a30: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
8a40: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
8a50: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d  BinaryDirectory]
8a60: 20 24 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 6e 64   $platform [lind 8a70: 65 78 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c ex$fileNamesOnl
8a80: 79 20 30 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d  y 0]]]..      }.
8a90: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
8aa0: 72 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72  roc getCommonDir
8ab0: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20  ectory {} {..
8ac0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
8ad0: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
8ae0: 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  re returns the d
8af0: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74  irectory where t
8b00: 68 65 20 74 65 73 74 20 73 63 72 69 70 74 73 0d  he test scripts.
8b10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
8b20: 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64  hould be located
8b30: 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74  .  By default, t
8b40: 68 69 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73  his just returns
8b50: 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20   the Eagle..
8b60: 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79    #       binary
8b70: 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20   directory...
8b80: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
8b90: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63  [info exists ::c
8ba0: 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d  ommon_directory]
8bb0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
8bc0: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
8bd0: 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74  $::common_direct 8be0: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ory] > 0} then { 8bf0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 8c00: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 # NOTE: The 8c10: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 location of the 8c20: 20 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 common director 8c30: 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d y has been set;. 8c40: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 8c50: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 8c60: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a it... #.. 8c70: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
8c80: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
8c90: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ry..      } else
8ca0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
8cb0: 20 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74   ::vendor_direct
8cc0: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
8cd0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
8ce0: 67 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69  gth $::vendor_di 8cf0: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 8d00: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 8d10: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 8d20: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 8d30: 20 74 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 the vendor dire 8d40: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 ctory has been s 8d50: 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 et;.. # 8d60: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 therefore, 8d70: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 use it... 8d80: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 8d90: 72 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 rn$::vendor_dir
8da0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20  ectory..      }
8db0: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
8dc0: 69 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61  ists ::tcl_libra
8dd0: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ry] && \..
8de0: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
8df0: 74 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72  th $::tcl_librar 8e00: 79 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 y] > 0 && \.. 8e10: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 [file isd 8e20: 69 72 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f irectory$::tcl_
8e30: 6c 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b  library]} then {
8e40: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
8e50: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
8e60: 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 20 74   variable with t
8e70: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74  he location of t
8e80: 68 65 20 73 63 72 69 70 74 20 6c 69 62 72 61 72  he script librar
8e90: 79 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20  y is..        #
8ea0: 20 20 20 20 20 20 73 65 74 20 61 6e 64 20 61 70        set and ap
8eb0: 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 72 65  pears to be a re
8ec0: 61 6c 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e  al directory (i.
8ed0: 65 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d  e. not embedded.
8ee0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
8ef0: 20 77 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b   within a file);
8f00: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
8f10: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
8f20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $8f30: 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 ::tcl_library.. 8f40: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 8f50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8f60: 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 # NOTE: Fallba 8f70: 63 6b 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 ck to the direct 8f80: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 ory containing t 8f90: 68 65 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a he executable... 8fa0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8fb0: 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 return [info 8fc0: 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d binary].. } 8fd0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 8fe0: 70 72 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 proc getDatabase 8ff0: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a Directory {} {.. 9000: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 9010: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 NOTE: This proc 9020: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 edure returns th 9030: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 e directory wher 9040: 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62 e the test datab 9050: 61 73 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 ases.. # 9060: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f should be lo 9070: 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 cated. By defau 9080: 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 lt, this just us 9090: 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 es the temporary 90a0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 90b0: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 directory config 90c0: 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 ured for this sy 90d0: 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a stem... #.. 90e0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 90f0: 65 78 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 exists ::databas 9100: 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 e_directory] && 9110: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 9120: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 ring length$::d
9130: 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72  atabase_director
9140: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  y] > 0} then {..
9150: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
9160: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c     # NOTE: The l
9170: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  ocation of the d
9180: 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72  atabase director
9190: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
91a0: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
91b0: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
91c0: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
91d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
91e0: 65 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73  eturn $::databas 91f0: 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 e_directory.. 9200: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in 9210: 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 fo exists ::scra 9220: 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 tch_directory] & 9230: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 9240: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
9250: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f  :scratch_directo
9260: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
9270: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
9280: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
9290: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
92a0: 73 63 72 61 74 63 68 20 64 69 72 65 63 74 6f 72  scratch director
92b0: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
92c0: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
92d0: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
92e0: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
92f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
9300: 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68  eturn $::scratch 9310: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 _directory.. 9320: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 9330: 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 return [getT 9340: 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 emporaryPath].. 9350: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 9360: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 .. proc getTe 9370: 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 mporaryDirectory 9380: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 9390: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 93a0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 is procedure ret 93b0: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f urns the directo 93c0: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 6d ry where the tem 93d0: 70 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 porary files.. 93e0: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 93f0: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 ld be located. 9400: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 By default, this 9410: 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 just uses the t 9420: 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 emporary.. 9430: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 9440: 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 y configured for 9450: 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 this system... 9460: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 9470: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 9480: 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 :temporary_direc 9490: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tory] && \.. 94a0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 94b0: 6e 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 ngth$::temporar
94c0: 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30  y_directory] > 0
94d0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
94e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
94f0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f  OTE: The locatio
9500: 6e 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  n of the tempora
9510: 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  ry directory has
9520: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
9530: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ;..        #
9540: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73     therefore, us
9550: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  e it...        #
9560: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9570: 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69   $::temporary_di 9580: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d rectory.. } 9590: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 elseif {[info e 95a0: 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f xists ::scratch_ 95b0: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 95c0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 95d0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 ng length$::scr
95e0: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20  atch_directory]
95f0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
9600: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
9610: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61  # NOTE: The loca
9620: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61  tion of the scra
9630: 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68 61  tch directory ha
9640: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
9650: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
9660: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
9670: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  se it...
9680: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
9690: 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72  n $::scratch_dir 96a0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } 96b0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 96c0: 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f return [getTempo 96d0: 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 raryPath].. 96e0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 96f0: 20 20 70 72 6f 63 20 67 65 74 45 78 65 63 75 74 proc getExecut 9700: 65 4f 6e 53 65 74 75 70 20 7b 7d 20 7b 0d 0a 20 eOnSetup {} {.. 9710: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 9720: 78 69 73 74 73 20 3a 3a 65 78 65 63 75 74 65 5f xists ::execute_ 9730: 6f 6e 5f 73 65 74 75 70 5d 20 26 26 20 5c 0d 0a on_setup] && \.. 9740: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 9750: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 78 65 63 g length$::exec
9760: 75 74 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e 20  ute_on_setup] >
9770: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
9780: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
9790: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
97a0: 20 63 6f 6e 66 69 67 75 72 65 64 20 53 51 4c 20   configured SQL
97b0: 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 69 6e  to execute durin
97c0: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
97d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
97e0: 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 75 72    setup procedur
97f0: 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 65 72  e (i.e. for ever
9800: 79 20 74 65 73 74 20 64 61 74 61 62 61 73 65 20  y test database
9810: 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20  connection)...
9820: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9830: 20 72 65 74 75 72 6e 20 24 3a 3a 65 78 65 63 75   return $::execu 9840: 74 65 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 20 te_on_setup.. 9850: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 9860: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9870: 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 # NOTE: By defau 9880: 6c 74 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 lt, there is no 9890: 53 51 4c 20 74 6f 20 65 78 65 63 75 74 65 20 64 SQL to execute d 98a0: 75 72 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 uring the connec 98b0: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 tion.. # 98c0: 20 20 20 20 20 20 73 65 74 75 70 20 70 72 6f 63 setup proc 98d0: 65 64 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 edure (i.e. for 98e0: 65 76 65 72 79 20 74 65 73 74 20 64 61 74 61 62 every test datab 98f0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e ase connection). 9900: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 9910: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 9920: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 9930: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 ... proc getT 9940: 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 estOverridesPrea 9950: 6d 62 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 72 mble { {extraVar 9960: 4e 61 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 Names ""} } {.. 9970: 20 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 set varName 9980: 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 s [list].... 9990: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 99a0: 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c E: If available, 99b0: 20 73 74 61 72 74 20 77 69 74 68 20 74 68 65 20 start with the 99c0: 6d 61 73 74 65 72 20 6c 69 73 74 20 6f 66 20 74 master list of t 99d0: 65 73 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 est override.. 99e0: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 # vari 99f0: 61 62 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d ables... #. 9a00: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 9a10: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6f exists ::test_o 9a20: 76 65 72 72 69 64 65 73 5d 20 26 26 20 5c 0d 0a verrides] && \.. 9a30: 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 [lleng 9a40: 74 68 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 th$::test_overr
9a50: 69 64 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ides] > 0} then
9a60: 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20  {..        eval
9a70: 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73  lappend varNames
9a80: 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64   $::test_overrid 9a90: 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 es.. }.... 9aa0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 9ab0: 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 NOTE: If request 9ac0: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 9ad0: 2c 20 61 64 64 20 61 6e 79 20 61 64 64 69 74 69 , add any additi 9ae0: 6f 6e 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 onal variable.. 9af0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d # nam 9b00: 65 73 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d es to copy now.. 9b10: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9b20: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 78 if {[llength$ex
9b30: 74 72 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20 30  traVarNames] > 0
9b40: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
9b50: 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76    eval lappend v
9b60: 61 72 4e 61 6d 65 73 20 24 65 78 74 72 61 56 61  arNames $extraVa 9b70: 72 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 0d rNames.. }. 9b80: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 9b90: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 9ba0: 74 68 65 20 73 63 72 69 70 74 20 66 72 61 67 6d the script fragm 9bb0: 65 6e 74 20 74 6f 20 62 65 20 72 65 74 75 72 6e ent to be return 9bc0: 65 64 20 62 79 20 70 72 6f 63 65 73 73 69 6e 67 ed by processing 9bd0: 20 65 61 63 68 0d 0a 20 20 20 20 20 20 23 20 20 each.. # 9be0: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 variable na 9bf0: 6d 65 20 61 6e 64 20 61 64 64 69 6e 67 20 74 68 me and adding th 9c00: 65 20 6e 65 63 65 63 65 73 73 61 72 79 20 73 63 e nececessary sc 9c10: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 20 66 ript fragments f 9c20: 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 or.. # 9c30: 20 20 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 each one... 9c40: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 9c50: 72 65 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 result "".... 9c60: 20 20 20 66 6f 72 65 61 63 68 20 76 61 72 4e 61 foreach varNa 9c70: 6d 65 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a me$varNames {..
9c80: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
9c90: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
9ca0: 20 74 68 65 20 71 75 61 6c 69 66 69 65 64 20 67   the qualified g
9cb0: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 6e  lobal variable n
9cc0: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ame...        #.
9cd0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 75 6c  .        set ful
9ce0: 6c 56 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64  lVarName [append
9cf0: 41 72 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d 65  Args :: $varName 9d00: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 9d10: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 9d20: 44 6f 65 73 20 74 68 65 20 76 61 72 69 61 62 6c Does the variabl 9d30: 65 20 65 78 69 73 74 20 69 6e 20 74 68 69 73 20 e exist in this 9d40: 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 interpreter cont 9d50: 65 78 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d ext?.. #. 9d60: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e . if {[in 9d70: 66 6f 20 65 78 69 73 74 73 20 24 66 75 6c 6c 56 fo exists$fullV
9d80: 61 72 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  arName]} then {.
9d90: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
9da0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
9db0: 41 70 70 65 6e 64 20 61 20 73 63 72 69 70 74 20  Append a script
9dc0: 66 72 61 67 6d 65 6e 74 20 74 6f 20 74 68 65 20  fragment to the
9dd0: 72 65 73 75 6c 74 20 74 68 61 74 20 77 69 6c 6c  result that will
9de0: 20 63 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20 20   correctly..
9df0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
9e00: 70 79 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65 64  py any contained
9e10: 20 76 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68 65   value to anothe
9e20: 72 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f  r interpreter co
9e30: 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20  ntext...
9e40: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61    #..          a
9e50: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 20  ppend result \n
9e60: 22 73 65 74 20 22 20 24 66 75 6c 6c 56 61 72 4e  "set " $fullVarN 9e70: 61 6d 65 20 22 20 5c 7b 22 20 5b 73 65 74 20 24 ame " \{" [set$
9e80: 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 20 5c 7d 0d  fullVarName] \}.
9e90: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
9ea0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
9eb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
9ec0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74   the result cont
9ed0: 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
9ee0: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
9ef0: 73 2c 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20  s, append a..
9f00: 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69     #       newli
9f10: 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ne...      #..
9f20: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
9f30: 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20  length $result] 9f40: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 9f50: 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 append resu 9f60: 6c 74 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a lt \n.. }.. 9f70: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
9f80: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
9f90: 0d 0a 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 53  ..    proc moveS
9fa0: 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44  ystemDataSQLiteD
9fb0: 6c 6c 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73 74  llConfig { {rest
9fc0: 6f 72 65 20 66 61 6c 73 65 7d 20 7b 76 65 72 62  ore false} {verb
9fd0: 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ose false} } {..
9fe0: 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74        set direct
9ff0: 6f 72 79 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ory [object invo
a000: 6b 65 20 41 70 70 44 6f 6d 61 69 6e 20 43 75 72  ke AppDomain Cur
a010: 72 65 6e 74 44 6f 6d 61 69 6e 2e 42 61 73 65 44  rentDomain.BaseD
a020: 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20  irectory]....
a030: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
a040: 65 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72 79  ength $directory a050: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. a060: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 if {$ver
a070: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bose} then {..
a080: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: a090: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a a0a0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. a0b0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- a0c0: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 skipped moving a0d0: 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \"System.Data.SQ a0e0: 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c Lite.dll.config\ a0f0: 22 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 ", " \.. a100: 20 20 20 20 20 20 22 6e 6f 20 62 61 73 65 20 64 "no base d a110: 69 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 irectory\n"].. a120: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. a130: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } a140: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 .... set fi a150: 6c 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 20 leName(1) [file a160: 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 normalize \.. a170: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 [file joi a180: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 53 79 73 n$directory Sys
a190: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
a1a0: 64 6c 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a  dll.config]]....
a1b0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
a1c0: 6d 65 28 32 29 20 5b 61 70 70 65 6e 64 41 72 67  me(2) [appendArg
a1d0: 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 2e  s $fileName(1) . a1e0: 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 20 20 moved].... a1f0: 69 66 20 7b 24 72 65 73 74 6f 72 65 7d 20 74 68 if {$restore} th
a200: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
a210: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $a220: 66 69 6c 65 4e 61 6d 65 28 32 29 5d 7d 20 74 68 fileName(2)]} th a230: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. a240: 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c file rename$fil
a250: 65 4e 61 6d 65 28 32 29 20 24 66 69 6c 65 4e 61  eName(2) $fileNa a260: 6d 65 28 31 29 0d 0a 0d 0a 20 20 20 20 20 20 20 me(1).... a270: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
a280: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a290: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a2a0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a2b0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a2c0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- a2d0: 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e moved \""$fileN
a2e0: 61 6d 65 28 32 29 20 22 5c 22 20 74 6f 20 5c 22  ame(2) "\" to \"
a2f0: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
a300: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 31       $fileName(1 a310: 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ) \"\n].. a320: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } a330: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. a340: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
a350: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a360: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a370: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a380: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a390: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s a3a0: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 kipped moving \" a3b0: 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c "$fileName(2) \
a3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a3d0: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
a3e0: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
a3f0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
a400: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
a410: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  se {..        if
a420: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $a430: 66 69 6c 65 4e 61 6d 65 28 31 29 5d 7d 20 74 68 fileName(1)]} th a440: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. a450: 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c file rename$fil
a460: 65 4e 61 6d 65 28 31 29 20 24 66 69 6c 65 4e 61  eName(1) $fileNa a470: 6d 65 28 32 29 0d 0a 0d 0a 20 20 20 20 20 20 20 me(2).... a480: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
a490: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a4a0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a4b0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a4c0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a4d0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- a4e0: 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e moved \""$fileN
a4f0: 61 6d 65 28 31 29 20 22 5c 22 20 74 6f 20 5c 22  ame(1) "\" to \"
a500: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
a510: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 32       $fileName(2 a520: 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ) \"\n].. a530: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } a540: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. a550: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
a560: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a570: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a580: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a590: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a5a0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s a5b0: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 kipped moving \" a5c0: 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c "$fileName(1) \
a5d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a5e0: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
a5f0: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
a600: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
a610: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }..
a620: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
a630: 63 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50 72  c getAppDomainPr
a640: 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69 78  eamble { {prefix
a650: 20 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22 7d   ""} {suffix ""}
a660: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
a670: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
a680: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75  s procedure retu
a690: 72 6e 73 20 61 20 74 65 73 74 20 73 65 74 75 70  rns a test setup
a6a0: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
a6b0: 20 73 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a 20   suitable for..
a6c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76 61       #       eva
a6d0: 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e 20 69 6e  luation by an in
a6e0: 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74 65  terpreter create
a6f0: 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65 64  d in an isolated
a700: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20   application..
a710: 20 20 20 20 23 20 20 20 20 20 20 20 64 6f 6d 61      #       doma
a720: 69 6e 2e 20 20 54 68 65 20 73 63 72 69 70 74 20  in.  The script
a730: 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72  fragment being r
a740: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20  eturned will be
a750: 73 75 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a 20  surrounded by..
a760: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
a770: 20 70 72 65 66 69 78 20 61 6e 64 20 73 75 66 66   prefix and suff
a780: 69 78 20 22 73 63 72 69 70 74 20 66 72 61 67 6d  ix "script fragm
a790: 65 6e 74 73 22 20 73 70 65 63 69 66 69 65 64 20  ents" specified
a7a0: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d 0a  by our caller,..
a7b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 66        #       if
a7c0: 20 61 6e 79 2e 20 20 54 68 65 20 65 6e 74 69 72   any.  The entir
a7d0: 65 20 73 63 72 69 70 74 20 62 65 69 6e 67 20 72  e script being r
a7e0: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20  eturned will be
a7f0: 73 75 62 73 74 69 74 75 74 65 64 20 76 69 61 0d  substituted via.
a800: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b  .      #       [
a810: 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 65 20 63  subst], in the c
a820: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61  ontext of our ca
a830: 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 62 65 69  ller, before bei
a840: 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20  ng returned...
a850: 20 20 20 20 23 20 20 20 20 20 20 20 54 68 69 73      #       This
a860: 20 73 74 65 70 20 69 73 20 6e 65 63 65 73 73 61   step is necessa
a870: 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 20  ry so that some
a880: 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78 74 20  limited context
a890: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20  information,..
a8a0: 20 20 20 20 23 20 20 20 20 20 20 20 70 72 69 6d      #       prim
a8b0: 61 72 69 6c 79 20 72 65 6c 61 74 65 64 20 74 6f  arily related to
a8c0: 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72   the testing dir
a8d0: 65 63 74 6f 72 69 65 73 2c 20 63 61 6e 20 62 65  ectories, can be
a8e0: 20 74 72 61 6e 73 66 65 72 72 65 64 0d 0a 20 20   transferred..
a8f0: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 74      #       to t
a900: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 69  he interpreter i
a910: 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 61  n the isolated a
a920: 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69  pplication domai
a930: 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20 20  n, making it..
a940: 20 20 20 20 23 20 20 20 20 20 20 20 61 62 6c 65      #       able
a950: 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c 79   to successfully
a960: 20 72 75 6e 20 74 65 73 74 73 20 74 68 61 74 20   run tests that
a970: 72 65 71 75 69 72 65 20 6f 6e 65 20 6f 72 20 6d  require one or m
a980: 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ore of the..
a990: 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20    #       files
a9a0: 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 65  in one of the te
a9b0: 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65  sting directorie
a9c0: 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 68 6f 75  s.  Callers shou
a9d0: 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20 20  ld keep in..
a9e0: 20 20 23 20 20 20 20 20 20 20 6d 69 6e 64 20 74    #       mind t
a9f0: 68 61 74 20 74 68 65 20 74 65 73 74 20 73 63 72  hat the test scr
aa00: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69  ipt fragment bei
aa10: 6e 67 20 72 65 74 75 72 6e 65 64 20 63 61 6e 6e  ng returned cann
aa20: 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20 20  ot rely on..
aa30: 20 20 23 20 20 20 20 20 20 20 61 6e 79 20 73 63    #       any sc
aa40: 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f  ript library pro
aa50: 63 65 64 75 72 65 73 20 74 68 61 74 20 61 72 65  cedures that are
aa60: 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62 79   not provided by
aa70: 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20   the Eagle..
aa80: 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72    #       librar
aa90: 79 20 70 61 63 6b 61 67 65 20 28 69 2e 65 2e 20  y package (i.e.
aaa0: 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20 69  "init.eagle"), i
aab0: 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 65 20 70  ncluding those p
aac0: 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 20 20 20  rovided by..
aad0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 45 61    #       the Ea
aae0: 67 6c 65 20 74 65 73 74 20 70 61 63 6b 61 67 65  gle test package
aaf0: 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 66 69 6c  , unless the fil
ab00: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
ab10: 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20  m is loaded..
ab20: 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61     #       manua
ab30: 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f 74 68  lly via some oth
ab40: 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 28 65 2e  er mechanism (e.
ab50: 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 20  g. by including
ab60: 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 20  appropriate..
ab70: 20 20 20 23 20 20 20 20 20 20 20 5b 70 61 63 6b     #       [pack
ab80: 61 67 65 20 72 65 71 75 69 72 65 5d 20 6f 72 20  age require] or
ab90: 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e 64  [source] command
aba0: 73 20 69 6e 20 74 68 65 20 70 72 65 66 69 78 20  s in the prefix
abb0: 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 20 20 20  or suffix..
abc0: 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20   #       script
abd0: 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c 73  fragments).  Als
abe0: 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 20  o, all variable
abf0: 72 65 66 65 72 65 6e 63 65 73 20 61 6e 64 20 61  references and a
ac00: 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20 20 20  ll nested..
ac10: 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64   #       command
ac20: 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69 6e  s (i.e. those in
ac30: 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73   square brackets
ac40: 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  ) contained in t
ac50: 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20 20  he final..
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 20 77 69 6c 6c 20 65 6e 64  ragment will end
ac80: 20 75 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61   up being evalua
ac90: 74 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  ted in the conte
aca0: 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  xt of the..
acb0: 20 23 20 20 20 20 20 20 20 63 61 6c 6c 69 6e 67   #       calling
acc0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 6e 64   interpreter and
acd0: 20 6e 6f 74 20 74 68 65 20 74 61 72 67 65 74 20   not the target
ace0: 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61  interpreter crea
acf0: 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ted in the..
ad00: 20 20 23 20 20 20 20 20 20 20 69 73 6f 6c 61 74    #       isolat
ad10: 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  ed application d
ad20: 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74 68 65  omain unless the
ad30: 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61 6e   dollar signs an
ad40: 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20 20 20  d/or square..
ad50: 20 20 20 23 20 20 20 20 20 20 20 62 72 61 63 6b     #       brack
ad60: 65 74 73 20 61 72 65 20 73 70 65 63 69 61 6c 6c  ets are speciall
ad70: 79 20 71 75 6f 74 65 64 20 77 69 74 68 20 62 61  y quoted with ba
ad80: 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20 20  ckslashes...
ad90: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
ada0: 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69  n [uplevel 1 [li
adb0: 73 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e 64  st subst [append
adc0: 41 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d 0a  Args $prefix {.. add0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. ade0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 5c # NOTE: The \ adf0: 5b 6f 62 6a 65 63 74 5c 5d 20 63 6f 6d 6d 61 6e [object\] comman ae00: 64 20 6d 61 79 20 62 65 20 6d 69 73 73 69 6e 67 d may be missing ae10: 20 69 6e 20 73 6f 6d 65 20 45 61 67 6c 65 20 63 in some Eagle c ae20: 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ore.. # ae30: 20 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f 6e library con ae40: 66 69 67 75 72 61 74 69 6f 6e 73 2e 20 20 43 6c figurations. Cl ae50: 6f 6e 69 6e 67 20 61 6e 64 20 75 73 69 6e 67 20 oning and using ae60: 74 68 65 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 the procedure.. ae70: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5c # \ ae80: 5b 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e [changeNativeRun ae90: 74 69 6d 65 4f 70 74 69 6f 6e 5c 5d 20 6d 61 79 timeOption\] may aea0: 20 68 65 6c 70 20 74 6f 20 6d 69 74 69 67 61 74 help to mitigat aeb0: 65 20 74 68 69 73 2e 0d 0a 20 20 20 20 20 20 20 e this... aec0: 20 23 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 63 #.. proc aed0: 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e changeNativeRun aee0: 74 69 6d 65 4f 70 74 69 6f 6e 20 5c 0d 0a 20 20 timeOption \.. aef0: 20 20 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f {[info af00: 20 61 72 67 73 20 63 68 61 6e 67 65 4e 61 74 69 args changeNati af10: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d veRuntimeOption] af20: 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } \.. af30: 20 7b 5b 69 6e 66 6f 20 62 6f 64 79 20 63 68 61 {[info body cha af40: 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 ngeNativeRuntime af50: 4f 70 74 69 6f 6e 5d 7d 0d 0a 0d 0a 20 20 20 20 Option]}.... af60: 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. af70: 20 20 20 20 20 20 20 63 68 61 6e 67 65 4e 61 74 changeNat af80: 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e iveRuntimeOption af90: 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 [hasRuntimeOpti afa0: 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 20 20 20 20 on native].. afb0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b }.. } [ afc0: 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 getTestOverrides afd0: 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 Preamble [list p afe0: 61 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c ath test_channel aff0: 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 ]]$suffix]]]..
b000: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
b010: 63 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61  c tryCopyExterna
b020: 6c 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20  lFile {..
b030: 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70       fileName {p
b040: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77  latform ""} {new
b050: 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65  FileName ""} {ve
b060: 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b  rbose false} } {
b070: 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72  ..      set sour
b080: 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45  ceFileName [getE
b090: 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20  xternalFileName
b0a0: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20  $fileName].... b0b0: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e b0c0: 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c xists$sourceFil
b0d0: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
b0e0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72          if {$ver b0f0: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 bose} then {.. b100: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
b110: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
b120: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
b130: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
b140: 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67   skipped copying
b150: 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c   external file \
b160: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  "" $sourceFileNa b170: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. b180: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 "\", it does b190: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a not exist\n"].. b1a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. b1b0: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 return.. b1c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { b1d0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
b1e0: 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30  newFileName] > 0
b1f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
b200: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65    set targetFile
b210: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46  Name [getBinaryF
b220: 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65  ileName $newFile b230: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
b240: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
b250: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72  .        set tar
b260: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74  getFileName [get
b270: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $b280: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
b290: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  rm]..      }....
b2a0: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74        set target
b2b0: 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20  Directory [file
b2c0: 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46  dirname $targetF b2d0: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... b2e0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. b2f0: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 if {![fi b300: 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65 le exists$targe
b310: 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65  tDirectory]} the
b320: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66  n {..          f
b330: 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65  ile mkdir $targe b340: 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 tDirectory.. b350: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 }.. f b360: 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 ile copy -force b370: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20$sourceFileName
b380: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d  $targetFileName. b390: 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 . }] == 0} b3a0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. b3b0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
b3c0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
b3d0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
b3e0: 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 65 78   "---- copied ex
b3f0: 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f 6d  ternal file from
b400: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65   \"" $sourceFile b410: 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 Name "\" to \"" b420: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
b430: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c  targetFileName \
b440: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  "\n]..      } el
b450: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
b460: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan b470: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs b480: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " b490: 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 ---- failed to c b4a0: 6f 70 79 20 65 78 74 65 72 6e 61 6c 20 66 69 6c opy external fil b4b0: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 e from \""$sour
b4c0: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20  ceFileName \..
b4d0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f            "\" to
b4e0: 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65   \"" $targetFile b4f0: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 Name \"\n].. b500: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... b510: 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 proc tryCopyB b520: 69 6e 61 72 79 46 69 6c 65 20 7b 0d 0a 20 20 20 inaryFile {.. b530: 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d fileNam b540: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 e {platform ""} b550: 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d {newFileName ""} b560: 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d {verbose false} b570: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set b580: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b sourceFileName [ b590: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam b5a0: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 e$fileName $pla b5b0: 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 tform].... b5c0: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 if {![file exist b5d0: 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d s$sourceFileNam
b5e0: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
b5f0: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65      if {$verbose b600: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. b610: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
b620: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
b630: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
b640: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69         "---- ski
b650: 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e  pped copying bin
b660: 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f  ary file \"" $so b670: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a urceFileName \.. b680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ b690: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 ", it does not e b6a0: 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 xist\n"].. b6b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 }.. ret b6c0: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a urn.. }.... b6d0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin b6e0: 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c g length$newFil
b6f0: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e  eName] > 0} then
b700: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
b710: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b  targetFileName [
b720: 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
b730: 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70   $newFileName$p
b740: 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20  latform]..
b750: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
b760: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65    set targetFile
b770: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69  Name [getBuildFi
b780: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName b790: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20$platform]..
b7a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65     }....      se
b7b0: 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72  t targetDirector
b7c0: 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  y [file dirname
b7d0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d  $targetFileName] b7e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c b7f0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. b800: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 if {![file exist b810: 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f s$targetDirecto
b820: 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ry]} then {..
b830: 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69         file mkdi
b840: 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f  r $targetDirecto b850: 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 ry.. }.. b860: 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 file copy b870: 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 -force$sourceF
b880: 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46  ileName $targetF b890: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d ileName.. } b8a0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. b8b0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
b8c0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
b8d0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
b8e0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
b8f0: 6f 70 69 65 64 20 62 69 6e 61 72 79 20 66 69 6c  opied binary fil
b900: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72  e from \"" $sour b910: 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 ceFileName "\" t b920: 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 o \"" \.. b930: 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c 65$targetFile
b940: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  Name \"\n]..
b950: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
b960: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes b970: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen b980: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. b990: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 "---- faile b9a0: 64 20 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 79 d to copy binary b9b0: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 file from \""$
b9c0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c  sourceFileName \
b9d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c  ..            "\
b9e0: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74  " to \"" $target b9f0: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a FileName \"\n].. ba00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. ba10: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 ... proc tryC ba20: 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d 0a opyBuildFile {.. ba30: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 file ba40: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 Name {platform " ba50: 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 "} {newFileName ba60: 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c ""} {verbose fal ba70: 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 se} } {.. s ba80: 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d et sourceFileNam ba90: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e e [getBuildFileN baa0: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ame$fileName $p bab0: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 latform].... bac0: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi bad0: 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e sts$sourceFileN
bae0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
baf0: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo bb00: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. bb10: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
bb20: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
bb30: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
bb40: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
bb50: 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62  kipped copying b
bb60: 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 73  uild file \"" $s bb70: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d ourceFileName \. bb80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " bb90: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 \", it does not bba0: 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 exist\n"].. bbb0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 }.. re bbc0: 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d turn.. }... bbd0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri bbe0: 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 ng length$newFi
bbf0: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65  leName] > 0} the
bc00: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  n {..        set
bc10: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20   targetFileName
bc20: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
bc30: 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20  me $newFileName bc40: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20$platform]..
bc50: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
bc60: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69      set targetFi
bc70: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72  leName [getBinar
bc80: 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  yFileName $fileN bc90: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
bca0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
bcb0: 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63   set targetDirec
bcc0: 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61  tory [file dirna
bcd0: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  me $targetFileNa bce0: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 me].... if bcf0: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. bd00: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex bd10: 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65 ists$targetDire
bd20: 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ctory]} then {..
bd30: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d            file m
bd40: 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72 65  kdir $targetDire bd50: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d ctory.. } bd60: 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 .. file c bd70: 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 opy -force$sour
bd80: 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67  ceFileName $targ bd90: 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 etFileName.. bda0: 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 }] == 0} then bdb0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs bdc0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
bdd0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
bde0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
bdf0: 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66  - copied build f
be00: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f  ile from \"" $so be10: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 urceFileName "\" be20: 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 to \"" \.. be30: 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69$targetFi
be40: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20  leName \"\n]..
be50: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
be60: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t be70: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app be80: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. be90: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 "---- fai bea0: 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c led to copy buil beb0: 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 d file from \"" bec0: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20$sourceFileName
bed0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
bee0: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65  \" to \"" $targe bef0: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d tFileName \"\n]. bf00: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. bf10: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 .... proc try bf20: 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 DeleteBinaryFile bf30: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 { fileName {pla bf40: 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f tform ""} {verbo bf50: 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 se false} } {.. bf60: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam bf70: 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 e [getBinaryFile bf80: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 Name$fileName $bf90: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 platform].... bfa0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex bfb0: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
bfc0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
bfd0: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74   if {$verbose} t bfe0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. bff0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
c000: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
c010: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
c020: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
c030: 64 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72  d deleting binar
c040: 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  y file \"" $file c050: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. c060: 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f "\", it do c070: 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d es not exist\n"] c080: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. c090: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 return.. c0a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if c0b0: 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 {[catch {file d c0c0: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d elete$fileName}
c0d0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
c0e0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: c0f0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a c100: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. c110: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 "---- d c120: 65 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66 69 eleted binary fi c130: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
c140: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20   \"\n]..      }
c150: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
c160: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch c170: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg c180: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. c190: 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f "---- failed to c1a0: 20 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 66 delete binary f c1b0: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
c1c0: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  e \"\n]..      }
c1d0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
c1e0: 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 75  proc tryDeleteBu
c1f0: 69 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61  ildFile { fileNa
c200: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
c210: 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d   {verbose false}
c220: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
c230: 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69  fileName [getBui
c240: 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ldFileName $file c250: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
c260: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66  ...      if {![f
c270: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file c280: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. c290: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 if {$verb
c2a0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ose} then {..
c2b0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: c2c0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap c2d0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. c2e0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- c2f0: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting c300: 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 build file \"" c310: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
c320: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
c330: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
c340: 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d  t\n"]..        }
c350: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
c360: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
c370: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66     if {[catch {f
c380: 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65  ile delete $file c390: 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 Name}] == 0} the c3a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu c3b0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
c3c0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
c3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
c3e0: 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69 6c  --- deleted buil
c3f0: 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  d file \"" $file c400: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 Name \"\n].. c410: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. c420: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
c430: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
c440: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
c450: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65       "---- faile
c460: 64 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69 6c  d to delete buil
c470: 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  d file \"" $file c480: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 Name \"\n].. c490: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... c4a0: 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 41 proc tryCopyA c4b0: 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 ssembly {.. c4c0: 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 fileName c4d0: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 {platform ""} {p c4e0: 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 db true} {verbos c4f0: 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 e false} } {.. c500: 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64 tryCopyBuild c510: 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 File$fileName $c520: 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72 platform ""$ver
c530: 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66  bose....      if
c540: 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a   {$pdb} then {.. c550: 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 tryCopyB c560: 75 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64 uildFile [append c570: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. c580: 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 [file rootna c590: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 me$fileName] .p
c5a0: 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 22 22  db] $platform "" c5b0: 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20$verbose..
c5c0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
c5d0: 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65    proc tryDelete
c5e0: 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20  Assembly {..
c5f0: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
c600: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b   {platform ""} {
c610: 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f  pdb true} {verbo
c620: 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  se false} } {..
c630: 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69       tryDeleteBi
c640: 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61  naryFile $fileNa c650: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 65 me$platform $ve c660: 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 rbose.... i c670: 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d f {$pdb} then {.
c680: 0a 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65  .        tryDele
c690: 74 65 42 69 6e 61 72 79 46 69 6c 65 20 5b 61 70  teBinaryFile [ap
c6a0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
c6b0: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 72 6f          [file ro
c6c0: 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  otname $fileName c6d0: 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74 66 6f 72 ] .pdb]$platfor
c6e0: 6d 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  m $verbose.. c6f0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... c700: 20 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 41 proc tryLoadA c710: 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 ssembly { fileNa c720: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d me {platform ""} c730: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set c740: 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e fileName [getBin c750: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c aryFileName$fil
c760: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d  eName $platform] c770: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c c780: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. c790: 73 65 74 20 61 73 73 65 6d 62 6c 79 20 5b 6f 62 set assembly [ob c7a0: 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 ject load -loadt c7b0: 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 ype File -alias c7c0: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
c7d0: 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20    }] == 0} then
c7e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
c7f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f        # NOTE: No
c800: 77 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73  w, add the neces
c810: 73 61 72 79 20 74 65 73 74 20 63 6f 6e 73 74 72  sary test constr
c820: 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  aint...        #
c830: 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
c840: 73 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 72 6f  straint [file ro
c850: 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69  otname [file tai
c860: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d  l $fileName]]... c870: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. c880: 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 # NOTE: Grab c890: 20 74 68 65 20 69 6d 61 67 65 20 72 75 6e 74 69 the image runti c8a0: 6d 65 20 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 me version from c8b0: 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 65 63 the assembly bec c8c0: 61 75 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 ause.. # c8d0: 20 20 20 20 20 20 73 65 76 65 72 61 6c 20 74 65 several te c8e0: 73 74 73 20 72 65 6c 79 20 6f 6e 20 69 74 20 68 sts rely on it h c8f0: 61 76 69 6e 67 20 61 20 63 65 72 74 61 69 6e 20 aving a certain c900: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 value... c910: 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f #.. addCo c920: 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append c930: 41 72 67 73 20 5b 66 69 6c 65 20 74 61 69 6c 20 Args [file tail c940: 24 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a$fileName] _ \..
c950: 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 61 73              [$as c960: 73 65 6d 62 6c 79 20 49 6d 61 67 65 52 75 6e 74 sembly ImageRunt c970: 69 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a imeVersion]].... c980: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. c990: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 # NOTE: Retur c9a0: 6e 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 n the full path c9b0: 6f 66 20 74 68 65 20 6c 6f 61 64 65 64 20 66 69 of the loaded fi c9c0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. c9d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
c9e0: 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..
c9f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
ca00: 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  n ""..    }.....
ca10: 20 20 20 20 70 72 6f 63 20 69 73 53 51 4c 69 74      proc isSQLit
ca20: 65 52 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 20 20  eReady {} {..
ca30: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
ca40: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
ca50: 72 65 20 6d 75 73 74 20 72 65 74 75 72 6e 20 6e  re must return n
ca60: 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 20  on-zero only if
ca70: 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76  the SQLite nativ
ca80: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
ca90: 20 6c 69 62 72 61 72 79 20 61 6e 64 20 74 68 65   library and the
caa0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
cab0: 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65  ite managed asse
cac0: 6d 62 6c 79 20 61 72 65 20 6c 6f 61 64 65 64 0d  mbly are loaded.
cad0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
cae0: 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65  nd ready for use
caf0: 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69   by the test sui
cb00: 74 65 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c 20  te.  Currently,
cb10: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 0d 0a  this procedure..
cb20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68        #       sh
cb30: 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 6f  ould be called o
cb40: 6e 6c 79 20 61 66 74 65 72 20 74 68 65 20 5b 74  nly after the [t
cb50: 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 5d 20  ryLoadAssembly]
cb60: 70 72 6f 63 65 64 75 72 65 20 68 61 73 0d 0a 20  procedure has..
cb70: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 65       #       bee
cb80: 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62  n called to prob
cb90: 65 20 66 6f 72 20 74 68 65 20 53 79 73 74 65 6d  e for the System
cba0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e  .Data.SQLite man
cbb0: 61 67 65 64 20 61 73 73 65 6d 62 6c 79 0d 0a 20  aged assembly..
cbc0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64       #       and
cbd0: 20 74 68 65 20 5b 63 68 65 63 6b 46 6f 72 53 51   the [checkForSQ
cbe0: 4c 69 74 65 5d 20 70 72 6f 63 65 64 75 72 65 20  Lite] procedure
cbf0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20  has been called
cc00: 74 6f 20 70 72 6f 62 65 20 66 6f 72 0d 0a 20 20  to probe for..
cc10: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
cc20: 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69  SQLite native li
cc30: 62 72 61 72 79 3b 20 6f 74 68 65 72 77 69 73 65  brary; otherwise
cc40: 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  , this procedure
cc50: 20 77 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20 20   will simply..
cc60: 20 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 61      #       alwa
cc70: 79 73 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d  ys return zero..
cc80: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
cc90: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a  return [expr {..
cca0: 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e          [haveCon
ccb0: 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44  straint System.D
ccc0: 61 74 61 2e 53 51 4c 69 74 65 5d 20 26 26 20 5b  ata.SQLite] && [
ccd0: 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 53  haveConstraint S
cce0: 51 4c 69 74 65 5d 0d 0a 20 20 20 20 20 20 7d 5d  QLite]..      }]
ccf0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
cd00: 70 72 6f 63 20 6d 61 74 63 68 50 6c 61 74 66 6f  proc matchPlatfo
cd10: 72 6d 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20  rm { platform }
cd20: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
cd30: 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70    # NOTE: An emp
cd40: 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
cd50: 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73  e platform means
cd60: 20 74 68 61 74 20 74 68 65 20 62 75 69 6c 64 20   that the build
cd70: 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20  is not..      #
cd80: 20 20 20 20 20 20 5b 70 72 69 6d 61 72 69 6c 79        [primarily
cd90: 5d 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64  ] a native build
cda0: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20  ; therefore, it
cdb0: 61 6c 77 61 79 73 20 6d 61 74 63 68 65 73 2e 0d  always matches..
cdc0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
cdd0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
cde0: 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d  th $platform] == cdf0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. ce00: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d return true. ce10: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... ce20: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT ce30: 45 3a 20 44 6f 65 73 20 74 68 65 20 73 70 65 63 E: Does the spec ce40: 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d ified platform m ce50: 61 74 63 68 20 75 70 20 74 6f 20 74 68 65 20 63 atch up to the c ce60: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d urrent process?. ce70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. ce80: 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71 if {$platform eq
ce90: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66   [machineToPlatf
cea0: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  orm $::tcl_platf ceb0: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 orm(machine)]} t cec0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r ced0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. cee0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. cef0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th cf00: 65 20 73 70 65 63 69 66 69 65 64 20 70 6c 61 74 e specified plat cf10: 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 form does not ma cf20: 74 63 68 20 75 70 20 77 69 74 68 20 74 68 65 20 tch up with the cf30: 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 platform.. cf40: 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 # for the cf50: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e current process. cf60: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. cf70: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 return false.. cf80: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro cf90: 63 20 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 c haveSQLiteObje cfa0: 63 74 43 6f 6d 6d 61 6e 64 20 7b 7d 20 7b 0d 0a ctCommand {} {.. cfb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # cfc0: 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 5b 6f NOTE: Is the [o cfd0: 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 63 bject] command c cfe0: 75 72 72 65 6e 74 6c 79 20 61 76 61 69 6c 61 62 urrently availab cff0: 6c 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 le?.. #.. d000: 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 return [expr d010: 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f {[llength [info d020: 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 commands object d030: 5d 5d 20 3e 20 30 7d 5d 0d 0a 20 20 20 20 7d 0d ]] > 0}].. }. d040: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 .... proc che d050: 63 6b 46 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 ckForSQLiteObjec d060: 74 43 6f 6d 6d 61 6e 64 20 7b 20 63 68 61 6e 6e tCommand { chann d070: 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 el } {.. tp d080: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d uts$channel "--
d090: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for
d0a0: 5c 22 6f 62 6a 65 63 74 5c 22 20 63 6f 6d 6d 61  \"object\" comma
d0b0: 6e 64 20 75 73 61 67 65 2e 2e 2e 20 22 0d 0a 0d  nd usage... "...
d0c0: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66  .      if {![inf
d0d0: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71  o exists ::no(sq
d0e0: 6c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  liteObjectComman
d0f0: 64 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  d)] && \..
d100: 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 4f      [haveSQLiteO
d110: 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74  bjectCommand]} t
d120: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
d130: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65  puts $channel ye d140: 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 s\n.. } els d150: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. d160: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: d170: 55 6e 6c 65 73 73 20 77 65 20 61 72 65 20 66 6f Unless we are fo d180: 72 62 69 64 64 65 6e 20 66 72 6f 6d 20 64 6f 69 rbidden from doi d190: 6e 67 20 73 6f 2c 20 61 64 64 20 73 6f 6d 65 20 ng so, add some d1a0: 63 6f 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 20 constraints.. d1b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 # tha d1c0: 74 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 6d 6f 73 t will allow mos d1d0: 74 20 6f 66 20 74 68 65 20 74 65 73 74 20 73 75 t of the test su d1e0: 69 74 65 20 74 6f 20 72 75 6e 20 28 69 2e 65 2e ite to run (i.e. d1f0: 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 those.. d200: 23 20 20 20 20 20 20 20 74 65 73 74 73 20 74 68 # tests th d210: 61 74 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74 at do not direct d220: 6c 79 20 72 65 6c 79 20 75 70 6f 6e 20 74 68 65 ly rely upon the d230: 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e [object] comman d240: 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a d)... #.. d250: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in d260: 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 fo exists ::no(s d270: 68 69 6d 53 51 4c 69 74 65 41 73 73 65 6d 62 6c himSQLiteAssembl d280: 79 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 yConstraints)]} d290: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. d2a0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint d2b0: 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 SQLite.. d2c0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint d2d0: 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a 20 SQLiteInterop.. d2e0: 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 addCons d2f0: 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 traint System.Da d300: 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 ta.SQLite.. d310: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai d320: 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 nt System.Data.S d330: 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e QLite.Encryption d340: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 .. addC d350: 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d onstraint System d360: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e .Data.SQLite.Lin d370: 71 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 61 q.... a d380: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 ddConstraint [ap d390: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. d3a0: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System d3b0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll d3c0: 5f 76 20 5b 67 65 74 42 75 69 6c 64 43 6c 72 56 _v [getBuildClrV d3d0: 65 72 73 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 ersion]].. d3e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i d3f0: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists d400: 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 ::no(shimSQLite d410: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 43 6f DefineConstantCo d420: 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 nstraints)]} the d430: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 n {.. f d440: 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43 6f 6e oreach defineCon d450: 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 stant [list \.. d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 INT d470: 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 EROP_EXTENSION_F d480: 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 UNCTIONS INTEROP d490: 5f 46 54 53 35 5f 45 58 54 45 4e 53 49 4f 4e 20 _FTS5_EXTENSION d4a0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. d4b0: 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 INTEROP_JSON1_E d4c0: 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 XTENSION INTEROP d4d0: 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 _PERCENTILE_EXTE d4e0: 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 NSION \.. d4f0: 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 INTEROP_R d500: 45 47 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 EGEXP_EXTENSION d510: 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 INTEROP_TEST_EXT d520: 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 ENSION \.. d530: 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f INTEROP_ d540: 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e TOTYPE_EXTENSION d550: 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c INTEROP_VIRTUAL d560: 5f 54 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20 20 _TABLE \.. d570: 20 20 20 20 20 20 20 20 55 53 45 5f 49 4e 54 45 USE_INTE d580: 52 4f 50 5f 44 4c 4c 5d 20 7b 0d 0a 20 20 20 20 ROP_DLL] {.. d590: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst d5a0: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg d5b0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. d5c0: 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 44 [getSQLiteD d5d0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65 efineConstantPre d5e0: 66 69 78 5d 20 24 64 65 66 69 6e 65 43 6f 6e 73 fix]$defineCons
d5f0: 74 61 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20  tant]..
d600: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
d610: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69  .        if {![i
d620: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
d630: 73 68 69 6d 53 51 4c 69 74 65 56 69 73 75 61 6c  shimSQLiteVisual
d640: 53 74 75 64 69 6f 43 6f 6e 73 74 72 61 69 6e 74  StudioConstraint
d650: 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
d660: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
d670: 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
d680: 20 76 69 73 75 61 6c 53 74 75 64 69 6f 20 5b 67   visualStudio [g
d690: 65 74 42 75 69 6c 64 59 65 61 72 5d 5d 0d 0a 20  etBuildYear]]..
d6a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
d6b0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann d6c0: 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d el no\n.. } d6d0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... d6e0: 70 72 6f 63 20 63 68 61 6e 67 65 4e 61 74 69 76 proc changeNativ d6f0: 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 7b eRuntimeOption { d700: 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20 native } {.. d710: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 if {[llength d720: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 [info commands d d730: 65 62 75 67 5d 5d 20 3e 20 30 20 26 26 20 5c 0d ebug]] > 0 && \. d740: 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e . [llen d750: 67 74 68 20 5b 69 6e 66 6f 20 73 75 62 63 6f 6d gth [info subcom d760: 6d 61 6e 64 73 20 64 65 62 75 67 20 72 75 6e 74 mands debug runt d770: 69 6d 65 6f 70 74 69 6f 6e 5d 5d 20 3e 20 30 20 imeoption]] > 0 d780: 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 && [catch {.. d790: 20 20 20 20 20 64 65 62 75 67 20 72 75 6e 74 69 debug runti d7a0: 6d 65 6f 70 74 69 6f 6e 20 5b 65 78 70 72 20 7b meoption [expr { d7b0: 24 6e 61 74 69 76 65 20 3f 20 22 61 64 64 22 20$native ? "add"
d7c0: 3a 20 22 72 65 6d 6f 76 65 22 7d 5d 20 6e 61 74  : "remove"}] nat
d7d0: 69 76 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d  ive..      }] ==
d7e0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
d7f0: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d      return true.
d800: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
d810: 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74    if {[haveSQLit
d820: 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20  eObjectCommand]
d830: 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  && [catch {..
d840: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
d850: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
d860: 65 74 41 63 74 69 76 65 20 5b 65 78 70 72 20 7b  etActive [expr {
d870: 24 6e 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20  $native ? \.. d880: 20 20 20 20 20 20 20 20 20 22 41 64 64 52 75 6e "AddRun d890: 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22 52 timeOption" : "R d8a0: 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 emoveRuntimeOpti d8b0: 6f 6e 22 7d 5d 20 6e 61 74 69 76 65 0d 0a 20 20 on"}] native.. d8c0: 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 }] == 0} the d8d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret d8e0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. d8f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur d900: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a n false.. }.. d910: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 ... proc chec d920: 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 kForSQLiteBuilds d930: 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 { channel {sele d940: 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 ct false} } {.. d950: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # d960: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 NOTE: Check for d970: 65 76 65 72 79 20 70 6f 73 73 69 62 6c 65 20 76 every possible v d980: 61 6c 69 64 20 63 6f 6d 62 69 6e 61 74 69 6f 6e alid combination d990: 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 of values used d9a0: 77 68 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 when.. # d9b0: 20 20 20 20 6c 6f 63 61 74 69 6e 67 20 6f 75 74 locating out d9c0: 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70 75 the build outpu d9d0: 74 20 64 69 72 65 63 74 6f 72 79 2c 20 73 68 6f t directory, sho d9e0: 77 69 6e 67 20 65 61 63 68 20 61 76 61 69 6c 61 wing each availa d9f0: 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ble.. # da00: 20 20 20 62 75 69 6c 64 20 76 61 72 69 61 74 69 build variati da10: 6f 6e 20 61 6c 6f 6e 67 20 74 68 65 20 77 61 79 on along the way da20: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. da30: 20 20 66 6f 72 65 61 63 68 20 6e 61 74 69 76 65 foreach native da40: 20 5b 6c 69 73 74 20 66 61 6c 73 65 20 74 72 75 [list false tru da50: 65 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f e] {.. fo da60: 72 65 61 63 68 20 79 65 61 72 20 5b 67 65 74 42 reach year [getB da70: 75 69 6c 64 59 65 61 72 73 5d 20 7b 0d 0a 20 20 uildYears] {.. da80: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach da90: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 configuration [g daa0: 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 etBuildConfigura dab0: 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 tions] {.. dac0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. dad0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 # NOTE: Fig dae0: 75 72 65 20 6f 75 74 20 74 68 65 20 65 66 66 65 ure out the effe daf0: 63 74 69 76 65 20 62 75 69 6c 64 20 70 6c 61 74 ctive build plat db00: 66 6f 72 6d 2e 20 20 54 68 69 73 20 69 73 0d 0a form. This is.. db10: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # db20: 20 20 20 20 62 61 73 65 64 20 6f 6e 20 77 68 65 based on whe db30: 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 5b 70 ther or not a [p db40: 72 69 6d 61 72 69 6c 79 5d 20 6e 61 74 69 76 65 rimarily] native db50: 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 build.. db60: 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 62 # is b db70: 65 69 6e 67 20 75 73 65 64 2e 20 20 46 6f 72 20 eing used. For db80: 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e 2d [primarily] non- db90: 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 0d 0a native builds,.. dba0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # dbb0: 20 20 20 20 74 68 69 73 20 77 69 6c 6c 20 62 65 this will be dbc0: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 an empty string dbd0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # dbe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se dbf0: 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 t platform [getB dc00: 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 uildPlatform$na
dc10: 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  tive]....
dc20: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan dc30: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs dc40: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. dc50: 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e "---- checkin dc60: 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 g for System.Dat dc70: 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 5c a.SQLite build \ dc80: 22 22 20 5b 65 78 70 72 20 5c 0d 0a 20 20 20 20 "" [expr \.. dc90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 24 6e 61 {$na
dca0: 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22  tive ? "native/"
dcb0: 20 3a 20 22 22 7d 5d 20 5b 65 78 70 72 20 7b 5b   : ""}] [expr {[
dcc0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5c 0d  string length \.
dcd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
dce0: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20   $platform] > 0 dcf0: 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 ? [appendArgs$p
dd00: 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d  latform /] : ""}
dd10: 5d 20 24 79 65 61 72 20 5c 0d 0a 20 20 20 20 20  ] $year \.. dd20: 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 63 6f /$co
dd30: 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 5c 22 2e  nfiguration "\".
dd40: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .. "]....
dd50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
dd60: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
dd70: 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c  d the fully qual
dd80: 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 20  ified directory
dd90: 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 73  where the necess
dda0: 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ary..
ddb0: 20 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65   #       compone
ddc0: 6e 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44  nts for System.D
ddd0: 61 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c  ata.SQLite shoul
dde0: 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20  d be found...
ddf0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
de00: 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65          set dire
de10: 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 75 69 6c 64  ctory [joinBuild
de20: 44 69 72 65 63 74 6f 72 79 20 24 6e 61 74 69 76  Directory $nativ de30: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. de40: 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 42 61 [getBuildBa de50: 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 79 65 seDirectory]$ye
de60: 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f  ar $platform$co
de70: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d 0a  nfiguration]....
de80: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
de90: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
dea0: 45 3a 20 44 6f 20 74 68 65 20 6e 65 63 65 73 73  E: Do the necess
deb0: 61 72 79 20 66 69 6c 65 73 20 65 78 69 73 74 3f  ary files exist?
dec0: 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 6e 6f 20    Currently, no
ded0: 6f 74 68 65 72 20 73 74 65 70 73 0d 0a 20 20 20  other steps..
dee0: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
def0: 20 61 72 65 20 74 61 6b 65 6e 20 74 6f 20 76 65   are taken to ve
df00: 72 69 66 79 20 74 68 69 73 20 62 75 69 6c 64 20  rify this build
df10: 69 73 20 61 63 74 75 61 6c 6c 79 20 76 69 61 62  is actually viab
df20: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le...
df30: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
df40: 69 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 61 69  if {[isBuildAvai
df50: 6c 61 62 6c 65 20 24 6e 61 74 69 76 65 20 24 64  lable $native$d
df60: 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20  irectory]} then
df70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
df80: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
df90: 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 69    # NOTE: When i
dfa0: 6e 20 22 73 65 6c 65 63 74 22 20 6d 6f 64 65 2c  n "select" mode,
dfb0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73   automatically s
dfc0: 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 0d  elect the first.
dfd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
dfe0: 20 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65         available
dff0: 20 62 75 69 6c 64 20 6f 66 20 53 79 73 74 65 6d   build of System
e000: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61 6e 64  .Data.SQLite and
e010: 20 74 68 65 6e 20 72 65 74 75 72 6e 0d 0a 20 20   then return..
e020: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
e030: 20 20 20 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e      immediately.
e040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
e050: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
e060: 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20   if {$select && e070: 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 [matchPlatform$
e080: 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20  platform]} then
e090: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
e0a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
e0b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61        # NOTE: Ma
e0c0: 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 65 20  nually override
e0d0: 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 20 64 69  all the build di
e0e0: 72 65 63 74 6f 72 79 20 73 65 6c 65 63 74 69 6f  rectory selectio
e0f0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..
e100: 20 20 20 23 20 20 20 20 20 20 20 72 65 6c 61 74     #       relat
e110: 65 64 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  ed test settings
e120: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72   in order to for
e130: 63 65 20 74 68 69 73 20 62 75 69 6c 64 0d 0a 20  ce this build..
e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
e150: 20 20 20 20 20 20 20 6f 66 20 53 79 73 74 65 6d         of System
e160: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 6f 20  .Data.SQLite to
e170: 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20  be used...
e180: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
e1a0: 7b 21 5b 63 68 61 6e 67 65 4e 61 74 69 76 65 52  {![changeNativeR
e1b0: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 6e 61  untimeOption $na e1c0: 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 tive]} then {.. e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e1e0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
e1f0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e210: 20 20 20 20 20 22 6e 6f 2c 20 66 61 69 6c 65 64       "no, failed
e220: 20 74 6f 20 22 20 5b 65 78 70 72 20 7b 24 6e 61   to " [expr {$na e230: 74 69 76 65 20 3f 20 22 61 64 64 22 20 3a 20 22 tive ? "add" : " e240: 72 65 6d 6f 76 65 22 7d 5d 20 5c 0d 0a 20 20 20 remove"}] \.. e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e260: 20 20 20 22 20 74 68 65 20 5c 22 6e 61 74 69 76 " the \"nativ e270: 65 5c 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 e\" runtime opti e280: 6f 6e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 on\n"].... e290: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu e2a0: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 rn false.. e2b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s e2d0: 65 74 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 24 et ::test_year$
e2e0: 79 65 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20  year..
e2f0: 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74        set ::test
e300: 5f 70 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66  _platform $platf e310: 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 orm.. e320: 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f set ::test_ e330: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 63 configuration$c
e340: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 0d 0a  onfiguration....
e350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e360: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ e370: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. e380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e390: 20 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 "yes, selected e3a0: 20 28 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 (" [expr {$nati
e3b0: 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a  ve ? "native/" :
e3c0: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20   ""}] \..
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78               [ex
e3e0: 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  pr {[string leng
e3f0: 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20  th $platform] > e400: 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 0 ? [appendArgs e410: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. e420: 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d$platform
e430: 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72   /] : ""}] $year e440: 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f /$configuratio
e450: 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20  n ")\n"]....
e460: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
e470: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20  rn true..
e480: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
e490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
e4a0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel e4b0: 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 yes\n.. e4c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. e4d0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. e4e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput e4f0: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d s$channel no\n.
e500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
e510: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
e520: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
e530: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
e540: 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  false..    }....
e550: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46  .    proc checkF
e560: 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73  orSQLiteReleases
e570: 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65   { channel {sele
e580: 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  ct false} } {..
e590: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
e5a0: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20  NOTE: Check for
e5b0: 70 61 73 74 20 72 65 6c 65 61 73 65 73 20 6f 66  past releases of
e5c0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
e5d0: 69 74 65 20 69 6e 20 74 68 65 20 64 69 72 65 63  ite in the direc
e5e0: 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20  tory..      #
e5f0: 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e      contained in
e600: 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61 74   the "System.Dat
e610: 61 2e 53 51 4c 69 74 65 22 20 65 6e 76 69 72 6f  a.SQLite" enviro
e620: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2c 20  nment variable,
e630: 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  if..      #
e640: 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20    present...
e650: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
e660: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e  info exists ::en
e670: 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  v(System.Data.SQ
e680: 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20 20 20  Lite)] && \..
e690: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
e6a0: 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53 79 73  ength $::env(Sys e6b0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 tem.Data.SQLite) e6c0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. e6d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. e6e0: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build e6f0: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 the fully qualif e700: 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 68 ied directory wh e710: 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 72 ere the necessar e720: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # e730: 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f components fo e740: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 r System.Data.SQ e750: 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20 66 Lite should be f e760: 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 ound... # e770: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 69 .. set di e780: 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6e 61 rectory [file na e790: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j e7a0: 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. e7b0: 20 20 20 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d$::env(System
e7c0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 20 5b 67  .Data.SQLite) [g
e7d0: 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f 6e  etReleaseVersion
e7e0: 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ]]]....        t
e7f0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a e800: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. e810: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c e820: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 hecking for Syst e830: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 em.Data.SQLite r e840: 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 elease \"" \.. e850: 20 20 20 20 20 20 20 20 20 20 24 64 69 72 65 63$direc
e860: 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a  tory "\"... "]..
e870: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69  ..        if {[i
e880: 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c  sReleaseAvailabl
e890: 65 20 24 64 69 72 65 63 74 6f 72 79 20 70 6c 61  e $directory pla e8a0: 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a tform]} then {.. e8b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s e8c0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c tring length$pl
e8d0: 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68  atform] == 0} th
e8e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
e8f0: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75    set platform u
e900: 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  nknown..
e910: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
e920: 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20   if {$select && e930: 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 [matchPlatform$
e940: 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20  platform]} then
e950: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
e960: 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63  et ::build_direc
e970: 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 0d  tory $directory. e980: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 ... t e990: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
e9a0: 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c 20  ppendArgs "yes,
e9b0: 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c 61  selected (" $pla e9c0: 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a tform ")\n"].... e9d0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu e9e0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 rn true.. e9f0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. ea00: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
ea10: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
ea20: 72 67 73 20 22 79 65 73 20 28 22 20 24 70 6c 61  rgs "yes (" $pla ea30: 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 tform ")\n"].. ea40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. ea50: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. ea60: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
ea70: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20  annel no\n....
ea80: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
ea90: 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d 64 65 63  path [lsort -dec
eaa0: 72 65 61 73 69 6e 67 20 5b 66 69 6c 65 20 6c 69  reasing [file li
eab0: 73 74 20 24 64 69 72 65 63 74 6f 72 79 20 2a 5d  st $directory *] eac0: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] {.. ead0: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist eae0: 73 20 24 70 61 74 68 5d 20 26 26 20 5b 66 69 6c s$path] && [fil
eaf0: 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 70  e isdirectory $p eb00: 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ath]} then {.. eb10: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput eb20: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
eb30: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
eb40: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
eb50: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
eb60: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
eb70: 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d  e release \"" \.
eb80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
eb90: 20 20 20 24 70 61 74 68 20 22 5c 22 2e 2e 2e 20     $path "\"... eba0: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... ebb0: 20 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 if {[isRelea ebc0: 73 65 41 76 61 69 6c 61 62 6c 65 20 24 70 61 74 seAvailable$pat
ebd0: 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65  h platform]} the
ebe0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
ebf0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
ec00: 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72   length $platfor ec10: 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d m] == 0} then {. ec20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . ec30: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform ec40: 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 unknown.. ec50: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... ec60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if ec70: 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 {$select && [ma
ec80: 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61  tchPlatform $pla ec90: 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a tform]} then {.. eca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ecb0: 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 set ::build_di ecc0: 72 65 63 74 6f 72 79 20 24 70 61 74 68 0d 0a 0d rectory$path...
ecd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
ece0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe ecf0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 l [appendArgs "y ed00: 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 es, selected (" ed10: 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d$platform ")\n"]
ed20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
ed30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
ed40: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
ed50: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
ed60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
ed70: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a ed80: 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 ppendArgs "yes ( ed90: 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e "$platform ")\n
eda0: 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
edb0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
edc0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
ede0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no edf0: 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \n.. ee00: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. ee10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. ee20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. ee30: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. ee40: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
ee50: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
ee60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
ee70: 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  --- environment
ee80: 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73 74 65  variable \"Syste
ee90: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 20  m.Data.SQLite\"
eea0: 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 20 20  is not " \..
eeb0: 20 20 20 20 20 20 20 20 22 73 65 74 2c 20 73 6b          "set, sk
eec0: 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 6f 72  ipping check for
eed0: 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d   releases...\n"]
eee0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
eef0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d     return false.
ef00: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
ef10: 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69  roc checkForSQLi
ef20: 74 65 4c 69 62 72 61 72 79 20 7b 20 63 68 61 6e  teLibrary { chan
ef30: 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  nel } {..      t
ef40: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d  puts $channel "- ef50: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for ef60: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib ef70: 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 rary... ".... ef80: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. ef90: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 . object efa0: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N efb0: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. efc0: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D efd0: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit efe0: 65 33 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e e3 SQLiteVersion eff0: 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f .. } versio f000: 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d n] == 0} then {. f010: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. f020: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec f030: 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 k if the returne f040: 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 d version was nu f050: 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 ll. If so, make f060: 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20 it easy.. f070: 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f # to spo f080: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. f090: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri f0a0: 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 ng length$versi
f0b0: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
f0c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
f0d0: 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20  version null..
f0e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
f0f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
f100: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
f110: 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69   query the Fossi
f120: 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66  l source identif
f130: 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ier for the SQLi
f140: 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  te..        #
f150: 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79      core library
f160: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
f170: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
f180: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
f190: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
f1a0: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
f1b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
f1c0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
f1d0: 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 65  e.SQLite3 SQLite
f1e0: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20  SourceId..
f1f0: 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74    } sourceId]} t
f200: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
f210: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
f220: 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20  NOTE: We failed
f230: 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73  to query the Fos
f240: 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74  sil source ident
f250: 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  ifier...
f260: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
f270: 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e  et sourceId unkn
f280: 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  own..        }..
f290: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
f2a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
f2b0: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e  ck if the return
f2c0: 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65  ed Fossil source
f2d0: 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 20   identifier was
f2e0: 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20  null.  If..
f2f0: 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d     #       so, m
f300: 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 73  ake it easy to s
f310: 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  pot...        #.
f320: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
f330: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75  ring length $sou f340: 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 rceId] == 0} the f350: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s f360: 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c et sourceId null f370: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... f380: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. f390: 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 # NOTE: Yes, t f3a0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c he SQLite core l f3b0: 69 62 72 61 72 79 20 61 70 70 65 61 72 73 20 74 ibrary appears t f3c0: 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d o be available.. f3d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. f3e0: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain f3f0: 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 t SQLite.... f400: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
f410: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
f420: 79 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20  yes (" $version f430: 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 " "$sourceId ")
f440: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  \n"]..      } el
f450: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
f460: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\ f470: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 n.. }.. f480: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c f490: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74 heckForSQLiteInt f4a0: 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c 20 7d erop { channel } f4b0: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 {.. tputs f4c0: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
f4d0: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69  hecking for SQLi
f4e0: 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  te interop assem
f4f0: 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  bly... "....
f500: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
f510: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
f520: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
f530: 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
f540: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
f550: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
f560: 33 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f 6e  3 InteropVersion
f570: 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f  ..      } versio
f580: 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  n] == 0} then {.
f590: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f5a0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
f5b0: 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65  k if the returne
f5c0: 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75  d version was nu
f5d0: 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65  ll.  If so, make
f5e0: 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20   it easy..
f5f0: 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f    #       to spo
f600: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
f610: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
f620: 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69  ng length $versi f630: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b on] == 0} then { f640: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set f650: 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 version null.. f660: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... f670: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # f680: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to f690: 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 query the Fossi f6a0: 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 l source identif f6b0: 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69 ier for the SQLi f6c0: 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 te.. # f6d0: 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 core library f6e0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. f6f0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch f700: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob f710: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla f720: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. f730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S f740: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit f750: 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 6f e.SQLite3 Intero f760: 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 pSourceId.. f770: 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 } sourceId]} f780: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. f790: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # f7a0: 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 NOTE: We failed f7b0: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo f7c0: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden f7d0: 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 tifier... f7e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. f7f0: 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b set sourceId unk f800: 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d nown.. }. f810: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. f820: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch f830: 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 eck if the retur f840: 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 ned Fossil sourc f850: 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 e identifier was f860: 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 null. If.. f870: 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 # so, f880: 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 make it easy to f890: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 spot... # f8a0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s f8b0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f tring length$so
f8c0: 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68  urceId] == 0} th
f8d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
f8e0: 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c  set sourceId nul
f8f0: 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  l..        }....
f900: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
f910: 20 20 20 23 20 4e 4f 54 45 3a 20 42 65 66 6f 72     # NOTE: Befor
f920: 65 20 61 63 74 75 61 6c 6c 79 20 61 64 64 69 6e  e actually addin
f930: 67 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73 74  g the test const
f940: 72 61 69 6e 74 2c 20 6d 61 6b 65 20 73 75 72 65  raint, make sure
f950: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
f960: 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 69 73        version is
f970: 20 76 61 6c 69 64 20 28 69 2e 65 2e 20 6e 6f 74   valid (i.e. not
f980: 20 6a 75 73 74 20 74 68 61 74 20 77 65 20 63 6f   just that we co
f990: 75 6c 64 20 71 75 65 72 79 20 69 74 29 2e 0d 0a  uld query it)...
f9a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
f9b0: 20 20 20 69 66 20 7b 24 76 65 72 73 69 6f 6e 20     if {$version f9c0: 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 ne "null"} then f9d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. f9e0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE f9f0: 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 74 : Yes, the SQLit fa00: 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 e interop assemb fa10: 6c 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 ly appears to be fa20: 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 available... fa30: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. fa40: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain fa50: 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d t SQLiteInterop. fa60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ... set fa70: 20 61 6e 73 77 65 72 20 79 65 73 0d 0a 20 20 20 answer yes.. fa80: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. fa90: 20 20 20 20 20 20 20 20 20 73 65 74 20 61 6e 73 set ans faa0: 77 65 72 20 6e 6f 0d 0a 20 20 20 20 20 20 20 20 wer no.. fab0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 }.... tpu fac0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
fad0: 65 6e 64 41 72 67 73 20 24 61 6e 73 77 65 72 20  endArgs $answer fae0: 22 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 " ("$version "
faf0: 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e  " $sourceId ")\n fb00: 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 "].. } else fb10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput fb20: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d s$channel no\n.
fb30: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
fb40: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65  ....    proc che
fb50: 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e  ckForSQLiteDefin
fb60: 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61 6e  eConstant { chan
fb70: 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20  nel name } {..
fb80: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann fb90: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ fba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d .. "--- fbb0: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S fbc0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit fbd0: 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e e define constan fbe0: 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 t \""$name \..
fbf0: 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20           "\"...
fc00: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  "]....      if {
fc10: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
fc20: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
fc30: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
fc40: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
fc50: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
fc60: 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69  ite.SQLite3 Defi
fc70: 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20  neConstants..
fc80: 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74     } defineConst
fc90: 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ants] == 0} then
fca0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
fcb0: 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20  [lsearch -exact
fcc0: 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65 43  -nocase $defineC fcd0: 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d 20 onstants$name]
fce0: 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20  != -1} then {..
fcf0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
fd00: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65        # NOTE: Ye
fd10: 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20 63  s, this define c
fd20: 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61 62  onstant was enab
fd30: 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61 6e  led when the man
fd40: 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  aged..
fd50: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  #       assembly
fd60: 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a   was compiled...
fd70: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
fd80: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
fd90: 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
fda0: 20 5b 67 65 74 53 51 4c 69 74 65 44 65 66 69 6e   [getSQLiteDefin
fdb0: 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 69 78 5d  eConstantPrefix]
fdc0: 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20   $name].... fdd0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
fde0: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20  nel yes\n..
fdf0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
fe00: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch fe10: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 annel no\n.. fe20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e fe30: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t fe40: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 puts$channel er
fe50: 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a  ror\n..      }..
fe60: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
fe70: 6f 63 20 67 65 74 44 61 74 65 54 69 6d 65 46 6f  oc getDateTimeFo
fe80: 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  rmat {} {..
fe90: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
fea0: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
feb0: 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 73 20   simply returns
fec0: 74 68 65 20 22 64 65 66 61 75 6c 74 22 20 44 61  the "default" Da
fed0: 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 75 73  teTime format us
fee0: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
fef0: 20 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75    by the test su
ff00: 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ite...      #..
ff10: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
ff20: 78 69 73 74 73 20 3a 3a 64 61 74 65 74 69 6d 65  xists ::datetime
ff30: 5f 66 6f 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20  _format] && \..
ff40: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
ff50: 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 65 74   length $::datet ff60: 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d ime_format] > 0} ff70: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. ff80: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO ff90: 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d TE: Return the m ffa0: 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 anually overridd ffb0: 65 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 en value for the ffc0: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 DateTime format ffd0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. ffe0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
fff0: 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d  datetime_format.
10000 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
10010 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
10020 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
10030 72 6e 20 61 6e 20 49 53 4f 38 36 30 31 20 44 61  rn an ISO8601 Da
10040 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f  teTime format co
10050 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51  mpatible with SQ
10060 4c 69 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 23  Lite,..        #
10070 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
10080 74 61 2e 53 51 4c 69 74 65 2c 20 61 6e 64 20 73  ta.SQLite, and s
10090 75 69 74 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e  uitable for roun
100a0 64 2d 74 72 69 70 70 69 6e 67 20 77 69 74 68 20  d-tripping with
100b0 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
100c0 20 20 20 20 20 44 61 74 65 54 69 6d 65 20 63 6c       DateTime cl
100d0 61 73 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ass of the frame
100e0 77 6f 72 6b 2e 20 20 49 66 20 74 68 69 73 20 76  work.  If this v
100f0 61 6c 75 65 20 69 73 20 63 68 61 6e 67 65 64 2c  alue is changed,
10100 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
10110 20 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 20    various tests
10120 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20  may fail...
10130 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
10140 74 75 72 6e 20 22 79 79 79 79 2d 4d 4d 2d 64 64  turn "yyyy-MM-dd
10150 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46   HH:mm:ss.FFFFFF
10160 46 4b 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  FK"..      }..
10170 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
10180 20 65 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73   enumerableToLis
10190 74 20 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d  t { enumerable }
101a0 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65   {..      set re
101b0 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list]....
101c0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
101d0 20 6c 65 6e 67 74 68 20 24 65 6e 75 6d 65 72 61   length $enumera 101e0 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e ble] == 0 ||$en
101f0 75 6d 65 72 61 62 6c 65 20 65 71 20 22 6e 75 6c  umerable eq "nul
10200 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  l"} then {..
10210 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75      return $resu 10220 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 lt.. }.... 10230 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 object fore 10240 61 63 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 ach -alias item 10250 24 65 6e 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20$enumerable {..
10260 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
10270 6e 67 20 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d  ng length $item] 10280 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 10290 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 102a0 72 65 73 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f result [$item To
102b0 53 74 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20  String]..
102c0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
102d0 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res 102e0 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ult.. }..... 102f0 20 20 20 70 72 6f 63 20 63 61 74 63 68 41 6e 64 proc catchAnd 10300 52 65 74 75 72 6e 20 7b 20 73 63 72 69 70 74 20 Return { script 10310 7b 73 74 61 63 6b 54 72 61 63 65 20 66 61 6c 73 {stackTrace fals 10320 65 7d 20 7b 73 74 72 69 63 74 20 74 72 75 65 7d e} {strict true} 10330 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 10340 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 # NOTE: Eva 10350 6c 75 61 74 65 20 74 68 65 20 73 63 72 69 70 74 luate the script 10360 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 provided by our 10370 20 63 61 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 caller in their 10380 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 context,.. 10390 20 23 20 20 20 20 20 20 20 63 61 70 74 75 72 69 # capturi 103a0 6e 67 20 62 6f 74 68 20 74 68 65 20 72 65 73 75 ng both the resu 103b0 6c 74 20 61 6e 64 20 74 68 65 20 72 65 74 75 72 lt and the retur 103c0 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 n code... # 103d0 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 .. set code 103e0 20 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c [catch {uplevel 103f0 20 31 20 24 73 63 72 69 70 74 7d 20 72 65 73 75 1$script} resu
10400 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  lt]....      #..
10410 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 69        # NOTE: Di
10420 64 20 74 68 65 20 73 63 72 69 70 74 20 70 72 6f  d the script pro
10430 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c  vided by our cal
10440 6c 65 72 20 4e 4f 54 20 72 61 69 73 65 20 61 6e  ler NOT raise an
10450 20 65 72 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23   error?..      #
10460 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 73 74 72  ..      if {$str 10470 69 63 74 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 ict &&$code ==
10480 30 20 7c 7c 20 21 24 73 74 72 69 63 74 20 26 26  0 || !$strict && 10490 20 24 63 6f 64 65 20 21 3d 20 31 7d 20 74 68 65$code != 1} the
104a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
104b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
104c0 53 75 63 63 65 73 73 2e 20 20 52 65 74 75 72 6e  Success.  Return
104d0 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65   a list with the
104e0 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64   return code and
104f0 20 74 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20   the result...
10500 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10510 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63   return [list $c 10520 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 ode$result]..
10530 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73      } elseif {$s 10540 74 61 63 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 tackTrace} then 10550 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 10560 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 # NOTE: Fa 10570 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c ilure. Our call 10580 65 72 20 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 er wants a full 10590 73 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 20 stack trace (if 105a0 61 70 70 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 applicable),.. 105b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 105c0 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 turn a list with 105d0 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 the return code 105e0 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 and the result 105f0 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 verbatim... 10600 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 10610 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 turn [list$code
10620 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20   $result].. 10630 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 10640 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 10650 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 NOTE: Failure. 10660 4f 75 72 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 Our caller does 10670 6e 6f 74 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 not want a full 10680 73 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 0d stack trace (if. 10690 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 106a0 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 applicable), re 106b0 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 turn a list with 106c0 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 the return code 106d0 2c 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 , the error.. 106e0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 64 # cod 106f0 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 70 e for the interp 10700 72 65 74 65 72 2c 20 61 6e 64 20 74 68 65 20 65 reter, and the e 10710 72 72 6f 72 20 6d 65 73 73 61 67 65 20 75 70 20 rror message up 10720 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 to the.. 10730 23 20 20 20 20 20 20 20 70 6f 69 6e 74 20 77 68 # point wh 10740 65 72 65 20 74 68 65 20 73 74 61 63 6b 20 74 72 ere the stack tr 10750 61 63 65 20 73 68 6f 75 6c 64 20 73 74 61 72 74 ace should start 10760 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 10770 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 return [li 10780 73 74 20 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f st$code $::erro 10790 72 43 6f 64 65 20 5c 0d 0a 20 20 20 20 20 20 20 rCode \.. 107a0 20 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 [extractSys 107b0 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 temDataSQLiteExc 107c0 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 eptionMessage$r
107d0 65 73 75 6c 74 5d 5d 0d 0a 20 20 20 20 20 20 7d  esult]]..      }
107e0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
107f0 70 72 6f 63 20 63 6f 6d 70 69 6c 65 43 53 68 61  proc compileCSha
10800 72 70 57 69 74 68 20 7b 0d 0a 20 20 20 20 20 20  rpWith {..
10810 20 20 20 20 20 20 74 65 78 74 20 6d 65 6d 6f 72        text memor
10820 79 20 73 79 6d 62 6f 6c 73 20 73 74 72 69 63 74  y symbols strict
10830 20 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20   resultsVarName
10840 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 66 69  errorsVarName fi
10850 6c 65 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20  leNames..
10860 20 20 20 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20       args } {..
10870 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
10880 4e 4f 54 45 3a 20 53 69 6e 63 65 20 77 65 20 61  NOTE: Since we a
10890 72 65 20 67 6f 69 6e 67 20 74 6f 20 75 73 65 20  re going to use
108a0 74 68 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65  this method name
108b0 20 61 20 6c 6f 74 2c 20 61 73 73 69 67 6e 20 69   a lot, assign i
108c0 74 20 74 6f 20 61 0d 0a 20 20 20 20 20 20 23 20  t to a..      #
108d0 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 66        variable f
108e0 69 72 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  irst...      #..
108f0 20 20 20 20 20 20 73 65 74 20 61 64 64 20 52 65        set add Re
10900 66 65 72 65 6e 63 65 64 41 73 73 65 6d 62 6c 69  ferencedAssembli
10910 65 73 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 20 20  es.Add....
10920 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
10930 20 43 72 65 61 74 65 20 74 68 65 20 62 61 73 65   Create the base
10940 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c   command to eval
10950 75 61 74 65 20 61 6e 64 20 61 64 64 20 74 68 65  uate and add the
10960 20 70 72 6f 70 65 72 74 79 20 73 65 74 74 69 6e   property settin
10970 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  gs..      #
10980 20 20 74 68 61 74 20 61 72 65 20 61 6c 6d 6f 73    that are almos
10990 74 20 61 6c 77 61 79 73 20 6e 65 65 64 65 64 20  t always needed
109a0 62 79 20 6f 75 72 20 75 6e 69 74 20 74 65 73 74  by our unit test
109b0 73 20 28 69 2e 65 2e 20 74 68 65 20 53 79 73 74  s (i.e. the Syst
109c0 65 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  em..      #
109d0 20 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74    and System.Dat
109e0 61 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72  a assembly refer
109f0 65 6e 63 65 73 29 2e 0d 0a 20 20 20 20 20 20 23  ences)...      #
10a00 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6d 6d  ..      set comm
10a10 61 6e 64 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  and [list \..
10a20 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 43 53         compileCS
10a30 68 61 72 70 20 24 74 65 78 74 20 24 6d 65 6d 6f  harp $text$memo
10a40 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73 74 72  ry $symbols$str
10a50 69 63 74 20 72 65 73 75 6c 74 73 20 65 72 72 6f  ict results erro
10a60 72 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  rs \..
10a70 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c 6c 20  $add System.dll 10a80 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61 74 61$add System.Data
10a90 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d  .dll $add System 10aa0 2e 54 72 61 6e 73 61 63 74 69 6f 6e 73 2e 64 6c .Transactions.dl 10ab0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 l \..$
10ac0 61 64 64 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 64  add System.Xml.d
10ad0 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  ll]....      #..
10ae0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64        # NOTE: Ad
10af0 64 20 61 6c 6c 20 74 68 65 20 70 72 6f 76 69 64  d all the provid
10b00 65 64 20 66 69 6c 65 20 6e 61 6d 65 73 20 61 73  ed file names as
10b10 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65   assembly refere
10b20 6e 63 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  nces...      #..
10b30 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
10b40 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 10b50 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 s {.. lap 10b60 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 64 pend command$ad
10b70 64 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  d [getBinaryFile
10b80 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  Name $fileName]. 10b90 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 10ba0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10bb0 45 3a 20 41 64 64 20 74 68 65 20 65 78 74 72 61 E: Add the extra 10bc0 20 61 72 67 75 6d 65 6e 74 73 2c 20 69 66 20 61 arguments, if a 10bd0 6e 79 2c 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 ny, to the comma 10be0 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 2e 0d nd to evaluate.. 10bf0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 10c00 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 63 6f 6d eval lappend com 10c10 6d 61 6e 64 20 24 61 72 67 73 0d 0a 0d 0a 20 20 mand$args....
10c20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
10c30 4f 54 45 3a 20 41 6c 69 61 73 20 74 68 65 20 63  OTE: Alias the c
10c40 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 6c 20 72 65  ompiler local re
10c50 73 75 6c 74 73 20 61 6e 64 20 65 72 72 6f 72 73  sults and errors
10c60 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20 74 68   variables to th
10c70 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
10c80 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20   variable names
10c90 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20  provided by our
10ca0 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23  caller...      #
10cb0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
10cc0 69 6e 67 20 6c 65 6e 67 74 68 20 24 72 65 73 75  ing length $resu 10cd0 6c 74 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d ltsVarName] > 0} 10ce0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10cf0 20 75 70 76 61 72 20 31 20 24 72 65 73 75 6c 74 upvar 1$result
10d00 73 56 61 72 4e 61 6d 65 20 72 65 73 75 6c 74 73  sVarName results
10d10 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
10d20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
10d30 65 6e 67 74 68 20 24 65 72 72 6f 72 73 56 61 72  ength $errorsVar 10d40 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 Name] > 0} then 10d50 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 {.. upvar 10d60 20 31 20 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 1$errorsVarNam
10d70 65 20 65 72 72 6f 72 73 0d 0a 20 20 20 20 20 20  e errors..
10d80 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
10d90 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c      # NOTE: Eval
10da0 75 61 74 65 20 74 68 65 20 63 6f 6e 73 74 72 75  uate the constru
10db0 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65 43 53 68  cted [compileCSh
10dc0 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20 61 6e 64  arp] command and
10dd0 20 72 65 74 75 72 6e 20 74 68 65 0d 0a 20 20 20   return the..
10de0 20 20 20 23 20 20 20 20 20 20 20 72 65 73 75 6c     #       resul
10df0 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  t...      #..
10e00 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d 61 6e 64     eval $command 10e10 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 10e20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79 44 62 20 proc isMemoryDb 10e30 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a { fileName } {.. 10e40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 10e50 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 73 70 NOTE: Is the sp 10e60 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65 ecified database 10e70 20 66 69 6c 65 20 6e 61 6d 65 20 72 65 61 6c 6c file name reall 10e80 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 y an in-memory d 10e90 61 74 61 62 61 73 65 3f 0d 0a 20 20 20 20 20 20 atabase?.. 10ea0 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 #.. return 10eb0 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e 61 6d 65 [expr {$fileName
10ec0 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 7c   eq ":memory:" |
10ed0 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  | \..          [
10ee0 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 66 69  string range $fi 10ef0 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20 65 71 20 leName 0 12] eq 10f00 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 3a 22 7d "file::memory:"} 10f10 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 10f20 20 70 72 6f 63 20 69 73 54 61 62 6c 65 49 6e 44 proc isTableInD 10f30 62 20 7b 20 6e 61 6d 65 20 7b 76 61 72 4e 61 6d b { name {varNam 10f40 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e db} } {.. 10f50 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 10f60 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 : Refer to the s 10f70 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c pecified variabl 10f80 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e e (e.g. "db") in 10f90 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of 10fa0 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 our.. # 10fb0 20 20 20 63 61 6c 6c 65 72 2e 20 20 49 74 20 63 caller. It c 10fc0 6f 6e 74 61 69 6e 73 20 74 68 65 20 64 61 74 61 ontains the data 10fd0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 base connection 10fe0 68 61 6e 64 6c 65 20 74 68 61 74 20 77 69 6c 6c handle that will 10ff0 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 be.. # 11000 20 20 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 used to execu 11010 74 65 20 74 68 65 20 71 75 65 72 79 20 75 73 65 te the query use 11020 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 d to determine i 11030 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c f the named tabl 11040 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 e is.. # 11050 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e 20 74 present in t 11060 68 61 74 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 hat database... 11070 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 #.. up 11080 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 var 1$varName d
11090 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  b....      #..
110a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
110b0 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
110c0 72 20 74 61 62 6c 65 20 74 6f 20 64 65 74 65 72  r table to deter
110d0 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65  mine if the name
110e0 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20  d table is..
110f0 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65 6e    #       presen
11100 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
11110 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
11120 20 20 20 73 65 74 20 73 71 6c 20 7b 0d 0a 20 20     set sql {..
11130 20 20 20 20 20 20 53 45 4c 45 43 54 20 43 4f 55        SELECT COU
11140 4e 54 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74  NT(*) FROM sqlit
11150 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  e_master WHERE t
11160 79 70 65 20 3d 20 27 74 61 62 6c 65 27 20 41 4e  ype = 'table' AN
11170 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d 0a 20 20 20  D name = ?;..
11180 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
11190 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
111a0 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
111b0 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c  f the named tabl
111c0 65 20 69 73 20 70 72 65 73 65 6e 74 2e 0d 0a 20  e is present...
111d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
111e0 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20  turn [expr {..
111f0 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75        [sql execu
11200 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
11210 61 72 20 24 64 62 20 24 73 71 6c 20 5b 6c 69 73  ar $db$sql [lis
11220 74 20 70 61 72 61 6d 31 20 53 74 72 69 6e 67 20  t param1 String
11230 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d 0a 20 20 20  $name]] > 0.. 11240 20 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }].. }.... 11250 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 44 . proc getDbD 11260 65 66 61 75 6c 74 50 61 67 65 53 69 7a 65 20 7b efaultPageSize { 11270 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 20 7b } {.. try { 11280 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 62 .. set db 11290 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65 [sql open -type 112a0 20 53 51 4c 69 74 65 20 7b 44 61 74 61 20 53 6f SQLite {Data So 112b0 75 72 63 65 3d 3a 6d 65 6d 6f 72 79 3a 3b 7d 5d urce=:memory:;}] 112c0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 112d0 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 [sql execute -e 112e0 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 xecute scalar$d
112f0 62 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 73  b "PRAGMA page_s
11300 69 7a 65 3b 22 5d 0d 0a 20 20 20 20 20 20 7d 20  ize;"]..      }
11310 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20  finally {..
11320 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
11330 73 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d  sts db]} then {.
11340 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68  .          catch
11350 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d   {sql close $db} 11360 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 .. unse 11370 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 62 t -nocomplain db 11380 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 11390 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 113a0 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 44 65 proc getDbDe 113b0 66 61 75 6c 74 43 61 63 68 65 53 69 7a 65 20 7b faultCacheSize { 113c0 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 20 7b } {.. try { 113d0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 62 .. set db 113e0 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65 [sql open -type 113f0 20 53 51 4c 69 74 65 20 7b 44 61 74 61 20 53 6f SQLite {Data So 11400 75 72 63 65 3d 3a 6d 65 6d 6f 72 79 3a 3b 7d 5d urce=:memory:;}] 11410 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 11420 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 [sql execute -e 11430 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 xecute scalar$d
11440 62 20 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f  b "PRAGMA cache_
11450 73 69 7a 65 3b 22 5d 0d 0a 20 20 20 20 20 20 7d  size;"]..      }
11460 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20   finally {..
11470 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
11480 69 73 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b  ists db]} then {
11490 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63  ..          catc
114a0 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62  h {sql close $db 114b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 }.. uns 114c0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 64 et -nocomplain d 114d0 62 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 b.. }.. 114e0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 114f0 0a 20 20 20 20 70 72 6f 63 20 75 73 65 4c 65 67 . proc useLeg 11500 61 63 79 44 62 50 61 67 65 41 6e 64 43 61 63 68 acyDbPageAndCach 11510 65 53 69 7a 65 73 20 7b 20 76 61 72 4e 61 6d 65 eSizes { varName 11520 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 11530 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 # NOTE: Ref 11540 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 er to the specif 11550 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e ied variable (e. 11560 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 g. "db") in the 11570 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a context of our.. 11580 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 # ca 11590 6c 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 69 ller. It contai 115a0 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 ns the database 115b0 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c connection handl 115c0 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a e that will be.. 115d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 # us 115e0 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 71 75 ed to execute qu 115f0 65 72 69 65 73 20 75 73 65 64 20 74 6f 20 73 65 eries used to se 11600 74 20 74 68 65 20 70 61 67 65 20 61 6e 64 20 63 t the page and c 11610 61 63 68 65 20 73 69 7a 65 73 2e 0d 0a 20 20 20 ache sizes... 11620 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 #.. upva 11630 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d r 1$varName db.
11640 0a 0d 0a 20 20 20 20 20 20 73 71 6c 20 65 78 65  ...      sql exe
11650 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 20 20  cute $db {.. 11660 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 65 5f PRAGMA page_ 11670 73 69 7a 65 20 3d 20 31 30 32 34 3b 0d 0a 20 20 size = 1024;.. 11680 20 20 20 20 20 20 50 52 41 47 4d 41 20 63 61 63 PRAGMA cac 11690 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 30 3b 0d he_size = 2000;. 116a0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 116b0 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c return [list \ 116c0 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 71 6c .. [sql 116d0 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 execute -execut 116e0 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 e scalar$db "PR
116f0 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b 22  AGMA page_size;"
11700 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  ] \..          [
11710 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65  sql execute -exe
11720 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20  cute scalar $db 11730 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 "PRAGMA cache_si 11740 7a 65 3b 22 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c ze;"]].. }... 11750 0d 0a 20 20 20 20 70 72 6f 63 20 65 78 74 72 61 .. proc extra 11760 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 ctSystemDataSQLi 11770 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 teExceptionMessa 11780 67 65 20 7b 20 76 61 6c 75 65 20 7d 20 7b 0d 0a ge { value } {.. 11790 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 117a0 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 73 74 NOTE: If the st 117b0 72 69 6e 67 20 63 6f 6e 66 6f 72 6d 73 20 74 6f ring conforms to 117c0 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 6e format of the n 117d0 6f 72 6d 61 6c 20 65 78 63 65 70 74 69 6f 6e 0d ormal exception. 117e0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 . # e 117f0 72 72 6f 72 20 73 74 72 69 6e 67 73 2c 20 65 78 rror strings, ex 11800 74 72 61 63 74 20 61 6e 64 20 72 65 74 75 72 6e tract and return 11810 20 6f 6e 6c 79 20 74 68 65 20 65 72 72 6f 72 20 only the error 11820 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20 23 message.. # 11830 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20 69 portion i 11840 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 23 0d tself... #. 11850 0a 20 20 20 20 20 20 73 65 74 20 70 61 74 74 65 . set patte 11860 72 6e 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 rns [list \.. 11870 20 20 20 7b 53 79 73 74 65 6d 5c 2e 44 61 74 61 {System\.Data 11880 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 65 \.SQLite\.SQLite 11890 45 78 63 65 70 74 69 6f 6e 20 5c 28 30 78 38 30 Exception $$0x80 118a0 30 30 34 30 30 35 5c 29 3a 20 28 2e 2b 3f 29 20 004005$$: (.+?) 118b0 20 28 3f 3a 20 29 3f 61 74 7d 20 5c 0d 0a 20 20 (?: )?at} \.. 118c0 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e 44 61 74 {System\.Dat 118d0 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74 a\.SQLite\.SQLit 118e0 65 45 78 63 65 70 74 69 6f 6e 3a 20 28 2e 2b 3f eException: (.+? 118f0 29 20 20 28 3f 3a 20 29 3f 61 74 7d 5d 0d 0a 0d ) (?: )?at}]... 11900 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 . foreach p 11910 61 74 74 65 72 6e 20 24 70 61 74 74 65 72 6e 73 attern$patterns
11920 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
11930 5b 72 65 67 65 78 70 20 2d 2d 20 24 70 61 74 74  [regexp -- $patt 11940 65 72 6e 20 24 76 61 6c 75 65 20 64 75 6d 6d 79 ern$value dummy
11950 20 6d 65 73 73 61 67 65 5d 7d 20 74 68 65 6e 20   message]} then
11960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
11970 20 6d 65 73 73 61 67 65 20 5b 73 74 72 69 6e 67   message [string
11980 20 6d 61 70 20 5b 6c 69 73 74 20 5c 72 5c 6e 20   map [list \r\n
11990 5c 6e 5d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  \n] [string trim
119a0 20 24 6d 65 73 73 61 67 65 5d 5d 0d 0a 20 20 20   $message]].. 119b0 20 20 20 20 20 20 20 73 65 74 20 6c 69 6e 65 73 set lines 119c0 20 5b 73 70 6c 69 74 20 24 6d 65 73 73 61 67 65 [split$message
119d0 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   \n]....
119e0 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24    if {[llength $119f0 6c 69 6e 65 73 5d 20 3d 3d 20 32 7d 20 74 68 65 lines] == 2} the 11a00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 11a10 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24 6c 69 if {[lindex$li
11a20 6e 65 73 20 30 5d 20 65 71 20 5b 6c 69 6e 64 65  nes 0] eq [linde
11a30 78 20 24 6c 69 6e 65 73 20 31 5d 7d 20 74 68 65  x $lines 1]} the 11a40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 11a50 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 return [linde 11a60 78 20 24 6c 69 6e 65 73 20 30 5d 0d 0a 20 20 20 x$lines 0]..
11a70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
11a80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11a90 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 6c 69   [appendArgs [li
11aa0 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 5d 20 22  ndex $lines 0] " 11ab0 20 2d 2d 20 22 20 5b 6c 69 6e 64 65 78 20 24 6c -- " [lindex$l
11ac0 69 6e 65 73 20 31 5d 5d 0d 0a 20 20 20 20 20 20  ines 1]]..
11ad0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
11ae0 20 20 20 72 65 74 75 72 6e 20 24 6d 65 73 73 61     return $messa 11af0 67 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 ge.. }.. 11b00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 11b10 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 return$value..
11b20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
11b30 63 20 74 72 69 6d 53 71 6c 20 7b 20 73 71 6c 20  c trimSql { sql
11b40 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  } {..      retur
11b50 6e 20 5b 72 65 67 73 75 62 20 2d 61 6c 6c 20 2d  n [regsub -all -
11b60 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20  - {\s+} [string
11b70 74 72 69 6d 20 24 73 71 6c 5d 20 22 20 22 5d 0d  trim $sql] " "]. 11b80 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 11b90 72 6f 63 20 65 78 65 63 75 74 65 53 71 6c 20 7b roc executeSql { 11ba0 20 73 71 6c 20 7b 65 78 65 63 75 74 65 20 6e 6f sql {execute no 11bb0 6e 65 7d 20 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 ne} {format none 11bc0 7d 20 7b 66 69 6c 65 4e 61 6d 65 20 22 22 7d 20 } {fileName ""} 11bd0 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b } {.. if {[ 11be0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 string length$f
11bf0 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74  ileName] == 0} t
11c00 68 65 6e 20 7b 73 65 74 20 66 69 6c 65 4e 61 6d  hen {set fileNam
11c10 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20  e :memory:}..
11c20 20 20 20 73 65 74 75 70 44 62 20 24 66 69 6c 65     setupDb $file 11c30 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 Name "" "" "" "" 11c40 20 22 22 20 66 61 6c 73 65 20 66 61 6c 73 65 20 "" false false 11c50 66 61 6c 73 65 20 66 61 6c 73 65 20 64 62 20 74 false false db t 11c60 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 74 72 79 rue.... try 11c70 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 11c80 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c rn [uplevel 1 [l 11c90 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 11ca0 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 2d sql execute - 11cb0 65 78 65 63 75 74 65 20 24 65 78 65 63 75 74 65 execute$execute
11cc0 20 2d 66 6f 72 6d 61 74 20 24 66 6f 72 6d 61 74   -format $format 11cd0 20 24 64 62 20 24 73 71 6c 5d 5d 0d 0a 20 20 20$db $sql]].. 11ce0 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a } finally {.. 11cf0 20 20 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44 cleanupD 11d00 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 66 b$fileName db f
11d10 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65  alse false false
11d20 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
11d30 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68 61  .....    proc ha
11d40 73 4e 6f 46 6c 61 67 73 20 7b 20 76 61 72 4e 61  sNoFlags { varNa
11d50 6d 65 20 6e 6f 6e 65 20 7d 20 7b 0d 0a 20 20 20  me none } {..
11d60 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 11d70 61 6d 65 20 66 6c 61 67 73 0d 0a 0d 0a 20 20 20 ame flags.... 11d80 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 11d90 69 73 74 73 20 66 6c 61 67 73 5d 7d 20 74 68 65 ists flags]} the 11da0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret 11db0 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. 11dc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 11dd0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 string length$f
11de0 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  lags] == 0} then
11df0 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
11e00 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d  rn true..      }
11e10 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e  ....      if {$n 11e20 6f 6e 65 20 26 26 20 24 66 6c 61 67 73 20 65 71 one &&$flags eq
11e30 20 22 4e 6f 6e 65 22 7d 20 74 68 65 6e 20 7b 0d   "None"} then {.
11e40 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
11e50 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
11e60 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61  .      return fa
11e70 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  lse..    }.....
11e80 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6e 6e 65     proc getConne
11e90 63 74 69 6f 6e 46 6c 61 67 73 20 7b 20 66 69 6c  ctionFlags { fil
11ea0 65 4e 61 6d 65 20 66 6c 61 67 73 20 7b 71 75 69  eName flags {qui
11eb0 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  et false} } {..
11ec0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
11ed0 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74  NOTE: Figure out
11ee0 20 77 68 69 63 68 20 64 61 74 61 62 61 73 65 20   which database
11ef0 66 69 6c 65 20 6e 61 6d 65 20 6f 72 20 63 6f 6e  file name or con
11f00 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 74  nection string t
11f10 68 65 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20  hese..      #
11f20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66      connection f
11f30 6c 61 67 73 20 77 69 6c 6c 20 61 63 74 75 61 6c  lags will actual
11f40 6c 79 20 61 70 70 6c 79 20 74 6f 2e 20 20 54 68  ly apply to.  Th
11f50 69 73 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73  is is not necess
11f60 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ary..      #
11f70 20 20 20 69 6e 20 71 75 69 65 74 20 6d 6f 64 65     in quiet mode
11f80 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69 6e   because this in
11f90 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6f 6e 6c  formation is onl
11fa0 79 20 75 73 65 64 20 66 6f 72 20 6c 6f 67 67 69  y used for loggi
11fb0 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ng..      #
11fc0 20 20 61 6e 64 20 72 65 70 6f 72 74 69 6e 67 20    and reporting
11fd0 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20 20 20 20  purposes...
11fe0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24   #..      if {!$11ff0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 12000 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 12010 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e ng length$fileN
12020 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
12030 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
12040 64 61 74 61 62 61 73 65 20 5b 61 70 70 65 6e 64  database [append
12050 41 72 67 73 20 22 66 69 6c 65 20 6e 61 6d 65 20  Args "file name
12060 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22  \"" $fileName \" 12070 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 ].. } els 12080 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 eif {[info exist 12090 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d 20 s ::dataSource] 120a0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 120b0 20 20 21 5b 61 72 72 61 79 20 65 78 69 73 74 73 ![array exists 120c0 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d 7d 20 ::dataSource]} 120d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 120e0 20 20 73 65 74 20 64 61 74 61 62 61 73 65 20 5b set database [ 120f0 61 70 70 65 6e 64 41 72 67 73 20 22 64 61 74 61 appendArgs "data 12100 20 73 6f 75 72 63 65 20 5c 22 22 20 24 3a 3a 64 source \""$::d
12110 61 74 61 53 6f 75 72 63 65 20 5c 22 5d 0d 0a 20  ataSource \"]..
12120 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
12130 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64  .          set d
12140 61 74 61 62 61 73 65 20 3c 75 6e 6b 6e 6f 77 6e  atabase <unknown
12150 3e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  >..        }..
12160 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
12170 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
12180 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74  Show (and log) t
12190 68 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74  he local connect
121a0 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68  ion flags and th
121b0 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..
121c0 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61      #       data
121d0 20 73 6f 75 72 63 65 20 6f 72 20 66 69 6c 65 20   source or file
121e0 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  name...      #..
121f0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 12200 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 12210 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 12220 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f ists ::no(emitLo 12230 63 61 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d calFlags)] && \. 12240 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b . (![ 12250 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 12260 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67 73 49 (emitLocalFlagsI 12270 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 fNone)] || \.. 12280 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 ![has 12290 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 NoFlags flags fa 122a0 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 lse])} then {.. 122b0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
122c0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
122d0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
122e0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
122f0 2d 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69  - local connecti
12300 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24  on flags for " $12310 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 database \.. 12320 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a " are: 12330 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e " [expr {![hasN 12340 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 6c oFlags flags fal 12350 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 se] ? \.. 12360 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 [appendAr 12370 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d gs \"$flags \"]
12380 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e   : "<none>"}] \n
12390 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
123a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
123b0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
123c0 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74  Show (and log) t
123d0 68 65 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63  he shared connec
123e0 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20  tion flags...
123f0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
12400 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 12410 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 12420 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 12430 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53 object invoke S 12440 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 12450 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 e.SQLiteConnecti 12460 6f 6e 20 53 68 61 72 65 64 46 6c 61 67 73 0d 0a on SharedFlags.. 12470 20 20 20 20 20 20 20 20 7d 20 73 68 61 72 65 64 } shared 12480 46 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 Flags] == 0} the 12490 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 124a0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 124b0 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 ::no(emitShared 124c0 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Flags)] && \.. 124d0 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 (![i 124e0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 124f0 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 49 emitSharedFlagsI 12500 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 fNone)] || \.. 12510 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 ![h 12520 61 73 4e 6f 46 6c 61 67 73 20 73 68 61 72 65 64 asNoFlags shared 12530 46 6c 61 67 73 20 74 72 75 65 5d 29 7d 20 74 68 Flags true])} th 12540 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 12550 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
12560 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
12570 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
12580 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 68 61         "---- sha
12590 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  red connection f
125a0 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61  lags for " $data 125b0 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 base \.. 125c0 20 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 " are: " 125d0 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 [expr {![hasNoF 125e0 6c 61 67 73 20 73 68 61 72 65 64 46 6c 61 67 73 lags sharedFlags 125f0 20 74 72 75 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 true] ? \.. 12600 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 [app 12610 65 6e 64 41 72 67 73 20 5c 22 20 24 73 68 61 72 endArgs \"$shar
12620 65 64 46 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c  edFlags \"] : "<
12630 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20  none>"}] \n]..
12640 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
12650 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
12660 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
12670 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d  o exists ::no(em
12680 69 74 53 68 61 72 65 64 46 6c 61 67 73 29 5d 20  itSharedFlags)]
12690 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
126a0 20 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 74      ![info exist
126b0 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65  s ::no(emitShare
126c0 64 46 6c 61 67 73 49 66 55 6e 61 76 61 69 6c 61  dFlagsIfUnavaila
126d0 62 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ble)]} then {..
126e0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
126f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 12700 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 12720 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e "---- shared con 12730 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f nection flags fo 12740 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d r "$database \.
12750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
12760 20 22 20 61 72 65 3a 20 3c 75 6e 61 76 61 69 6c   " are: <unavail
12770 61 62 6c 65 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20  able>\n"]..
12780 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
12790 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
127a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
127b0 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c  OTE: Show (and l
127c0 6f 67 29 20 74 68 65 20 64 65 74 65 63 74 65 64  og) the detected
127d0 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69   global connecti
127e0 6f 6e 20 66 6c 61 67 73 2c 20 69 66 20 61 6e 79  on flags, if any
127f0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
12800 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 12810 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 12820 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 12830 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 61 6c ::no(emitGlobal 12840 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Flags)] && \.. 12850 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 (![inf 12860 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d o exists ::no(em 12870 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73 49 66 4e itGlobalFlagsIfN 12880 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 one)] || \.. 12890 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f ![hasNo 128a0 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 Flags ::connecti 128b0 6f 6e 5f 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 on_flags false]) 128c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 128d0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
128e0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
128f0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
12900 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f         "---- glo
12910 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  bal connection f
12920 6c 61 67 73 20 61 72 65 3a 20 22 20 5c 0d 0a 20  lags are: " \..
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78               [ex
12940 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73  pr {![hasNoFlags
12950 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c   ::connection_fl
12960 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a  ags false] ? \..
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61                [a
12980 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 3a 3a  ppendArgs \" $:: 12990 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 connection_flags 129a0 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d \"] : "<none>"} 129b0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d ] \n].. } 129c0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 129d0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 129e0 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 TE: If there are 129f0 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 any global (per 12a00 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 test run) conne 12a10 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 ction flags curr 12a20 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 ently.. # 12a30 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 set, use th 12a40 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 em now (i.e. by 12a50 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 combining them w 12a60 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 ith the ones for 12a70 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 this.. # 12a80 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 connection) 12a90 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 12aa0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 12ab0 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f ts ::connection_ 12ac0 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a flags]} then {.. 12ad0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 12ae0 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 # NOTE: Combi 12af0 6e 65 20 61 6e 64 2f 6f 72 20 72 65 70 6c 61 63 ne and/or replac 12b00 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e e the connection 12b10 20 66 6c 61 67 73 20 61 6e 64 20 74 68 65 6e 20 flags and then 12b20 73 68 6f 77 20 74 68 65 0d 0a 20 20 20 20 20 20 show the.. 12b30 20 20 23 20 20 20 20 20 20 20 6e 65 77 20 76 61 # new va 12b40 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d lue... #. 12b50 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 6c 61 . set fla 12b60 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 73 gs [combineFlags 12b70 20 24 66 6c 61 67 73 20 24 3a 3a 63 6f 6e 6e 65$flags $::conne 12b80 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a ction_flags].... 12b90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 12ba0 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 # NOTE: Show 12bb0 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6e 65 (and log) the ne 12bc0 77 20 65 66 66 65 63 74 69 76 65 20 63 6f 6e 6e w effective conn 12bd0 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 ection flags... 12be0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 12bf0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
12c00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
12c10 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
12c20 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62  ts ::no(emitComb
12c30 69 6e 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c  inedFlags)] && \
12c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
12c50 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  (![info exists :
12c60 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64  :no(emitCombined
12c70 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c  FlagsIfNone)] ||
12c80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
12c90 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20     ![hasNoFlags
12ca0 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20 74  flags false])} t
12cb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
12cc0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 12cd0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 12ce0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 12cf0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f "---- co 12d00 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74 69 6f mbined connectio 12d10 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 n flags for "$d
12d20 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20  atabase \..
12d30 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65             " are
12d40 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73  : " [expr {![has
12d50 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61  NoFlags flags fa
12d60 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20  lse] ? \..
12d70 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e            [appen
12d80 64 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20  dArgs \" $flags 12d90 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d \"] : "<none>"}] 12da0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 12db0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 12dc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r 12dd0 65 74 75 72 6e 20 24 66 6c 61 67 73 0d 0a 20 20 eturn$flags..
12de0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
12df0 20 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74   getFlagsPropert
12e00 79 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d 20 7b  y { {flags ""} {
12e10 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
12e20 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
12e30 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d 69   # NOTE: Determi
12e40 6e 65 20 77 68 61 74 20 74 68 65 20 63 6f 6d 62  ne what the comb
12e50 69 6e 65 64 20 28 67 6c 6f 62 61 6c 20 61 6e 64  ined (global and
12e60 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 63 74 69   local) connecti
12e70 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
12e80 20 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62    flags should b
12e90 65 2c 20 70 6f 73 73 69 62 6c 79 20 71 75 69 65  e, possibly quie
12ea0 74 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  tly...      #..
12eb0 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b       set flags [
12ec0 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  getConnectionFla
12ed0 67 73 20 22 22 20 24 66 6c 61 67 73 20 24 71 75  gs "" $flags$qu
12ee0 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  iet]....      #.
12ef0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
12f00 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f 72 20 6c  f no global or l
12f10 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ocal connection
12f20 66 6c 61 67 73 20 77 65 72 65 20 73 70 65 63 69  flags were speci
12f30 66 69 65 64 2c 20 74 68 65 0d 0a 20 20 20 20 20  fied, the..
12f40 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c 74   #       default
12f50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
12f60 73 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  s should be used
12f70 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 74  ; therefore, ret
12f80 75 72 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  urn..      #
12f90 20 20 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69     an empty stri
12fa0 6e 67 20 69 6e 20 74 68 61 74 20 63 61 73 65 2e  ng in that case.
12fb0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
12fc0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
12fd0 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20 30  gth $flags] == 0 12fe0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12ff0 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 return "".. 13000 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 13010 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 13020 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63 6b n order to check 13030 20 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 if the default 13040 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags 13050 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 64 0d are being used. 13060 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 13070 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 t is necessary t 13080 6f 20 61 74 74 65 6d 70 74 20 61 20 63 6f 6e 76 o attempt a conv 13090 65 72 73 69 6f 6e 20 74 6f 20 74 68 65 20 61 63 ersion to the ac 130a0 74 75 61 6c 20 65 6e 75 6d 65 72 61 74 65 64 0d tual enumerated. 130b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 130c0 79 70 65 2e 20 20 46 61 69 6c 69 6e 67 20 74 68 ype. Failing th 130d0 61 74 2c 20 74 68 65 20 63 68 65 63 6b 20 61 67 at, the check ag 130e0 61 69 6e 73 74 20 74 68 65 20 64 65 66 61 75 6c ainst the defaul 130f0 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 0d t value will be. 13100 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 13110 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 kipped... # 13120 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 13130 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 ch {.. se 13140 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20 23 20 t error null; # 13150 49 47 4e 4f 52 45 44 0d 0a 0d 0a 20 20 20 20 20 IGNORED.... 13160 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 13170 20 55 74 69 6c 69 74 79 20 54 72 79 50 61 72 73 Utility TryPars 13180 65 46 6c 61 67 73 45 6e 75 6d 20 22 22 20 5c 0d eFlagsEnum "" \. 13190 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 . Sys 131a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 131b0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 131c0 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 20 Flags ""$flags
131d0 6e 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20 20 20  null true \..
131e0 20 20 20 20 20 20 20 20 20 74 72 75 65 20 65 72           true er
131f0 72 6f 72 0d 0a 20 20 20 20 20 20 7d 20 76 61 6c  ror..      } val
13200 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ue]} then {..
13210 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
13220 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 69  # NOTE: Attempti
13230 6e 67 20 74 6f 20 70 61 72 73 65 20 74 68 65 20  ng to parse the
13240 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
13250 20 63 61 75 73 65 64 20 61 20 73 63 72 69 70 74   caused a script
13260 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
13270 20 20 65 72 72 6f 72 2e 20 20 45 6d 69 74 20 61    error.  Emit a
13280 20 77 61 72 6e 69 6e 67 20 74 6f 20 74 68 65 20   warning to the
13290 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 20 61 6e  test log file an
132a0 64 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 20  d continue..
132b0 20 20 20 20 23 20 20 20 20 20 20 20 75 73 69 6e      #       usin
132c0 67 20 61 6e 20 65 6d 74 70 79 20 73 74 72 69 6e  g an emtpy strin
132d0 67 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20  g instead...
132e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
132f0 6c 6f 67 20 5b 61 70 70 65 6e 64 41 72 67 73 20  log [appendArgs
13300 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
13310 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
13320 69 6c 65 64 20 74 6f 20 70 61 72 73 65 20 63 6f  iled to parse co
13330 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2c 20  nnection flags,
13340 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20  error: " \..
13350 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 76 61          \n\t $va 13360 6c 75 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 lue \n].... 13370 20 20 20 73 65 74 20 76 61 6c 75 65 20 22 22 0d set value "". 13380 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 13390 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 133a0 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 62 69 6e E: If the combin 133b0 65 64 20 66 6c 61 67 73 20 73 74 72 69 6e 67 20 ed flags string 133c0 63 6f 75 6c 64 20 6e 6f 74 20 61 63 74 75 61 6c could not actual 133d0 6c 79 20 62 65 20 63 6f 6e 76 65 72 74 65 64 0d ly be converted. 133e0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 133f0 6f 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65 64 o the enumerated 13400 20 74 79 70 65 20 69 74 20 69 73 20 74 68 65 20 type it is the 13410 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 74 default value, t 13420 68 65 6e 20 6a 75 73 74 20 75 73 65 0d 0a 20 20 hen just use.. 13430 20 20 20 20 23 20 20 20 20 20 20 20 69 74 20 76 # it v 13440 65 72 62 61 74 69 6d 3b 20 6f 74 68 65 72 77 69 erbatim; otherwi 13450 73 65 2c 20 6a 75 73 74 20 72 65 74 75 72 6e 20 se, just return 13460 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 13470 20 20 49 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 In that.. 13480 20 23 20 20 20 20 20 20 20 63 61 73 65 2c 20 74 # case, t 13490 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 he default conne 134a0 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c 6c ction flags will 134b0 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 be used... 134c0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 134d0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 tring length$va
134e0 6c 75 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 76 61  lue] == 0 || $va 134f0 6c 75 65 20 6e 65 20 22 44 65 66 61 75 6c 74 22 lue ne "Default" 13500 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 13510 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 57 #.. # W 13520 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 72 65 74 ARNING: This ret 13530 75 72 6e 73 20 74 68 65 20 73 74 72 69 6e 67 20 urns the string 13540 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f 6d value of the com 13550 62 69 6e 65 64 20 66 6c 61 67 73 2c 20 6e 6f 74 bined flags, not 13560 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 13570 20 20 20 20 20 74 68 65 20 65 6e 75 6d 65 72 61 the enumera 13580 74 65 64 20 76 61 6c 75 65 2e 20 20 54 68 69 73 ted value. This 13590 20 69 73 20 62 79 20 64 65 73 69 67 6e 20 61 6e is by design an 135a0 64 20 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 d should not.. 135b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 135c0 20 62 65 20 63 68 61 6e 67 65 64 20 77 69 74 68 be changed with 135d0 6f 75 74 20 63 61 72 65 66 75 6c 20 63 6f 6e 73 out careful cons 135e0 69 64 65 72 61 74 69 6f 6e 20 28 65 2e 67 2e 20 ideration (e.g. 135f0 69 74 20 77 6f 75 6c 64 0d 0a 20 20 20 20 20 20 it would.. 13600 20 20 23 20 20 20 20 20 20 20 20 20 20 70 72 65 # pre 13610 76 65 6e 74 20 74 68 65 20 53 51 4c 69 74 65 43 vent the SQLiteC 13620 6f 6e 6e 65 63 74 69 6f 6e 20 63 6c 61 73 73 20 onnection class 13630 66 72 6f 6d 20 61 6c 6c 6f 77 69 6e 67 20 69 6e from allowing in 13640 76 61 6c 69 64 0d 0a 20 20 20 20 20 20 20 20 23 valid.. # 13650 20 20 20 20 20 20 20 20 20 20 5b 22 6d 61 67 69 ["magi 13660 63 61 6c 22 5d 20 6d 65 74 61 2d 66 6c 61 67 73 cal"] meta-flags 13670 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 13680 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 return [a 13690 70 70 65 6e 64 41 72 67 73 20 22 46 6c 61 67 73 ppendArgs "Flags 136a0 3d 22 20 24 66 6c 61 67 73 20 5c 3b 5d 0d 0a 20 ="$flags \;]..
136b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
136c0 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d  return ""..    }
136d0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e  .....    proc en
136e0 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20  ableSharedCache
136f0 7b 20 63 68 61 6e 6e 65 6c 20 65 6e 61 62 6c 65  { channel enable
13700 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d   {quiet false} }
13710 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63   {..      if {[c
13720 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
13730 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
13740 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
13750 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
13760 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
13770 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
13780 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20  thods \..
13790 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e 61       sqlite3_ena
137a0 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65  ble_shared_cache
137b0 20 5b 65 78 70 72 20 69 6e 74 28 24 65 6e 61 62   [expr int($enab 137c0 6c 65 29 5d 0d 0a 20 20 20 20 20 20 7d 20 72 65 le)].. } re 137d0 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 137e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 137f0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
13800 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
13810 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 13820 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 13830 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c "---- cal 13840 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 l sqlite3_enable 13850 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28 22 20 _shared_cache(" 13860 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20$enable \..
13870 20 20 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 6f           ")... o
13880 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d  k: " $result \n] 13890 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 138a0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 138b0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
138c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
138d0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 138e0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 138f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 13900 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 "---- call sqlit 13910 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 e3_enable_shared 13920 5f 63 61 63 68 65 28 22 20 24 65 6e 61 62 6c 65 _cache("$enable
13930 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13940 20 20 22 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22    ")... error: "
13950 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 13960 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 13970 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 13980 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 . proc setupD 13990 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 b {.. 139a0 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 fileName {mode 139b0 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f 72 ""} {dateTimeFor 139c0 6d 61 74 20 22 22 7d 20 7b 64 61 74 65 54 69 6d mat ""} {dateTim 139d0 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73 eKind ""} {flags 139e0 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 ""}.. 139f0 20 20 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 75 {extra ""} {qu 13a00 61 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 65 6c alify true} {del 13a10 65 74 65 20 74 72 75 65 7d 20 7b 75 72 69 20 66 ete true} {uri f 13a20 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 alse}.. 13a30 20 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 72 {temporary tr 13a40 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d ue} {varName db} 13a50 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d {quiet false} } 13a60 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 13a70 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 # NOTE: First 13a80 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c , see if our cal 13a90 6c 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65 ler has requeste 13aa0 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 d an in-memory d 13ab0 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 atabase... 13ac0 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d #.. set isM 13ad0 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 emory [isMemoryD 13ae0 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a b$fileName]....
13af0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
13b00 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20   NOTE: For now,
13b10 61 6c 6c 20 74 65 73 74 20 64 61 74 61 62 61 73  all test databas
13b20 65 73 20 75 73 65 64 20 62 79 20 74 68 65 20 74  es used by the t
13b30 65 73 74 20 73 75 69 74 65 20 61 72 65 20 70 6c  est suite are pl
13b40 61 63 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  aced..      #
13b50 20 20 20 20 69 6e 74 6f 20 74 68 65 20 64 61 74      into the dat
13b60 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 2e  abase directory.
13b70 20 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20    Each database
13b80 61 6e 64 20 72 65 6c 61 74 65 64 20 66 69 6c 65  and related file
13b90 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
13ba0 20 75 73 65 64 20 62 79 20 61 20 74 65 73 74 20   used by a test
13bb0 73 68 6f 75 6c 64 20 62 65 20 63 6c 65 61 6e 65  should be cleane
13bc0 64 20 75 70 20 62 79 20 74 68 61 74 20 74 65 73  d up by that tes
13bd0 74 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20  t using the..
13be0 20 20 20 23 20 20 20 20 20 20 20 22 63 6c 65 61     #       "clea
13bf0 6e 75 70 44 62 22 20 70 72 6f 63 65 64 75 72 65  nupDb" procedure
13c00 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 20  , below...
13c10 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69  #..      if {!$i 13c20 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c sMemory &&$qual
13c30 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ify} then {..
13c40 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
13c50 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65  e [file join [ge
13c60 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f  tDatabaseDirecto
13c70 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  ry] [file tail $13c80 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 fileName]].. 13c90 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 13ca0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 79 # NOTE: By 13cb0 20 64 65 66 61 75 6c 74 2c 20 64 65 6c 65 74 65 default, delete 13cc0 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e any pre-existin 13cd0 67 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20 g database with 13ce0 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 the same file.. 13cf0 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d # nam 13d00 65 20 69 66 20 69 74 20 63 75 72 72 65 6e 74 6c e if it currentl 13d10 79 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 y exists... 13d20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 #.. if {!$
13d30 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c  isMemory && $del 13d40 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 ete && [file exi 13d50 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
13d60 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
13d70 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
13d80 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65  E: Attempt to de
13d90 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69  lete any pre-exi
13da0 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77  sting database w
13db0 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c  ith the same fil
13dc0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
13dd0 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20     name...
13de0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
13df0 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65  {[catch {file de
13e00 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20  lete $fileName} 13e10 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a error]} then {.. 13e20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 13e30 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 # NOTE: W 13e40 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 e somehow failed 13e50 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 to delete the f 13e60 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e ile, report why. 13e70 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 13e80 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
13e90 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
13ea0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
13eb0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 13ec0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 13ee0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 13ef0 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 iled to delete d 13f00 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 atabase file \"" 13f10 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
13f30 22 20 64 75 72 69 6e 67 20 73 65 74 75 70 2c 20  " during setup,
13f40 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 13f50 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 13f60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 13f70 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 13f80 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 13f90 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 TE: Refer to the 13fa0 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 specified varia 13fb0 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 ble (e.g. "db") 13fc0 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f in the context o 13fd0 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 f our.. # 13fe0 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 caller. Th 13ff0 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 e handle to the 14000 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 20 opened database 14010 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 74 will be stored t 14020 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a here... #.. 14030 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
14040 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20  arName db....
14050 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
14060 54 45 3a 20 53 74 61 72 74 20 62 75 69 6c 64 69  TE: Start buildi
14070 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
14080 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 6f  n string.  The o
14090 6e 6c 79 20 72 65 71 75 69 72 65 64 20 70 6f 72  nly required por
140a0 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
140b0 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65      of the conne
140c0 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 20  ction string is
140d0 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c  the data source,
140e0 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20   which contains
140f0 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
14100 20 20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65     database file
14110 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 49   name itself.  I
14120 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e  f our caller wan
14130 74 73 20 74 6f 20 75 73 65 20 61 20 55 52 49 20  ts to use a URI
14140 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  as..      #
14150 20 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63    the data sourc
14160 65 2c 20 75 73 65 20 74 68 65 20 46 75 6c 6c 55  e, use the FullU
14170 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  ri connection st
14180 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20 74 6f  ring property to
14190 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
141a0 70 72 65 76 65 6e 74 20 74 68 65 20 64 61 74 61  prevent the data
141b0 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20 66   source string f
141c0 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c 65  rom being mangle
141d0 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
141e0 20 20 20 69 66 20 7b 24 75 72 69 7d 20 74 68 65     if {$uri} the 141f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 14200 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 6c connection {Ful 14210 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d lUri=${fileName}
14220 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
14230 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  {..        set c
14240 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 20  onnection {Data
14250 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d  Source=${fileNam 14260 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a e}}.. }.... 14270 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 14280 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 69 NOTE: Since thi 14290 73 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 s procedure has 142a0 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 6c no special knowl 142b0 65 64 67 65 20 6f 66 20 77 68 61 74 20 74 68 65 edge of what the 142c0 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 default.. 142d0 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 20 # setting 142e0 69 73 20 66 6f 72 20 74 68 65 20 54 6f 46 75 6c is for the ToFul 142f0 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f 6e lPath connection 14300 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 79 2c string propery, 14310 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 23 always.. # 14320 20 20 20 20 20 20 20 61 64 64 20 74 68 65 20 76 add the v 14330 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 6f alue we know abo 14340 75 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 ut to the connec 14350 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 tion string... 14360 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70 #.. app 14370 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b end connection { 14380 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 75 ;ToFullPath=${qu
14390 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20  alify}}....
143a0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
143b0 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20  : If our caller
143c0 73 70 65 63 69 66 69 65 64 20 61 20 6a 6f 75 72  specified a jour
143d0 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 68  nal mode, add th
143e0 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74  e necessary port
143f0 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
14400 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63     of the connec
14410 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e  tion string now.
14420 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
14430 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
14440 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20  gth $mode] > 0} 14450 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 14460 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f append connectio 14470 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 n {;Journal Mode 14480 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 =${mode}}..
14490 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
144a0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
144b0 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69  our caller speci
144c0 66 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 20  fied a DateTime
144d0 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 68 65 20  format, add the
144e0 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20  necessary..
144f0 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e   #       portion
14500 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   of the connecti
14510 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a  on string now...
14520 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
14530 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
14540 68 20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61  h $dateTimeForma 14550 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a t] > 0} then {.. 14560 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 append c 14570 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 onnection {;Date 14580 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 74 TimeFormat=${dat
14590 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20  eTimeFormat}}..
145a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
145b0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
145c0 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73   If our caller s
145d0 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54  pecified a DateT
145e0 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 65  imeKind, add the
145f0 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69   necessary porti
14600 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
14610 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74    of the connect
14620 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d  ion string now..
14630 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
14640 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
14650 74 68 20 24 64 61 74 65 54 69 6d 65 4b 69 6e 64  th $dateTimeKind 14660 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 14670 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f append co 14680 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 nnection {;DateT 14690 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 69 imeKind=${dateTi
146a0 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 20  meKind}}..
146b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
146c0 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75      # NOTE: Figu
146d0 72 65 20 6f 75 74 20 77 68 61 74 20 74 68 65 20  re out what the
146e0 66 69 6e 61 6c 20 66 6c 61 67 73 20 66 6f 72 20  final flags for
146f0 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  this connection
14700 6e 65 65 64 20 74 6f 20 62 65 2e 0d 0a 20 20 20  need to be...
14710 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
14720 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63  flags [getConnec
14730 74 69 6f 6e 46 6c 61 67 73 20 24 66 69 6c 65 4e  tionFlags $fileN 14740 61 6d 65 20 24 66 6c 61 67 73 20 24 71 75 69 65 ame$flags $quie 14750 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 t].... #.. 14760 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 14770 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 our caller speci 14780 66 69 65 64 20 73 6f 6d 65 20 53 51 4c 69 74 65 fied some SQLite 14790 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c ConnectionFlags, 147a0 20 61 64 64 20 74 68 65 0d 0a 20 20 20 20 20 20 add the.. 147b0 23 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 # necessar 147c0 79 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 y portion of the 147d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 147e0 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # 147f0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 14800 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 ing length$flag
14810 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  s] > 0} then {..
14820 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63          append c
14830 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c 61 67  onnection {;Flag
14840 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20 20 20  s=${flags}}.. 14850 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 14860 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 14870 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 f our caller spe 14880 63 69 66 69 65 64 20 61 6e 20 65 78 74 72 61 20 cified an extra 14890 70 61 79 6c 6f 61 64 20 74 6f 20 74 68 65 20 63 payload to the c 148a0 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 onnection.. 148b0 20 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c # string, 148c0 20 61 70 70 65 6e 64 20 69 74 20 6e 6f 77 2e 0d append it now.. 148d0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 148e0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 148f0 74 68 20 24 65 78 74 72 61 5d 20 3e 20 30 7d 20 th$extra] > 0}
14900 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
14910 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  append connectio
14920 6e 20 5c 3b 20 24 65 78 74 72 61 0d 0a 20 20 20  n \; $extra.. 14930 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 14940 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f . # NOTE: O 14950 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 pen the database 14960 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 2c connection now, 14970 20 70 6c 61 63 69 6e 67 20 74 68 65 20 6f 70 61 placing the opa 14980 71 75 65 20 68 61 6e 64 6c 65 20 76 61 6c 75 65 que handle value 14990 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 149a0 69 6e 74 6f 20 74 68 65 20 76 61 72 69 61 62 6c into the variabl 149b0 65 20 73 70 65 63 69 66 69 65 64 20 62 79 20 6f e specified by o 149c0 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 ur caller... 149d0 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 #.. set d 149e0 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 b [sql open -typ 149f0 65 20 53 51 4c 69 74 65 20 5b 73 75 62 73 74 20 e SQLite [subst 14a00 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d 0a 0d$connection]]...
14a10 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
14a20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 69 67 75 72  # NOTE: Configur
14a30 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  e the temporary
14a40 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68  directory for th
14a50 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20 64  e newly opened d
14a60 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 23  atabase..      #
14a70 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
14a80 6e 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72  n now unless our
14a90 20 63 61 6c 6c 65 72 20 66 6f 72 62 69 64 73 20   caller forbids
14aa0 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  it...      #..
14ab0 20 20 20 20 69 66 20 7b 24 74 65 6d 70 6f 72 61      if {$tempora 14ac0 72 79 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 ry && ![info exi 14ad0 73 74 73 20 3a 3a 6e 6f 28 73 65 74 54 65 6d 70 sts ::no(setTemp 14ae0 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 29 5d oraryDirectory)] 14af0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14b00 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 sql execute$d
14b10 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  b [appendArgs \.
14b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 50 52  .            "PR
14b30 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
14b40 64 69 72 65 63 74 6f 72 79 20 3d 20 5c 22 22 20  directory = \""
14b50 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72  [getTemporaryDir
14b60 65 63 74 6f 72 79 5d 20 5c 22 5c 3b 5d 0d 0a 20  ectory] \"\;]..
14b70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
14b80 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
14b90 20 50 65 72 66 6f 72 6d 20 61 6e 79 20 65 78 74   Perform any ext
14ba0 72 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  ra per-connectio
14bb0 6e 20 73 65 74 75 70 20 66 6f 72 20 74 68 65 20  n setup for the
14bc0 6e 65 77 6c 79 20 6f 70 65 6e 65 64 0d 0a 20 20  newly opened..
14bd0 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61      #       data
14be0 62 61 73 65 20 6e 6f 77 20 75 6e 6c 65 73 73 20  base now unless
14bf0 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 69  our caller forbi
14c00 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d  ds it...      #.
14c10 0a 20 20 20 20 20 20 73 65 74 20 65 78 65 63 75  .      set execu
14c20 74 65 4f 6e 53 65 74 75 70 20 5b 67 65 74 45 78  teOnSetup [getEx
14c30 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a 0d  ecuteOnSetup]...
14c40 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
14c50 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 65 63 75  ng length $execu 14c60 74 65 4f 6e 53 65 74 75 70 5d 20 3e 20 30 20 26 teOnSetup] > 0 & 14c70 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 21 & \.. ! 14c80 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 14c90 6f 28 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 o(executeOnSetup 14ca0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 14cb0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 14cc0 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 6f 6d 6d NOTE: This comm 14cd0 61 6e 64 20 6d 61 79 20 72 61 69 73 65 20 61 6e and may raise an 14ce0 20 65 72 72 6f 72 3b 20 69 66 20 73 6f 2c 20 74 error; if so, t 14cf0 68 61 74 20 69 73 20 66 69 6e 65 2c 20 61 73 0d hat is fine, as. 14d00 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 14d10 20 74 68 65 20 65 6e 63 6c 6f 73 69 6e 67 20 74 the enclosing t 14d20 65 73 74 20 77 69 6c 6c 20 74 68 65 6e 20 66 61 est will then fa 14d30 69 6c 2e 20 20 54 68 65 20 5b 73 75 62 73 74 5d il. The [subst] 14d40 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 command is.. 14d50 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 # use 14d60 64 20 6f 6e 20 74 68 65 20 53 51 4c 20 69 6e 20 d on the SQL in 14d70 63 61 73 65 20 69 74 20 6e 65 65 64 73 20 74 6f case it needs to 14d80 20 72 65 66 65 72 20 74 6f 20 73 74 61 74 65 20 refer to state 14d90 69 6e 20 6f 75 72 0d 0a 20 20 20 20 20 20 20 20 in our.. 14da0 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 2e # context. 14db0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 14dc0 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 sql execute 14dd0 20 24 64 62 20 5b 73 75 62 73 74 20 24 65 78 65$db [subst $exe 14de0 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a 20 20 cuteOnSetup].. 14df0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 14e00 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 14e10 41 6c 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 Always return th 14e20 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e e connection han 14e30 64 6c 65 20 75 70 6f 6e 20 73 75 63 63 65 73 73 dle upon success 14e40 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 14e50 20 20 72 65 74 75 72 6e 20 24 64 62 0d 0a 20 20 return$db..
14e60 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
14e70 20 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e   getDbConnection
14e80 20 7b 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20   { {varName db}
14e90 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
14ea0 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
14eb0 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
14ec0 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
14ed0 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
14ee0 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
14ef0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
14f00 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65  ler.  The handle
14f10 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
14f20 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
14f30 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20  ed via the..
14f40 20 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70    #       [setup
14f50 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68  Db] procedure sh
14f60 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74  ould be stored t
14f70 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  here...      #..
14f80 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76        upvar 1 $v 14f90 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 arName db.... 14fa0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 14fb0 54 45 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 TE: This returns 14fc0 20 74 68 65 20 41 44 4f 2e 4e 45 54 20 49 44 62 the ADO.NET IDb 14fd0 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 Connection objec 14fe0 74 20 69 6e 73 74 61 6e 63 65 20 66 6f 72 20 74 t instance for t 14ff0 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 15000 20 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 specified data 15010 62 73 65 20 68 61 6e 64 6c 65 2e 20 20 53 69 6e bse handle. Sin 15020 63 65 20 67 65 74 74 69 6e 67 20 74 68 69 73 20 ce getting this 15030 6f 62 6a 65 63 74 20 72 65 6c 69 65 73 20 75 70 object relies up 15040 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 on.. # 15050 20 20 45 61 67 6c 65 20 69 6e 74 65 72 6e 61 6c Eagle internal 15060 73 2c 20 67 72 65 61 74 20 63 61 72 65 20 73 68 s, great care sh 15070 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e 20 74 6f ould be taken to 15080 20 61 76 6f 69 64 20 64 69 73 70 6f 73 69 6e 67 avoid disposing 15090 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 of.. # 150a0 20 20 20 74 68 69 73 20 6f 62 6a 65 63 74 20 6f this object o 150b0 72 20 6f 74 68 65 72 77 69 73 65 20 70 75 74 74 r otherwise putt 150c0 69 6e 67 20 69 74 20 69 6e 74 6f 20 61 6e 20 69 ing it into an i 150d0 6e 76 61 6c 69 64 20 73 74 61 74 65 2e 0d 0a 20 nvalid state... 150e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 150f0 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 {[info exists d 15100 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 b]} then {.. 15110 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 15120 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 15130 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 15140 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f 62 6a +NonPublic -obj 15150 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 ectflags +NoDisp 15160 6f 73 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 ose -alias \.. 15170 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 65 Inte 15180 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 rpreter.GetActiv 15190 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 74 e.connections It 151a0 65 6d 20 24 64 62 0d 0a 20 20 20 20 20 20 20 20 em$db..
151b0 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20  } result] == 0}
151c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
151d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
151e0 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2c 20   NOTE: Success,
151f0 72 65 74 75 72 6e 20 74 68 65 20 6f 70 61 71 75  return the opaqu
15200 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e  e object handle.
15210 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
15220 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
15230 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 20  $result.. 15240 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 15250 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 15260 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 # NOTE: Failur 15270 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a e, report why... 15280 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 15290 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
152a0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
152b0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
152c0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
152d0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
152e0 74 6f 20 67 65 74 20 63 6f 6e 6e 65 63 74 69 6f  to get connectio
152f0 6e 20 68 61 6e 64 6c 65 20 66 6f 72 20 64 61 74  n handle for dat
15300 61 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20  abase \"" \..
15310 20 20 20 20 20 20 20 20 20 20 20 24 64 62 20 22             $db " 15320 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c \", error: " \n\ 15330 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
15340 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
15350 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
15360 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c      # NOTE: Fail
15370 75 72 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 6f  ure, return an o
15380 62 76 69 6f 75 73 6c 79 20 69 6e 76 61 6c 69 64  bviously invalid
15390 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68   opaque object h
153a0 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d  andle...      #.
153b0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22  .      return ""
153c0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
153d0 70 72 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e 65  proc freeDbConne
153e0 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65  ction { {varName
153f0 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b   connection} } {
15400 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
15410 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
15420 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
15430 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
15440 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20  connection") in
15450 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
15460 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75     context of ou
15470 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f  r caller.  The o
15480 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
15490 64 6c 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e  dle for an ADO.N
154a0 45 54 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ET..      #
154b0 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65    connection pre
154c0 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64  viously returned
154d0 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63   by [getDbConnec
154e0 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65 0d  tion] should be.
154f0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
15500 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20  tored there...
15510 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76      #..      upv
15520 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f  ar 1 $varName co 15530 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 nnection.... 15540 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 15550 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 E: Attempt to re 15560 6d 6f 76 65 20 74 68 65 20 6f 70 61 71 75 65 20 move the opaque 15570 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 72 object handle fr 15580 6f 6d 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 om the interpret 15590 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 er.. # 155a0 20 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 now. This [ob 155b0 6a 65 63 74 20 64 69 73 70 6f 73 65 5d 20 63 61 ject dispose] ca 155c0 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 ll will not actu 155d0 61 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 20 ally dispose of 155e0 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 155f0 20 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 underlying ob 15600 6a 65 63 74 20 62 65 63 61 75 73 65 20 74 68 65 ject because the 15610 20 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 +NoDispose flag 15620 20 77 61 73 20 73 65 74 20 6f 6e 20 69 74 0d 0a was set on it.. 15630 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 75 # du 15640 72 69 6e 67 20 63 72 65 61 74 69 6f 6e 20 6f 66 ring creation of 15650 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 the opaque obje 15660 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 ct handle... 15670 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 15680 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e info exists conn 15690 65 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 ection] && \.. 156a0 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b [catch { 156b0 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 24 object dispose$
156c0 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f  connection} erro
156d0 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..
156e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
156f0 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f   NOTE: We someho
15700 77 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f  w failed to remo
15710 76 65 20 74 68 65 20 68 61 6e 64 6c 65 2c 20 72  ve the handle, r
15720 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20  eport why...
15730 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
15740 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 15750 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 15760 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 15770 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 15780 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 ailed to remove 15790 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c connection handl 157a0 65 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f e \""$connectio
157b0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
157c0 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c   "\", error: " \
157d0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 157e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 157f0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 61 64 64 44 ... proc addD 15800 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f bConnection { co 15810 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d nnection {varNam 15820 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e db} } {.. 15830 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 15840 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 : Refer to the s 15850 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c pecified variabl 15860 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e e (e.g. "db") in 15870 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of 15880 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 our.. # 15890 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 caller... 158a0 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar 158b0 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 1$varName db..
158c0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
158d0 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20   # NOTE: Create
158e0 61 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d  a correctly form
158f0 61 74 74 65 64 20 6e 61 6d 65 20 66 6f 72 20 74  atted name for t
15900 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
15910 65 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20  ection to..
15920 20 23 20 20 20 20 20 20 20 62 65 20 61 64 64 65   #       be adde
15930 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6d 61  d to the list ma
15940 6e 61 67 65 64 20 62 79 20 74 68 65 20 45 61 67  naged by the Eag
15950 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  le interpreter..
15960 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
15970 73 65 74 20 64 62 20 5b 6f 62 6a 65 63 74 20 69  set db [object i
15980 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
15990 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
159a0 20 20 20 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70       Eagle._Comp
159b0 6f 6e 65 6e 74 73 2e 50 72 69 76 61 74 65 2e 46  onents.Private.F
159c0 6f 72 6d 61 74 4f 70 73 20 44 61 74 61 62 61 73  ormatOps Databas
159d0 65 4f 62 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e  eObjectName $con 159e0 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 nection \.. 159f0 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 SQLiteConne 15a00 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e ction [object in 15a10 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 voke Interpreter 15a20 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 .GetActive NextI 15a30 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a d]].... #.. 15a40 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 # NOTE: Ad 15a50 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 d the database c 15a60 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 onnection provid 15a70 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 15a80 20 74 6f 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 to the list.. 15a90 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t 15aa0 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 hose known to th 15ab0 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 e Eagle interpre 15ac0 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ter... #.. 15ad0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 15ae0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 15af0 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65 72 blic Interpreter 15b00 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 .GetActive.conne 15b10 63 74 69 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 ctions Add \.. 15b20 20 20 20 20 20 20 20 20 24 64 62 20 24 63 6f 6e$db $con 15b30 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a nection.. }.. 15b40 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 52 ... proc getR 15b50 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 owsFromDataTable 15b60 20 7b 20 64 61 74 61 54 61 62 6c 65 20 7d 20 7b { dataTable } { 15b70 0d 0a 20 20 20 20 20 20 73 65 74 20 72 6f 77 73 .. set rows 15b80 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 20 20 20 73 [list].. s 15b90 65 74 20 63 6f 75 6e 74 20 5b 24 64 61 74 61 54 et count [$dataT
15ba0 61 62 6c 65 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75  able Columns.Cou
15bb0 6e 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  nt]....      for
15bc0 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20 7b   {set index 0} {
15bd0 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d  $index <$count}
15be0 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d   {incr index} {.
15bf0 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74  .        set dat
15c00 61 43 6f 6c 75 6d 6e 20 5b 24 64 61 74 61 54 61  aColumn [$dataTa 15c10 62 6c 65 20 2d 61 6c 69 61 73 20 43 6f 6c 75 6d ble -alias Colum 15c20 6e 73 2e 67 65 74 5f 49 74 65 6d 20 24 69 6e 64 ns.get_Item$ind
15c30 65 78 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ex]..        set
15c40 20 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20 5b   names($index) [ 15c50 24 64 61 74 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75$dataColumn Colu
15c60 6d 6e 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d  mnName]..      }
15c70 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74  ....      object
15c80 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20   foreach -alias
15c90 64 61 74 61 52 6f 77 20 5b 73 65 74 20 64 61 74  dataRow [set dat
15ca0 61 52 6f 77 73 20 5b 24 64 61 74 61 54 61 62 6c  aRows [$dataTabl 15cb0 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a 20 20 20 20 e Rows]] {.. 15cc0 20 20 20 20 73 65 74 20 72 6f 77 20 5b 6c 69 73 set row [lis 15cd0 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f t].... fo 15ce0 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20 r {set index 0} 15cf0 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 {$index < $count 15d00 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b } {incr index} { 15d10 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 15d20 76 61 6c 75 65 20 5b 24 64 61 74 61 52 6f 77 20 value [$dataRow
15d30 2d 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 67  -create -alias g
15d40 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d  et_Item $index]. 15d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 15d60 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 15d70 24 76 61 6c 75 65 5d 20 3e 20 30 20 26 26 20 5c$value] > 0 && \
15d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15d90 21 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20  ![object invoke
15da0 43 6f 6e 76 65 72 74 20 49 73 44 42 4e 75 6c 6c  Convert IsDBNull
15db0 20 24 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b   $value]} then { 15dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 .. la 15dd0 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 ppend row [list 15de0 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20 5b$names($index) [ 15df0 24 76 61 6c 75 65 20 54 6f 53 74 72 69 6e 67 5d$value ToString]
15e00 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
15e10 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
15e20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b     lappend row [
15e30 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64  list $names($ind
15e40 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ex)]..
15e50 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
15e60 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
15e70 72 6f 77 73 20 24 72 6f 77 0d 0a 20 20 20 20 20  rows $row.. 15e80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 15e90 72 6e 20 24 72 6f 77 73 0d 0a 20 20 20 20 7d 0d rn$rows..    }.
15ea0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 64 75 6d  ....    proc dum
15eb0 70 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 62  pRowsFromDataTab
15ec0 6c 65 20 7b 20 63 68 61 6e 6e 65 6c 20 72 6f 77  le { channel row
15ed0 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  s } {..      set
15ee0 20 73 65 71 75 65 6e 63 65 20 31 0d 0a 0d 0a 20   sequence 1....
15ef0 20 20 20 20 20 66 6f 72 65 61 63 68 20 72 6f 77       foreach row
15f00 20 24 72 6f 77 73 20 7b 0d 0a 20 20 20 20 20 20   $rows {.. 15f10 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
15f20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
15f30 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70              [exp
15f40 72 20 7b 24 73 65 71 75 65 6e 63 65 20 3e 20 31  r {$sequence > 1 15f50 20 3f 20 22 5c 6e 22 20 3a 20 22 22 7d 5d 20 22 ? "\n" : ""}] " 15f60 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 24 73 65 71 ---- ROW #"$seq
15f70 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20  uence :\n]....
15f80 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 61        foreach pa
15f90 69 72 20 24 72 6f 77 20 7b 0d 0a 20 20 20 20 20  ir $row {.. 15fa0 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt 15fb0 68 20 24 70 61 69 72 5d 20 3e 3d 20 32 7d 20 74 h$pair] >= 2} t
15fc0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
15fd0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 15fe0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 74 l [appendArgs \t 15ff0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16000 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 [list [linde 16010 78 20 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 22 x$pair 0]] ": "
16020 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24   [list [lindex $16030 70 61 69 72 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 pair 1]] \n].. 16040 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 } elseif 16050 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69 72 {[llength$pair
16060 5d 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 1} then {..
16070 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
16080 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 16090 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20 20 ndArgs \t \.. 160a0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 [li 160b0 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 st [lindex$pair
160c0 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e   0]] ": <null>\n
160d0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  "]..          }
160e0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
160f0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 16100 65 6c 20 5c 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20 el \t<empty>\n; 16110 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 61 74 61 3f # NOTE: No data? 16120 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 16130 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 16140 20 20 20 20 69 6e 63 72 20 73 65 71 75 65 6e 63 incr sequenc 16150 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 e.. }.. 16160 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 16170 6c 65 61 6e 75 70 44 62 20 7b 20 66 69 6c 65 4e leanupDb { fileN 16180 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d ame {varName db} 16190 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 {collect true} 161a0 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 0d 0a {qualify true}.. 161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 161c0 20 20 20 20 20 7b 64 65 6c 65 74 65 20 74 72 75 {delete tru 161d0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 161e0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A 161f0 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 ttempt to force 16200 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72 all pending "gar 16210 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f bage" objects to 16220 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a be collected,.. 16230 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e # in 16240 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73 cluding SQLite s 16250 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 tatements and ba 16260 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 ckup objects; th 16270 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d is should allow. 16280 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 16290 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 he underlying da 162a0 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 tabase file to b 162b0 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 e deleted... 162c0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
162d0 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d  collect} then {.
162e0 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74  .        collect
162f0 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f  Garbage $::test_ 16300 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d channel.. } 16310 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 16320 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 # NOTE: Refer 16330 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 to the specifie 16340 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e d variable (e.g. 16350 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f "db") in the co 16360 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 ntext of our.. 16370 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c # call 16380 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 er. The handle 16390 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 to the database 163a0 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 previously opene 163b0 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20 d via the.. 163c0 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70 44 # [setupD 163d0 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f b] procedure sho 163e0 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 uld be stored th 163f0 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ere... #.. 16400 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
16410 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20  rName db....
16420 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
16430 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e  E: Close the con
16440 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64  nection to the d
16450 61 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 54 68  atabase now.  Th
16460 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20  is should allow
16470 75 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  us..      #
16480 20 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20    to delete the
16490 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62  underlying datab
164a0 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  ase file...
164b0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
164c0 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 20 26  nfo exists db] &
164d0 26 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c  & [catch {sql cl
164e0 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d  ose $db} error]} 164f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 16500 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 16510 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 TE: We somehow f 16520 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 74 ailed to close t 16530 68 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 70 he database, rep 16540 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 ort why... 16550 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 16560 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
16570 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
16580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d  ..            "=
16590 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
165a0 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 61 74  led to close dat
165b0 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 22 5c  abase \"" $db "\ 165c0 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 ", error: " \.. 165d0 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 165e0 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
165f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
16600 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
16610 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20  rst, see if our
16620 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65  caller has reque
16630 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  sted an in-memor
16640 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20  y database...
16650 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
16660 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f  isMemory [isMemo
16670 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ryDb $fileName]. 16680 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 16690 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 166a0 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74 6f the full path to 166b0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 the database fi 166c0 6c 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f le name. For no 166d0 77 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20 w, all test.. 166e0 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 # datab 166f0 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 73 74 ase files are st 16700 6f 72 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 ored in the temp 16710 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e orary directory. 16720 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 16730 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 if {!$isMemory
16740 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65  && $qualify} the 16750 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 16760 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 16770 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 join [getDatabas 16780 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c eDirectory] [fil 16790 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
167a0 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ]]..      }....
167b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
167c0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
167d0 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78  he file still ex
167e0 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ists...      #..
167f0 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65        if {!$isMe 16800 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 mory &&$delete
16810 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20  && [file exists
16820 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 16830 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 16840 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 16850 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 64 61 74 kip deleting dat 16860 61 62 61 73 65 20 66 69 6c 65 73 20 69 66 20 73 abase files if s 16870 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 omebody sets the 16880 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 global.. 16890 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c # variabl 168a0 65 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e e to prevent it. 168b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 168c0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 168d0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 exists ::no(clea 168e0 6e 75 70 44 62 46 69 6c 65 29 5d 7d 20 74 68 65 nupDbFile)]} the 168f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 16900 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 16910 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 TE: Attempt to d 16920 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 64 elete the test d 16930 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 6f 77 atabase file now 16940 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 16950 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 16960 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b et code [catch { 16970 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c file delete$fil
16980 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20  eName} error]]}
16990 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
169a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
169b0 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f     # NOTE: We so
169c0 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20  mehow failed to
169d0 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c  delete the file,
169e0 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20   report why...
169f0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
16a00 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $16a10 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 16a20 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 16a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 16a40 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 16a50 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 led to delete da 16a60 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 tabase file \"" 16a70 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
16a80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
16a90 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c   during cleanup,
16aa0 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $16ab0 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. 16ac0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 16ad0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 16ae0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 16af0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 # NOTE: Show th 16b00 61 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 at we skipped de 16b10 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e leting the file. 16b20 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 16b30 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 set cod 16b40 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e 0.... 16b50 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
16b60 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
16b70 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
16b80 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
16b90 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74  G: skipped delet
16ba0 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c  ing database fil
16bb0 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName 16bc0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16bd0 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 "\" during clea 16be0 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 nup\n"].. 16bf0 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 16c00 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 16c10 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 16c20 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 he file does not 16c30 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21 exist, success! 16c40 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 16c50 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d set code 0. 16c60 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 16c70 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a return$code..
16c80 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
16c90 6f 63 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65  oc saveEnvironme
16ca0 6e 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e 61  ntVariables { na
16cb0 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d  mes {varName ""}
16cc0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
16cd0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72       # NOTE: For
16ce0 20 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 73   each name, does
16cf0 20 74 68 65 20 6c 69 76 65 20 65 6e 76 69 72 6f   the live enviro
16d00 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 65  nment variable e
16d10 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20 20  xist?  If..
16d20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 73 61 76   #       so, sav
16d30 65 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20  e the value for
16d40 6c 61 74 65 72 3b 20 6f 74 68 65 72 77 69 73 65  later; otherwise
16d50 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20  , make sure the
16d60 73 61 76 65 64 0d 0a 20 20 20 20 20 20 23 20 20  saved..      #
16d70 20 20 20 20 20 76 61 6c 75 65 20 64 6f 65 73 20       value does
16d80 6e 6f 74 20 65 78 69 73 74 20 65 69 74 68 65 72  not exist either
16d90 2e 20 20 54 68 65 20 6c 69 76 65 20 65 6e 76 69  .  The live envi
16da0 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65  ronment variable
16db0 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
16dc0 20 41 52 45 20 4e 4f 54 20 63 68 61 6e 67 65 64   ARE NOT changed
16dd0 20 62 79 20 74 68 69 73 20 70 72 6f 63 65 64 75   by this procedu
16de0 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  re...      #..
16df0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
16e00 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d  length $varName] 16e10 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 16e20 20 20 20 20 20 20 20 73 65 74 20 76 61 72 4e 61 set varNa 16e30 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 me savedEnv.. 16e40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 75 70 }.... up 16e50 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 73 var 1$varName s
16e60 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20  avedEnv....
16e70 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 6e   foreach name $n 16e80 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 16e90 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 16ea0 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 5d 7d 20 ::env($name)]}
16eb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16ec0 20 20 73 65 74 20 73 61 76 65 64 45 6e 76 28 24    set savedEnv($16ed0 6e 61 6d 65 29 20 24 3a 3a 65 6e 76 28 24 6e 61 name)$::env($na 16ee0 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 me).. } e 16ef0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 16f00 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 unset -nocompla 16f10 69 6e 20 73 61 76 65 64 45 6e 76 28 24 6e 61 6d in savedEnv($nam
16f20 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e)..        }..
16f30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
16f40 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
16f50 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d 63 6c   This is self-cl
16f60 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f 20 73  eaning.  If no s
16f70 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  aved environment
16f80 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 0d 0a   variables now..
16f90 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78        #       ex
16fa0 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 65 20  ist, remove the
16fb0 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d  array...      #.
16fc0 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 72 61  .      if {[arra
16fd0 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e 76 5d  y size savedEnv]
16fe0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
16ff0 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f         unset -no
17000 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e  complain savedEn
17010 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  v..      }..
17020 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72  }.....    proc r
17030 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e  estoreEnvironmen
17040 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e 61 6d  tVariables { nam
17050 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20  es {varName ""}
17060 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
17070 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20      # NOTE: For
17080 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 73 20  each name, does
17090 74 68 65 20 73 61 76 65 64 20 65 6e 76 69 72 6f  the saved enviro
170a0 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 65  nment variable e
170b0 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20 20  xist?  If..
170c0 20 23 20 20 20 20 20 20 20 73 6f 2c 20 72 65 73   #       so, res
170d0 74 6f 72 65 20 74 68 65 20 73 61 76 65 64 20 76  tore the saved v
170e0 61 6c 75 65 20 61 6e 64 20 75 6e 73 65 74 20 69  alue and unset i
170f0 74 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61  t; otherwise, ma
17100 6b 65 20 73 75 72 65 0d 0a 20 20 20 20 20 20 23  ke sure..      #
17110 20 20 20 20 20 20 20 74 68 65 20 6c 69 76 65 20         the live
17120 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
17130 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78  able does not ex
17140 69 73 74 20 65 69 74 68 65 72 20 28 69 2e 65 2e  ist either (i.e.
17150 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20   it..      #
17160 20 20 20 77 61 73 20 6e 6f 74 20 73 65 74 20 74     was not set t
17170 6f 20 62 65 67 69 6e 20 77 69 74 68 29 2e 20 20  o begin with).
17180 42 6f 74 68 20 73 61 76 65 64 20 61 6e 64 20 6c  Both saved and l
17190 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 0d  ive environment.
171a0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76  .      #       v
171b0 61 72 69 61 62 6c 65 73 20 41 52 45 20 63 68 61  ariables ARE cha
171c0 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 72 6f  nged by this pro
171d0 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 23  cedure...      #
171e0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
171f0 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e  ing length $varN 17200 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ame] == 0} then 17210 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 {.. set v 17220 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d arName savedEnv. 17230 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 17240 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
17250 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20  me savedEnv....
17260 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d       foreach nam
17270 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  e $names {.. 17280 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 17290 69 73 74 73 20 73 61 76 65 64 45 6e 76 28 24 6e ists savedEnv($n
172a0 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ame)]} then {..
172b0 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65           set ::e
172c0 6e 76 28 24 6e 61 6d 65 29 20 24 73 61 76 65 64  nv($name)$saved
172d0 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20  Env($name).. 172e0 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 unset -noc 172f0 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76 omplain savedEnv 17300 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 ($name)..
17310 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
17320 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f       unset -noco
17330 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76 28 24 6e 61  mplain ::env($na 17340 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a me).. }.. 17350 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 17360 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 17370 3a 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d 63 : This is self-c 17380 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f 20 leaning. If no 17390 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e saved environmen 173a0 74 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 0d t variables now. 173b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 . # e 173c0 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 65 xist, remove the 173d0 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 23 array... # 173e0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 72 .. if {[arr 173f0 61 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e 76 ay size savedEnv 17400 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 17410 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e unset -n 17420 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 ocomplain savedE 17430 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 nv.. }.. 17440 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 17450 73 61 76 65 53 51 4c 69 74 65 43 6f 6e 6e 65 63 saveSQLiteConnec 17460 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 tionEnvironment 17470 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 {} {.. upva 17480 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 r 1 savedEnv sav 17490 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 edEnv.... s 174a0 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 aveEnvironmentVa 174b0 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d riables [list \. 174c0 0a 20 20 20 20 20 20 20 20 20 20 44 65 66 61 75 . Defau 174d0 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74 65 43 6f ltFlags_SQLiteCo 174e0 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53 51 4c 69 nnection No_SQLi 174f0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e 65 77 50 teConnectionNewP 17500 61 72 73 65 72 5d 20 5c 0d 0a 20 20 20 20 20 20 arser] \.. 17510 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 savedEnv.. 17520 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 17530 20 72 65 73 74 6f 72 65 53 51 4c 69 74 65 43 6f restoreSQLiteCo 17540 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d nnectionEnvironm 17550 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ent {} {.. 17560 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 upvar 1 savedEnv 17570 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 savedEnv.... 17580 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f restoreEnviro 17590 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b nmentVariables [ 175a0 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 list \.. 175b0 20 20 44 65 66 61 75 6c 74 46 6c 61 67 73 5f 53 DefaultFlags_S 175c0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 QLiteConnection 175d0 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 No_SQLiteConnect 175e0 69 6f 6e 4e 65 77 50 61 72 73 65 72 5d 20 5c 0d ionNewParser] \. 175f0 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 . saved 17600 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 Env.. }..... 17610 20 20 20 70 72 6f 63 20 73 61 76 65 53 51 4c 69 proc saveSQLi 17620 74 65 43 6f 6e 76 65 72 74 45 6e 76 69 72 6f 6e teConvertEnviron 17630 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 ment {} {.. 17640 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e upvar 1 savedEn 17650 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 v savedEnv.... 17660 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d saveEnvironm 17670 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 entVariables [li 17680 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 17690 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 Use_SQLiteConver 176a0 74 5f 44 65 66 61 75 6c 74 44 62 54 79 70 65 20 t_DefaultDbType 176b0 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 Use_SQLiteConver 176c0 74 5f 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d t_DefaultTypeNam 176d0 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e] \.. 176e0 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d savedEnv.. }. 176f0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 73 .... proc res 17700 74 6f 72 65 53 51 4c 69 74 65 43 6f 6e 76 65 72 toreSQLiteConver 17710 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 tEnvironment {} 17720 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 {.. upvar 1 17730 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 savedEnv savedE 17740 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73 74 nv.... rest 17750 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 oreEnvironmentVa 17760 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d riables [list \. 17770 0a 20 20 20 20 20 20 20 20 20 20 55 73 65 5f 53 . Use_S 17780 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 QLiteConvert_Def 17790 61 75 6c 74 44 62 54 79 70 65 20 55 73 65 5f 53 aultDbType Use_S 177a0 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 QLiteConvert_Def 177b0 61 75 6c 74 54 79 70 65 4e 61 6d 65 5d 20 5c 0d aultTypeName] \. 177c0 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 . saved 177d0 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 Env.. }..... 177e0 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 49 proc setupDbI 177f0 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b nterruptCallback 17800 20 7b 20 63 68 61 6e 6e 65 6c 20 6c 6f 67 20 7d { channel log } 17810 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 {.. tputs 17820 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 73$channel "---- s
17830 65 74 74 69 6e 67 20 75 70 20 64 65 62 75 67 67  etting up debugg
17840 65 72 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c  er interrupt cal
17850 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  lback... "....
17860 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
17870 0d 0a 20 20 20 20 20 20 20 20 73 61 76 65 45 6e  ..        saveEn
17880 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c  vironmentVariabl
17890 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  es [list \..
178a0 20 20 20 20 20 20 20 20 71 75 69 65 74 46 69 6e          quietFin
178b0 64 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74  dInterpreterTest
178c0 50 61 74 68 20 71 75 69 65 74 53 65 74 75 70 49  Path quietSetupI
178d0 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61  nterpreterTestPa
178e0 74 68 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  th]....        t
178f0 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry {..
17900 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
17910 4f 54 45 3a 20 50 72 65 76 65 6e 74 20 74 68 65  OTE: Prevent the
17920 20 76 65 6e 64 6f 72 20 73 63 72 69 70 74 20 66   vendor script f
17930 72 6f 6d 20 62 65 69 6e 67 20 6e 6f 69 73 79 20  rom being noisy
17940 77 68 65 6e 20 63 72 65 61 74 69 6e 67 0d 0a 20  when creating..
17950 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
17960 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e   the isolated in
17970 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
17980 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17990 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 71 75 69     set ::env(qui
179a0 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65  etFindInterprete
179b0 72 54 65 73 74 50 61 74 68 29 20 31 0d 0a 20 20  rTestPath) 1..
179c0 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e          set ::en
179d0 76 28 71 75 69 65 74 53 65 74 75 70 49 6e 74 65  v(quietSetupInte
179e0 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68 29  rpreterTestPath)
179f0 20 31 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   1....
17a00 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
17a10 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74  OTE: Make sure t
17a20 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67 67  he script debugg
17a30 65 72 20 61 6e 64 20 74 68 65 20 69 73 6f 6c 61  er and the isola
17a40 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 0d  ted interpreter.
17a50 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
17a60 20 20 20 61 72 65 20 73 65 74 75 70 20 61 6e 64     are setup and
17a70 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 2e 0d   ready for use..
17a80 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
17a90 20 20 20 20 20 20 20 20 64 65 62 75 67 20 73 65          debug se
17aa0 74 75 70 20 74 72 75 65 20 74 72 75 65 0d 0a 0d  tup true true...
17ab0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
17ac0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
17ad0 4c 6f 61 64 20 74 68 65 20 6e 65 63 65 73 73 61  Load the necessa
17ae0 72 79 20 70 61 63 6b 61 67 65 73 20 69 6e 74 6f  ry packages into
17af0 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e   the isolated in
17b00 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
17b10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17b20 20 20 20 64 65 62 75 67 20 65 76 61 6c 20 7b 0d     debug eval {.
17b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63  .            pac
17b40 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67  kage require Eag
17b50 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..
17b60 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require
17b70 45 61 67 6c 65 2e 4c 69 62 72 61 72 79 0d 0a 20  Eagle.Library..
17b80 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
17b90 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65  ge require Eagle
17ba0 2e 54 65 73 74 0d 0a 20 20 20 20 20 20 20 20 20  .Test..
17bb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
17bc0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
17bd0 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 6e 65  OTE: Copy the ne
17be0 63 65 73 73 61 72 79 20 76 61 72 69 61 62 6c 65  cessary variable
17bf0 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61  s into the isola
17c00 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e  ted interpreter.
17c10 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
17c20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69           debug i
17c30 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65  nvoke 0 set ::te
17c40 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 61 6e  st_channel $chan 17c50 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 nel; # NOTE: For 17c60 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20 20 20 [tputs]... 17c70 20 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b debug invok 17c80 65 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c e 0 set ::test_l 17c90 6f 67 20 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a og$log; # NOTE:
17ca0 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a   For [tlog].....
17cb0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
17cc0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
17cd0 6e 73 74 61 6c 6c 20 74 68 65 20 63 61 6c 6c 62  nstall the callb
17ce0 61 63 6b 20 73 63 72 69 70 74 20 74 6f 20 62 65  ack script to be
17cf0 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68   evaluated in th
17d00 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20 20 20 20  e isolated..
17d10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
17d20 74 65 72 70 72 65 74 65 72 20 77 68 65 6e 20 74  terpreter when t
17d30 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 20  his interpreter
17d40 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 20 62  is interrupted b
17d50 79 20 73 63 72 69 70 74 0d 0a 20 20 20 20 20 20  y script..
17d60 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6e 63      #       canc
17d70 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 63 2e 0d 0a  ellation, etc...
17d80 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
17d90 20 20 20 20 20 20 20 64 65 62 75 67 20 63 61 6c         debug cal
17da0 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b 7b 73 65  lback apply {{se
17db0 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 20 20 20  nder e} {..
17dc0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17dd0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
17de0 65 63 6b 20 69 66 20 74 68 69 73 20 64 65 62 75  eck if this debu
17df0 67 67 65 72 20 63 61 6c 6c 62 61 63 6b 20 69 73  gger callback is
17e00 20 6f 6e 65 20 74 68 61 74 20 77 65 20 63 61 72   one that we car
17e10 65 20 61 62 6f 75 74 2e 0d 0a 20 20 20 20 20 20  e about...
17e20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17e30 20 20 20 20 20 73 65 74 20 69 6e 74 65 72 72 75       set interru
17e40 70 74 54 79 70 65 73 20 5b 73 70 6c 69 74 20 5b  ptTypes [split [
17e50 24 65 20 49 6e 74 65 72 72 75 70 74 54 79 70 65  $e InterruptType 17e60 5d 20 22 2c 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 ] ", "].... 17e70 20 20 20 20 20 20 20 69 66 20 7b 22 43 61 6e 63 if {"Canc 17e80 65 6c 65 64 22 20 69 6e 20 24 69 6e 74 65 72 72 eled" in$interr
17e90 75 70 74 54 79 70 65 73 20 7c 7c 20 5c 0d 0a 20  uptTypes || \..
17ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17eb0 55 6e 77 6f 75 6e 64 22 20 69 6e 20 24 69 6e 74  Unwound" in $int 17ec0 65 72 72 75 70 74 54 79 70 65 73 7d 20 74 68 65 erruptTypes} the 17ed0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 17ee0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 17ef0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 # NOTE: Make 17f00 20 73 75 72 65 20 74 68 65 20 5b 6f 62 6a 65 63 sure the [objec 17f10 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 76 t] command is av 17f20 61 69 6c 61 62 6c 65 2e 20 20 53 69 6e 63 65 0d ailable. Since. 17f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 17f40 20 20 20 20 20 20 20 74 68 69 73 20 69 73 20 61 this is a 17f50 6e 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 n isolated inter 17f60 70 72 65 74 65 72 2c 20 63 68 65 63 6b 20 66 6f preter, check fo 17f70 72 20 69 74 20 74 68 65 20 68 61 72 64 0d 0a 20 r it the hard.. 17f80 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 17f90 20 20 20 20 20 77 61 79 2e 0d 0a 20 20 20 20 20 way... 17fa0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 17fb0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c if {[l 17fc0 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d length [info com 17fd0 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d 5d 20 3e mands object]] > 17fe0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 17ff0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 # 18010 20 4e 4f 54 45 3a 20 49 74 65 72 61 74 65 20 74 NOTE: Iterate t 18020 68 72 6f 75 67 68 20 61 6c 6c 20 64 61 74 61 62 hrough all datab 18030 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 ase connections 18040 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 0d 0a 20 20 known to the.. 18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 18060 20 20 20 20 20 20 70 61 72 65 6e 74 20 69 6e 74 parent int 18070 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 erpreter... 18080 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 18090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob 180a0 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c ject foreach -al 180b0 69 61 73 20 70 61 69 72 20 5b 6f 62 6a 65 63 74 ias pair [object 180c0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 180d0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 180f0 20 24 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e$e Interpreter.
18100 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a  connections] {..
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18120 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
18130 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
18140 74 74 65 6d 70 74 20 74 6f 20 63 61 6e 63 65 6c  ttempt to cancel
18150 20 61 6e 79 20 53 51 4c 20 71 75 65 72 69 65 73   any SQL queries
18160 20 69 6e 20 70 72 6f 67 72 65 73 73 20 6f 6e 0d   in progress on.
18170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18180 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20     #       this
18190 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
181a0 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ion...
181b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
181d0 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 72 20 56  {[catch {$pair V 181e0 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20 65 72 72 alue.Cancel} err 181f0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18210 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
18220 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
18230 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20  gs \n \..
18240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18250 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
18260 66 61 69 6c 65 64 20 74 6f 20 63 61 6e 63 65 6c  failed to cancel
18270 20 71 75 65 72 79 20 66 6f 72 20 22 20 5c 0d 0a   query for " \..
18280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18290 20 20 20 20 20 20 20 20 22 63 6f 6e 6e 65 63 74          "connect
182a0 69 6f 6e 20 5c 22 22 20 5b 24 70 61 69 72 20 4b  ion \"" [$pair K 182b0 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 ey] "\", error: 182c0 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20 20 20 20 " \n\t \.. 182d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 182e0 20 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20$error \n]..
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18300 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
18310 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
18320 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
18340 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 18350 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 18360 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 \n \.. 18370 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 18380 57 41 52 4e 49 4e 47 3a 20 63 61 6e 6e 6f 74 20 WARNING: cannot 18390 63 61 6e 63 65 6c 20 61 6e 79 20 71 75 65 72 69 cancel any queri 183a0 65 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 es: " \.. 183b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 74 68 "th 183c0 65 20 5c 22 6f 62 6a 65 63 74 5c 22 20 63 6f 6d e \"object\" com 183d0 6d 61 6e 64 20 69 73 20 6e 6f 74 20 61 76 61 69 mand is not avai 183e0 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 lable\n"].. 183f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 18400 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 18410 20 20 20 20 20 7d 7d 0d 0a 20 20 20 20 20 20 20 }}.. 18420 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 } finally {.. 18430 20 20 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 restoreE 18440 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 nvironmentVariab 18450 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 les [list \.. 18460 20 20 20 20 20 20 20 20 20 20 20 71 75 69 65 74 quiet 18470 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65 72 54 FindInterpreterT 18480 65 73 74 50 61 74 68 20 71 75 69 65 74 53 65 74 estPath quietSet 18490 75 70 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 upInterpreterTes 184a0 74 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 20 20 tPath].. 184b0 7d 0d 0a 20 20 20 20 20 20 7d 20 65 72 72 6f 72 }.. } error 184c0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 184d0 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 184e0 72 61 69 6e 74 20 69 6e 74 65 72 72 75 70 74 43 raint interruptC 184f0 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 74 65 33 0d allback.sqlite3. 18500 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs 18510 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d$channel yes\n.
18520 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
18530 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $18540 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 18550 72 67 73 20 22 6e 6f 2c 20 65 72 72 6f 72 3a 20 rgs "no, error: 18560 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e " \n\t$error \n
18570 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
18580 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
18590 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20 66 69 6c  leanupFile { fil
185a0 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63 74 20 74  eName {collect t
185b0 72 75 65 7d 20 7b 66 6f 72 63 65 20 66 61 6c 73  rue} {force fals
185c0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
185d0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
185e0 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20  ttempt to force
185f0 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72  all pending "gar
18600 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f  bage" objects to
18610 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a   be collected,..
18620 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
18630 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73  cluding SQLite s
18640 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61  tatements and ba
18650 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68  ckup objects; th
18660 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d  is should allow.
18670 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
18680 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61  he underlying da
18690 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
186a0 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20  e deleted...
186b0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24    #..      if {$186c0 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d collect} then {. 186d0 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 . collect 186e0 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f Garbage$::test_
186f0 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d  channel..      }
18700 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
18710 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
18720 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69   if the file sti
18730 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20  ll exists...
18740 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
18750 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 18760 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 18770 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 18780 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 18790 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69 deleting test fi 187a0 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 les if somebody 187b0 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61 6c 20 sets the global 187c0 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 variable.. 187d0 20 20 23 20 20 20 20 20 20 20 74 6f 20 70 72 65 # to pre 187e0 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 vent it... 187f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 18800 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69 6e 66 {$force || ![inf
18810 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c  o exists ::no(cl
18820 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20 74 68 65  eanupFile)]} the
18830 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
18840 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
18850 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64  TE: Attempt to d
18860 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 66  elete the test f
18870 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ile now...
18880 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
18890 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b   if {[set code [
188a0 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
188b0 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72  te $fileName} er 188c0 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ror]]} then {.. 188d0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 188e0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 188f0 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 : We somehow fai 18900 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 led to delete th 18910 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 e file, report w 18920 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 hy... 18930 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 18940 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
18950 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
18960 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
18970 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
18980 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65  NG: failed to de
18990 6c 65 74 65 20 74 65 73 74 20 66 69 6c 65 20 5c  lete test file \
189a0 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a  "" $fileName \.. 189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 189c0 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e "\" during clean 189d0 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c up, error: " \n\ 189e0 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
189f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
18a00 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
18a10 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18a20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
18a30 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 64   that we skipped
18a40 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69   deleting the fi
18a50 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  le...          #
18a60 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
18a70 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20  code 0....
18a80 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 18a90 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 18aa0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 18ab0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 18ac0 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 NING: skipped de 18ad0 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69 6c 65 leting test file 18ae0 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
18af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18b00 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e  "\" during clean
18b10 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  up\n"]..
18b20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
18b30 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
18b40 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
18b50 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20  e file does not
18b60 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21 0d  exist, success!.
18b70 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
18b80 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a      set code 0..
18b90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
18ba0 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20   return $code.. 18bb0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 18bc0 63 20 63 6c 65 61 6e 75 70 4d 65 6d 6f 72 79 20 c cleanupMemory 18bd0 7b 20 76 61 72 4e 61 6d 65 20 7b 71 75 69 65 74 { varName {quiet 18be0 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 18bf0 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 18c00 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 18c10 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 18c20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 18c30 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74$varName] > 0} t
18c40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
18c50 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
18c60 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73  : Refer to the s
18c70 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c  pecified variabl
18c80 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 74  e (e.g. "connect
18c90 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d 0a 20 20  ion") in the..
18ca0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
18cb0 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c  ntext of our cal
18cc0 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71 75 65  ler.  The opaque
18cd0 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66   object handle f
18ce0 6f 72 20 61 6e 0d 0a 20 20 20 20 20 20 20 20 23  or an..        #
18cf0 20 20 20 20 20 20 20 41 44 4f 2e 4e 45 54 20 63         ADO.NET c
18d00 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f  onnection previo
18d10 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62 79  usly returned by
18d20 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f   [getDbConnectio
18d30 6e 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n]..        #
18d40 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 73 74      should be st
18d50 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20  ored there...
18d60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
18d70 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 18d80 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 connection.... 18d90 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 18da0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o 18db0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f bject invoke$co
18dc0 6e 6e 65 63 74 69 6f 6e 20 52 65 6c 65 61 73 65  nnection Release
18dd0 4d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  Memory..
18de0 7d 20 72 65 73 75 6c 74 5d 7d 20 74 68 65 6e 20  } result]} then
18df0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
18e00 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 18e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 18e20 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
18e30 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
18e40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
18e50 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
18e60 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6c 65  : failed to rele
18e70 61 73 65 20 64 61 74 61 62 61 73 65 20 6d 65 6d  ase database mem
18e80 6f 72 79 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d  ory, error: " \.
18e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18ea0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 18eb0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 18ec0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 18ed0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 18ee0 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 [llength [info c 18ef0 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 5d 5d 20 ommands debug]] 18f00 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 18f10 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 18f20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c {.. upl 18f30 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 evel 1 [list deb 18f40 75 67 20 70 75 72 67 65 5d 0d 0a 20 20 20 20 20 ug purge].. 18f50 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 68 } result]} th 18f60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 18f70 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
18f80 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
18f90 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 18fa0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 18fb0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 18fc0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 18fd0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 70 ING: failed to p 18fe0 75 72 67 65 20 63 61 6c 6c 20 66 72 61 6d 65 2c urge call frame, 18ff0 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 error: " \.. 19000 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c \n\ 19010 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
19020 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
19030 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
19040 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
19050 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c           uplevel
19060 20 31 20 5b 6c 69 73 74 20 64 65 62 75 67 20 63   1 [list debug c
19070 6c 65 61 6e 75 70 5d 0d 0a 20 20 20 20 20 20 20  leanup]..
19080 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 68 65 6e   } result]} then
19090 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
190a0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 190b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 190c0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
190d0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
190e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
190f0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
19100 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 65  G: failed to cle
19110 61 6e 75 70 20 69 6e 74 65 72 70 72 65 74 65 72  anup interpreter
19120 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20  , error: " \..
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e                \n
19140 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 19150 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 19160 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 19170 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 19180 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 upleve 19190 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 75 67 20 l 1 [list debug 191a0 63 6f 6c 6c 65 63 74 5d 0d 0a 20 20 20 20 20 20 collect].. 191b0 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 68 65 } result]} the 191c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 191d0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
191e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
191f0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 19200 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 19210 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 19220 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 19230 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6f NG: failed to co 19240 6c 6c 65 63 74 20 67 61 72 62 61 67 65 2c 20 65 llect garbage, e 19250 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 rror: " \.. 19260 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 19270 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
19280 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
19290 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
192a0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
192b0 20 73 65 74 75 70 4d 65 6d 6f 72 79 43 6f 75 6e   setupMemoryCoun
192c0 74 65 72 73 20 7b 20 76 61 72 4e 61 6d 65 20 7d  ters { varName }
192d0 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68   {..      if {[h
192e0 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  aveSQLiteObjectC
192f0 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d  ommand]} then {.
19300 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31  .        upvar 1
19310 20 24 76 61 72 4e 61 6d 65 20 63 6f 75 6e 74 65   $varName counte 19320 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 r.... set 19330 20 63 6f 75 6e 74 65 72 28 31 29 20 5b 6f 62 6a counter(1) [obj 19340 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 ect create -alia 19350 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 19360 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 System.Diagnost 19370 69 63 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 ics.PerformanceC 19380 6f 75 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c ounter Process \ 19390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 57 .. "W 193a0 6f 72 6b 69 6e 67 20 53 65 74 22 20 5b 66 69 6c orking Set" [fil 193b0 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 e rootname [file 193c0 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c tail$::bin_fil
193d0 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e]]]....
193e0 73 65 74 20 63 6f 75 6e 74 65 72 28 32 29 20 5b  set counter(2) [
193f0 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61  object create -a
19400 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  lias \..
19410 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e      System.Diagn
19420 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61 6e  ostics.Performan
19430 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65 73  ceCounter Proces
19440 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
19450 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 20 50 65   "Working Set Pe
19460 61 6b 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61  ak" [file rootna
19470 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a  me [file tail $: 19480 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a :bin_file]]].... 19490 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e set coun 194a0 74 65 72 28 33 29 20 5b 6f 62 6a 65 63 74 20 63 ter(3) [object c 194b0 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a reate -alias \.. 194c0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 194d0 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 em.Diagnostics.P 194e0 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65 erformanceCounte 194f0 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20 r Process \.. 19500 20 20 20 20 20 20 20 20 20 22 50 72 69 76 61 74 "Privat 19510 65 20 42 79 74 65 73 22 20 5b 66 69 6c 65 20 72 e Bytes" [file r 19520 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 ootname [file ta 19530 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d il$::bin_file]]
19540 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
19550 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
19560 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
19570 63 20 72 65 70 6f 72 74 4d 65 6d 6f 72 79 43 6f  c reportMemoryCo
19580 75 6e 74 65 72 73 20 7b 20 63 68 61 6e 6e 65 6c  unters { channel
19590 20 76 61 72 4e 61 6d 65 20 70 72 65 66 69 78 20   varName prefix
195a0 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
195b0 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
195c0 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b  Command]} then {
195d0 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 20  ..        upvar
195e0 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 75 6e 74  1 $varName count 195f0 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 er.... tp 19600 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
19610 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
19620 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 22 20          "---- "
19630 24 70 72 65 66 69 78 20 22 20 63 6f 75 6e 74 65  $prefix " counte 19640 72 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 r \"" \.. 19650 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 [object inv 19660 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 31 29 20 oke$counter(1)
19670 43 6f 75 6e 74 65 72 4e 61 6d 65 5d 20 22 5c 22  CounterName] "\"
19680 20 76 61 6c 75 65 20 69 73 20 22 20 5c 0d 0a 20   value is " \..
19690 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65             [obje
196a0 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74  ct invoke $count 196b0 65 72 28 31 29 20 52 61 77 56 61 6c 75 65 5d 20 er(1) RawValue] 196c0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 \n].... t 196d0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
196e0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
196f0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 22           "---- "
19700 20 24 70 72 65 66 69 78 20 22 20 63 6f 75 6e 74   $prefix " count 19710 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 er \"" \.. 19720 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e [object in 19730 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 32 29 voke$counter(2)
19740 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d 20 22 5c   CounterName] "\
19750 22 20 76 61 6c 75 65 20 69 73 20 22 20 5c 0d 0a  " value is " \..
19760 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a              [obj
19770 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e  ect invoke $coun 19780 74 65 72 28 32 29 20 52 61 77 56 61 6c 75 65 5d ter(2) RawValue] 19790 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n].... 197a0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
197b0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
197c0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
197d0 22 20 24 70 72 65 66 69 78 20 22 20 63 6f 75 6e  " $prefix " coun 197e0 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ter \"" \.. 197f0 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 [object i 19800 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 33 nvoke$counter(3
19810 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d 20 22  ) CounterName] "
19820 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 5c 0d  \" value is " \.
19830 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62  .            [ob
19840 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75  ject invoke $cou 19850 6e 74 65 72 28 33 29 20 52 61 77 56 61 6c 75 65 nter(3) RawValue 19860 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ] \n].. }.. 19870 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 19880 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 oc collectGarbag 19890 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 6d 69 6c e { channel {mil 198a0 6c 69 73 65 63 6f 6e 64 73 20 31 30 30 30 7d 20 liseconds 1000} 198b0 7b 71 75 69 65 74 20 74 72 75 65 7d 20 7d 20 7b {quiet true} } { 198c0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 198d0 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 198e0 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mand]} then {.. 198f0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 19900 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o 19910 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 bject invoke GC 19920 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 GetTotalMemory f 19930 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 alse.. } 19940 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 19950 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19960 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
19970 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
19980 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 19990 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 199b0 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 ---- memory in u 199c0 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 62 65 se by the CLR be 199d0 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e fore collection. 199e0 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 .. " \.. 199f0 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20$result
19a00 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20  " bytes\n"]..
19a10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
19a20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
19a30 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 19a40 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 19a50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19a60 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 19a70 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 failed to get C 19a80 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c LR memory usage, 19a90 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 error: " \.. 19aa0 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 19ab0 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
19ac0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
19ad0 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23 23 23  ...      #######
19ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19af0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19b20 23 23 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ##....      #..
19b30 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70       # NOTE: Rep
19b40 65 61 74 65 64 6c 79 20 61 74 74 65 6d 70 74 20  eatedly attempt
19b50 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61  to collect garba
19b60 67 65 20 75 6e 74 69 6c 20 74 68 65 20 61 6c 6c  ge until the all
19b70 6f 74 74 65 64 20 6e 75 6d 62 65 72 0d 0a 20 20  otted number..
19b80 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 6d      #       of m
19b90 69 6c 6c 69 73 65 63 6f 6e 64 73 20 68 61 73 20  illiseconds has
19ba0 65 6c 61 70 73 65 64 2e 20 20 41 6c 77 61 79 73  elapsed.  Always
19bb0 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c   attempt to coll
19bc0 65 63 74 20 67 61 72 62 61 67 65 0d 0a 20 20 20  ect garbage..
19bd0 20 20 20 23 20 20 20 20 20 20 20 61 74 20 6c 65     #       at le
19be0 61 73 74 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20  ast once...
19bf0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68   #..      if {[h
19c00 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  aveSQLiteObjectC
19c10 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d  ommand]} then {.
19c20 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 74 61  .        set sta
19c30 72 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64  rt [clock second
19c40 73 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  s]..        set
19c50 73 74 6f 70 20 5b 65 78 70 72 20 7b 24 73 74 61  stop [expr {$sta 19c60 72 74 20 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f rt + ($milliseco
19c70 6e 64 73 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d  nds / 1000)}]...
19c80 0a 20 20 20 20 20 20 20 20 64 6f 20 7b 0d 0a 20  .        do {..
19c90 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
19ca0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
19cb0 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61  tempt to force a
19cc0 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f   full garbage co
19cd0 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52  llection now.  R
19ce0 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20 20 20 20  eport any..
19cf0 20 20 20 20 20 23 20 20 20 20 20 20 20 65 72 72       #       err
19d00 6f 72 20 74 68 61 74 20 69 73 20 65 6e 63 6f 75  or that is encou
19d10 6e 74 65 72 65 64 20 69 66 20 77 65 20 66 61 69  ntered if we fai
19d20 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  l...          #.
19d30 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
19d40 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
19d50 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
19d60 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65  ke GC GetTotalMe
19d70 6d 6f 72 79 20 74 72 75 65 0d 0a 20 20 20 20 20  mory true..
19d80 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74       } error]} t
19d90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19da0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 19db0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 19dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 19dd0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 19de0 66 61 69 6c 65 64 20 66 75 6c 6c 20 67 61 72 62 failed full garb 19df0 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 age collection, 19e00 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 error: " \.. 19e10 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 \n\t 19e20 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
19e30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
19e40 20 20 20 20 20 20 73 65 74 20 6e 6f 77 20 5b 63        set now [c
19e50 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20  lock seconds]..
19e60 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20 7b         } while {
19e70 24 73 74 61 72 74 20 3c 3d 20 24 6e 6f 77 20 26  $start <=$now &
19e80 26 20 24 6e 6f 77 20 3c 20 24 73 74 6f 70 7d 0d  & $now <$stop}.
19e90 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
19ea0 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
19eb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ec0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ed0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
19ee0 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20  ###########....
19ef0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
19f00 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
19f10 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
19f20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
19f30 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
19f40 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74  ct invoke GC Get
19f50 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73  TotalMemory fals
19f60 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73  e..        } res
19f70 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ult] == 0} then
19f80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
19f90 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 19fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 19fb0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
19fc0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
19fe0 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  - memory in use
19ff0 62 79 20 74 68 65 20 43 4c 52 20 61 66 74 65 72  by the CLR after
1a000 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22   collection... "
1a010 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1a020 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79      $result " by 1a030 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 tes\n"].. 1a040 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 1a050 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1a060 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1a070 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
1a090 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
1a0a0 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d  led to get CLR m
1a0b0 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72  emory usage, err
1a0c0 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
1a0d0 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73         \n\t $res 1a0e0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 1a0f0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. }.. 1a100 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1a110 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 getSQLiteHandleC 1a120 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e 65 6c 20 ounts { channel 1a130 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 {quiet false} } 1a140 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 {.. set res 1a150 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 ult [list].... 1a160 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c if {[haveSQL 1a170 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand 1a180 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1a190 20 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 [haveSQLiteDef 1a1a0 69 6e 65 43 6f 6e 73 74 61 6e 74 20 43 4f 55 4e ineConstant COUN 1a1b0 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 T_HANDLE]} then 1a1c0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 1a1d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 # NOTE: Ad 1a1e0 64 20 65 61 63 68 20 63 72 69 74 69 63 61 6c 20 d each critical 1a1f0 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20 handle count to 1a200 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 69 the resulting li 1a210 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a st... #.. 1a220 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1a230 6e 61 6d 65 20 5b 6c 69 73 74 20 63 6f 6e 6e 65 name [list conne 1a240 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65 ctionCount state 1a250 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 70 mentCount backup 1a260 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 20 Count] {.. 1a270 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1a280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob 1a290 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 1a2a0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 1a2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1a2c0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 1a2d0 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 24 6e ite.DebugData$n
1a2e0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ame..          }
1a2f0 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68   value] == 0} th
1a300 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1a310 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1a320 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1a330 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1a340 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1a350 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1a360 20 20 20 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69       "---- criti
1a370 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74  cal handle count
1a380 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 69   \"" $name "\" i 1a390 73 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a s "$value \n]..
1a3a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1a3b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70  .            lap
1a3c0 70 65 6e 64 20 72 65 73 75 6c 74 20 24 76 61 6c  pend result $val 1a3d0 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 ue.. } 1a3e0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1a3f0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1a400 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1a410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1a420 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
1a430 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 63   failed to get c
1a440 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63  ritical handle c
1a450 6f 75 6e 74 20 5c 22 22 20 5c 0d 0a 20 20 20 20  ount \"" \..
1a460 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d              $nam 1a470 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 e "\", error: " 1a480 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d 0d \n\t$value \n].
1a490 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1a4a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
1a4b0 20 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65 74   elseif {!$quiet 1a4c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a4d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1a4e0 4f 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c 20 OTE: The actual 1a4f0 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 handle counts ar 1a500 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b e not available; 1a510 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 therefore, just 1a520 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1a530 20 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 return an empt 1a540 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 y list... 1a550 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 1a560 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
1a570 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65   critical handle
1a580 20 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c 61   counts unavaila
1a590 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d  ble\n"..      }.
1a5a0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
1a5b0 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a  $result.. }.. 1a5c0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75 74 ... proc shut 1a5d0 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 downSQLite { cha 1a5e0 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 nnel {force fals 1a5f0 65 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d e} {quiet false} 1a600 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 1a610 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b # NOTE: Mak 1a620 65 20 73 75 72 65 20 74 68 61 74 20 53 51 4c 69 e sure that SQLi 1a630 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 1a640 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 is completely sh 1a650 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 utdown. This.. 1a660 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is 1a670 75 73 65 64 20 62 79 20 74 65 73 74 73 20 74 68 used by tests th 1a680 61 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 at change config 1a690 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 uration options 1a6a0 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 and/or those.. 1a6b0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 # that 1a6c0 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 need to make su 1a6d0 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e re logging is in 1a6e0 69 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 itialized (i.e. 1a6f0 6a 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 just in case.. 1a700 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 1a710 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 1a720 61 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c 69 ary was initiali 1a730 7a 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63 65 zed in the proce 1a740 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 ss prior to.. 1a750 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 # the S 1a760 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 QLiteLog class b 1a770 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 74 eing able to set 1a780 75 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 up its logging c 1a790 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 allback)... 1a7a0 20 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c # Normall 1a7b0 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 6f y, this should o 1a7c0 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 nly be performed 1a7d0 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f if SQLite is lo 1a7e0 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 aded and.. 1a7f0 23 20 20 20 20 20 20 20 72 65 61 64 79 20 66 6f # ready fo 1a800 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 r use by the tes 1a810 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... 1a820 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66 6f #.. if {$fo
1a830 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65  rce || [isSQLite
1a840 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Ready]} then {..
1a850 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1a860 20 20 20 23 20 42 55 47 46 49 58 3a 20 4d 61 6b     # BUGFIX: Mak
1a870 65 20 73 75 72 65 20 74 68 61 74 20 61 6e 79 20  e sure that any
1a880 22 6c 65 61 6b 65 64 22 20 74 72 61 6e 73 61 63  "leaked" transac
1a890 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6e  tions and/or con
1a8a0 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  nections..
1a8b0 20 20 23 20 20 20 20 20 20 20 20 20 61 72 65 20    #         are
1a8c0 63 6c 65 61 6e 65 64 20 75 70 20 62 65 66 6f 72  cleaned up befor
1a8d0 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61  e calling the na
1a8e0 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75  tive shutdown fu
1a8f0 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  nction...
1a900 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65   #..        fore
1a910 61 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ach transaction
1a920 5b 69 6e 66 6f 20 74 72 61 6e 73 61 63 74 69 6f  [info transactio
1a930 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ns] {..
1a940 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74   if {[string mat
1a950 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ch \..
1a960 20 20 20 20 53 79 73 74 65 6d 23 44 61 74 61 23      System#Data#
1a970 53 51 4c 69 74 65 23 53 51 4c 69 74 65 54 72 61  SQLite#SQLiteTra
1a980 6e 73 61 63 74 69 6f 6e 23 2a 20 24 74 72 61 6e  nsaction#* $tran 1a990 73 61 63 74 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b saction]} then { 1a9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1a9b0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1a9c0 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 74 72 sql tr 1a9d0 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 ansaction rollba 1a9e0 63 6b 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d ck$transaction.
1a9f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
1aa00 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  rror] == 0} then
1aa10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1aa20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1aa30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1aa40 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1aa50 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1aa60 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1aa70 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72           "---- r
1aa80 6f 6c 6c 65 64 20 62 61 63 6b 20 6c 65 61 6b 65  olled back leake
1aa90 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22  d transaction \"
1aaa0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1aab0 20 20 20 20 20 20 20 20 20 24 74 72 61 6e 73 61           $transa 1aac0 63 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 20 ction \"\n].. 1aad0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1aae0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1aaf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1ab00 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1ab10 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1ab20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1ab30 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1ab40 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1ab50 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1ab60 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1ab70 6f 20 72 6f 6c 6c 62 61 63 6b 20 6c 65 61 6b 65 o rollback leake 1ab80 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 d transaction \" 1ab90 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1aba0 20 20 20 20 20 20 20 20 20 24 74 72 61 6e 73 61$transa
1abb0 63 74 69 6f 6e 20 22 5c 22 2c 20 65 72 72 6f 72  ction "\", error
1abc0 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 1abd0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 1abe0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1abf0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 1ac00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 1ac10 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 foreach d 1ac20 62 20 5b 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 69 b [info connecti 1ac30 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 ons] {.. 1ac40 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 if {[string ma 1ac50 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 tch \.. 1ac60 20 20 20 20 20 53 79 73 74 65 6d 23 44 61 74 61 System#Data 1ac70 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65 43 6f #SQLite#SQLiteCo 1ac80 6e 6e 65 63 74 69 6f 6e 23 2a 20 24 64 62 5d 7d nnection#*$db]}
1ac90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1aca0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1acb0 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20  {sql close $db} 1acc0 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 error] == 0} the 1acd0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1ace0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1acf0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1ad00 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1ad10 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1ad20 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1ad30 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1ad40 63 6c 6f 73 65 64 20 6c 65 61 6b 65 64 20 64 61 closed leaked da 1ad50 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 5c tabase \""$db \
1ad60 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
1ad70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1ad80 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1ad90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
1ada0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1adb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1adc0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1add0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1adf0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
1ae00 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65   failed to close
1ae10 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61 73 65   leaked database
1ae20 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62 20              $db 1ae40 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "\", error: " \n 1ae50 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1ae80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1ae90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1aea0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55   #..        # BU
1aeb0 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 61 6c  GFIX: Before cal
1aec0 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20  ling the native
1aed0 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f  shutdown functio
1aee0 6e 2c 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 74  n, make sure bot
1aef0 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  h..        #
1af00 20 20 20 20 20 6f 66 20 74 68 65 20 50 52 41 47       of the PRAG
1af10 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 63  MA related direc
1af20 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66  tory names are f
1af30 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  reed...        #
1af40 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
1af50 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72  orSQLiteDirector
1af60 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 75  ies $channel tru 1af70 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 e.... if 1af80 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1af90 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 1afa0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 1afb0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 1afc0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 1afd0 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 1afe0 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c ativeMethods sql 1aff0 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 ite3_shutdown.. 1b000 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d } result] 1b010 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1b020 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1b030 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1b040 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1b050 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1b060 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1b070 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 "---- ca 1b080 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 ll sqlite3_shutd 1b090 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 own()... ok: "$
1b0a0 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
1b0b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1b0c0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1b0d0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1b0e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1b0f0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1b100 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1b110 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b120 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73      "---- call s
1b130 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28  qlite3_shutdown(
1b140 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e  )... error: " \n
1b150 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 1b160 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1b170 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 1b180 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 1b190 72 6f 63 20 72 65 70 6f 72 74 53 51 4c 69 74 65 roc reportSQLite 1b1a0 52 65 73 6f 75 72 63 65 73 20 7b 0d 0a 20 20 20 Resources {.. 1b1b0 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e 65 6c channel 1b1c0 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7b {quiet false} { 1b1d0 72 65 73 65 74 20 74 72 75 65 7d 20 7b 63 6f 6c reset true} {col 1b1e0 6c 65 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a lect true} } {.. 1b1f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1b200 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c 61 NOTE: If availa 1b210 62 6c 65 2c 20 72 65 70 6f 72 74 20 6f 6e 20 28 ble, report on ( 1b220 61 6e 64 20 70 6f 73 73 69 62 6c 79 20 72 65 73 and possibly res 1b230 65 74 29 20 74 68 65 20 72 75 6e 74 69 6d 65 0d et) the runtime. 1b240 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 1b250 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 74 61 onfiguration sta 1b260 74 69 73 74 69 63 73 2e 0d 0a 20 20 20 20 20 20 tistics... 1b270 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 #.. if {[ha 1b280 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo 1b290 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 mmand] && \.. 1b2a0 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 [haveCons 1b2b0 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 traint buildConf 1b2c0 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d iguration.Debug] 1b2d0 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 && [catch {.. 1b2e0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1b2f0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 1b300 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a ublic -alias \.. 1b310 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 1b320 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 em.Data.SQLite.D 1b330 65 62 75 67 44 61 74 61 20 73 65 74 74 69 6e 67 ebugData setting 1b340 52 65 61 64 43 6f 75 6e 74 73 0d 0a 20 20 20 20 ReadCounts.. 1b350 20 20 7d 20 73 65 74 74 69 6e 67 52 65 61 64 43 } settingReadC 1b360 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 ounts] == 0} the 1b370 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 1b380 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74 nameCount [$set
1b390 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43  tingReadCounts C
1b3a0 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 73  ount]..        s
1b3b0 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d  et valueCount 0.
1b3c0 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  ...        objec
1b3d0 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73  t foreach -alias
1b3e0 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 52 65   pair $settingRe 1b3f0 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 adCounts {.. 1b400 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c 75 65 incr value 1b410 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 61 6c Count [$pair Val
1b420 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue]....
1b430 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1b440 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1b450 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1b460 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1b470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b480 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22  "---- setting \"
1b490 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c  " [$pair Key] "\ 1b4a0 22 20 77 61 73 20 72 65 61 64 20 22 20 5c 0d 0a " was read " \.. 1b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1b4c0 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 20 22 20 [$pair Value] "
1b4d0 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20  times\n"]..
1b4e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1b4f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
1b500 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d  {$reset} then {. 1b510 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 1b520 63 61 74 63 68 20 7b 24 73 65 74 74 69 6e 67 52 catch {$settingR
1b530 65 61 64 43 6f 75 6e 74 73 20 43 6c 65 61 72 7d  eadCounts Clear}
1b540 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68   error] == 0} th
1b550 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1b560 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1b570 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1b580 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1b590 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1b5a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1b5b0 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74       "---- reset
1b5c0 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 73 74   setting statist
1b5d0 69 63 73 20 66 6f 72 20 74 68 65 20 70 72 65 76  ics for the prev
1b5e0 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 20 20 20  ious " \..
1b5f0 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d              $nam 1b600 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 eCount " names a 1b610 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 nd "$valueCount
1b620 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 5c 6e   " values read\n
1b630 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
1b640 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  }..          } e
1b650 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1b660 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1b670 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1b680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1b690 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 1b6a0 66 61 69 6c 65 64 20 74 6f 20 72 65 73 65 74 20 failed to reset 1b6b0 73 65 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 setting statisti 1b6c0 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 cs for " \.. 1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 22 74 68 65 "the 1b6e0 20 70 72 65 76 69 6f 75 73 20 22 20 24 6e 61 6d previous "$nam
1b6f0 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61  eCount " names a
1b700 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74  nd " $valueCount 1b710 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b720 20 20 20 20 22 20 76 61 6c 75 65 73 20 72 65 61 " values rea 1b730 64 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 d, error: " \n\t 1b740 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
1b750 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1b760 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
1b770 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
1b780 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
1b790 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  nd] && \..
1b7a0 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 44      [haveSQLiteD
1b7b0 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49 4e  efineConstant IN
1b7c0 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
1b7d0 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  BLE] && \..
1b7e0 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65       [haveSQLite
1b7f0 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 54  DefineConstant T
1b800 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45  RACK_MEMORY_BYTE
1b810 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  S]} then {..
1b820 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1b830 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1b840 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1b850 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20  l "---- current
1b860 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79  memory in use by
1b870 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e   SQLiteMemory...
1b880 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   "..        }...
1b890 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
1b8a0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1b8b0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
1b8c0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
1b8d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b8e0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
1b8f0 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72  Lite.SQLiteMemor
1b900 79 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64  y bytesAllocated
1b910 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f  ..        } memo
1b920 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ry] == 0} then {
1b930 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1b940 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1b950 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1b960 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1b970 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 1b980 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 " bytes\n"].. 1b990 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1b9a0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1b9b0 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory 1b9c0 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 unknown.... 1b9d0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1b9e0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1b9f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1ba00 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1ba10 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 s$memory \n]..
1ba20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1ba30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1ba40 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1ba50 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1ba60 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
1ba70 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d  ---- maximum mem
1ba80 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51  ory in use by SQ
1ba90 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d  LiteMemory... ".
1baa0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1bab0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1bac0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
1bad0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
1bae0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
1baf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
1bb00 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1bb10 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 6d  e.SQLiteMemory m
1bb20 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63  aximumBytesAlloc
1bb30 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20  ated..        }
1bb40 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68  memory] == 0} th
1bb50 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1bb60 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1bb70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1bb80 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1bb90 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 1bba0 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d ory " bytes\n"]. 1bbb0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1bbc0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1bbd0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 set me 1bbe0 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a mory unknown.... 1bbf0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1bc00 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1bc10 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1bc20 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1bc30 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e dArgs$memory \n
1bc40 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
1bc50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1bc60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
1bc70 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1bc80 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
1bc90 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75  channel "---- cu
1bca0 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20  rrent memory in
1bcb0 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e  use by SQLite...
1bcc0 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   "..      }....
1bcd0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
1bce0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
1bcf0 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
1bd00 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
1bd10 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
1bd20 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
1bd30 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
1bd40 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
1bd50 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1bd60 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
1bd70 6f 64 73 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ods sqlite3_memo
1bd80 72 79 5f 75 73 65 64 0d 0a 20 20 20 20 20 20 20  ry_used..
1bd90 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d   } memory] == 0}
1bda0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1bdb0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1bdc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1bdd0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1bde0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $1bdf0 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e memory " bytes\n 1be00 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d "].. }. 1be10 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else 1be20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 1be30 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1be40 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 : Maybe the SQLi 1be50 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 1be60 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d is unavailable?. 1be70 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1be80 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f set memo 1be90 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 ry unknown.... 1bea0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1beb0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1bec0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1bed0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1bee0 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d rgs$memory \n].
1bef0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1bf00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
1bf10 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1bf20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76   set memory unav
1bf30 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20  ailable....
1bf40 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1bf50 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1bf60 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1bf70 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 1bf80 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 1bf90 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 1bfa0 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 set result 1bfb0 20 24 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 45$memory; # NOTE
1bfc0 3a 20 52 65 74 75 72 6e 20 6d 65 6d 6f 72 79 20  : Return memory
1bfd0 69 6e 2d 75 73 65 20 74 6f 20 6f 75 72 20 63 61  in-use to our ca
1bfe0 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 20 69  ller.....      i
1bff0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1c000 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 1c010 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
1c020 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20   maximum memory
1c030 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65  in use by SQLite
1c040 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a  ... "..      }..
1c050 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76  ..      if {[hav
1c060 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  eSQLiteObjectCom
1c070 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  mand]} then {..
1c080 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
1c090 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
1c0a0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
1c0b0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
1c0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c0d0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1c0e0 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
1c0f0 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20  ethods \..
1c100 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1c110 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72  memory_highwater
1c120 20 30 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65   0..        } me
1c130 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  mory] == 0} then
1c140 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
1c150 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1c160 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1c170 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1c180 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 1c190 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 y " bytes\n"].. 1c1a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1c1b0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1c1c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1c1d0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 # NOTE: May 1c1e0 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f be the SQLite co 1c1f0 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e re library is un 1c200 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 available?.. 1c210 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1c220 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e set memory un 1c230 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 known.... 1c240 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1c250 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1c260 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1c270 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
1c280 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20  memory \n]..
1c290 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1c2a0 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
1c2b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
1c2c0 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62  memory unavailab
1c2d0 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  le....        if
1c2e0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1c2f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 1c300 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1c310 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 1c320 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. 1c330 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1c340 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 if {$collect} t
1c350 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63  hen {..        c
1c360 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 63  ollectGarbage $c 1c370 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d hannel.. }. 1c380 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 ... if {!$q
1c390 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1c3a0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1c3b0 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 nnel "---- curre 1c3c0 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 nt memory in use 1c3d0 20 62 79 20 74 68 65 20 43 4c 52 2e 2e 2e 20 22 by the CLR... " 1c3e0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 1c3f0 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 1c400 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 1c410 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1c420 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1c430 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 1c440 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f invoke GC GetTo 1c450 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d talMemory false. 1c460 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 . } memor 1c470 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d y] == 0} then {. 1c480 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 1c490 73 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 string is intege 1c4a0 72 20 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 r -strict$memor
1c4b0 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
1c4c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1c4d0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1c4e0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1c4f0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1c500 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20  dArgs $memory " 1c510 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 bytes\n"].. 1c520 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1c530 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1c540 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 set me 1c550 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a mory invalid.... 1c560 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1c570 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1c580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
1c590 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1c5a0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
1c5b0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  y \n]..
1c5c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1c5d0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
1c5e0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e {..          s
1c5f0 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77  et memory unknow
1c600 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n....          i
1c610 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1c620 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c630 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1c640 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 1c650 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ry \n].. 1c660 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1c670 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1c680 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f set memo 1c690 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a ry unavailable.. 1c6a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 .. if {!$
1c6b0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1c6c0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1c6d0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1c6e0 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d rgs$memory \n].
1c6f0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
1c700 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
1c710 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20  urn $result.. 1c720 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1c730 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 checkForSQLiteDi 1c740 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68 61 6e rectories { chan 1c750 6e 65 6c 20 7b 72 65 73 65 74 20 66 61 6c 73 65 nel {reset false 1c760 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 1c770 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 1c780 65 63 6b 20 69 66 20 74 68 65 20 73 71 6c 69 74 eck if the sqlit 1c790 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 1c7a0 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 ectory function 1c7b0 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 is available... 1c7c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 74 70 #.. tp 1c7d0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a uts$channel \..
1c7e0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1c7f0 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 75 6e  checking for fun
1c800 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f 77 69  ction sqlite3_wi
1c810 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
1c820 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  y... "....
1c830 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
1c840 20 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 74 68   This call to th
1c850 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  e sqlite3_win32_
1c860 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75  set_directory fu
1c870 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 65 0d  nction uses the.
1c880 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
1c890 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 30 20 66  nvalid value 0 f
1c8a0 6f 72 20 74 68 65 20 66 69 72 73 74 20 61 72 67  or the first arg
1c8b0 75 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 64  ument.  This cod
1c8c0 65 20 69 73 20 64 65 73 69 67 6e 65 64 0d 0a 20  e is designed..
1c8d0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
1c8e0 63 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 6e 67  check if calling
1c8f0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77 69   the function wi
1c900 6c 6c 20 72 61 69 73 65 20 61 6e 20 65 78 63 65  ll raise an exce
1c910 70 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20 20  ption (i.e...
1c920 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 61     #       the a
1c930 63 74 75 61 6c 20 72 65 73 75 6c 74 20 6f 66 20  ctual result of
1c940 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65  the function doe
1c950 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 73 20  s not matter as
1c960 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 20 20  long as no..
1c970 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74    #       direct
1c980 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 29 2e  ory is changed).
1c990 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1c9a0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
1c9b0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
1c9c0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
1c9d0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
1c9e0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
1c9f0 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
1ca00 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a  ativeMethods \..
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
1ca20 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
1ca30 72 65 63 74 6f 72 79 20 30 20 6e 75 6c 6c 0d 0a  rectory 0 null..
1ca40 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74        }] == 0} t
1ca50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1ca60 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1ca70 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 20 73 71  : Calling the sq
1ca80 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
1ca90 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69  directory functi
1caa0 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20  on does not..
1cab0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 75       #       cau
1cac0 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b  se an exception;
1cad0 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 6d   therefore, it m
1cae0 75 73 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65  ust be available
1caf0 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20   (i.e...
1cb00 23 20 20 20 20 20 20 20 65 76 65 6e 20 74 68 6f  #       even tho
1cb10 75 67 68 20 69 74 20 73 68 6f 75 6c 64 20 72 65  ugh it should re
1cb20 74 75 72 6e 20 61 20 66 61 69 6c 75 72 65 20 72  turn a failure r
1cb30 65 74 75 72 6e 20 63 6f 64 65 20 69 6e 20 74 68  eturn code in th
1cb40 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
1cb50 20 20 20 20 63 61 73 65 29 2e 0d 0a 20 20 20 20      case)...
1cb60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61      #..        a
1cb70 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c  ddConstraint sql
1cb80 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
1cb90 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20  irectory....
1cba0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1cbb0 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 el yes\n.... 1cbc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1cbd0 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 NOTE: Does our 1cbe0 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 caller want to r 1cbf0 65 73 65 74 20 74 68 65 20 64 69 72 65 63 74 6f eset the directo 1cc00 72 69 65 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 ries?.. # 1cc10 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 .. if {$r
1cc20 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  eset} then {..
1cc30 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1cc40 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77       # NOTE: Now
1cc50 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64   make sure the d
1cc60 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70  atabase and temp
1cc70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65  orary directorie
1cc80 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20  s are..
1cc90 20 23 20 20 20 20 20 20 20 72 65 73 65 74 20 74   #       reset t
1cca0 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c  heir default val
1ccb0 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c  ues, which shoul
1ccc0 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f  d be null for bo
1ccd0 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  th...          #
1cce0 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 68 65         Since the
1ccf0 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
1cd00 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e  et_directory fun
1cd10 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ction is availab
1cd20 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23  le,..          #
1cd30 20 20 20 20 20 20 20 75 73 65 20 69 74 2e 0d 0a         use it...
1cd40 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1cd50 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20         for {set
1cd60 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78  index 1} {$index 1cd70 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69 6e 64 65 < 3} {incr inde 1cd80 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 x} {.. 1cd90 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob 1cdb0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 1cdc0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 1cdd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1cde0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 1cdf0 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 QLite.UnsafeNati 1ce00 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 veMethods \.. 1ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s 1ce20 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 1ce30 5f 64 69 72 65 63 74 6f 72 79 20 24 69 6e 64 65 _directory$inde
1ce40 78 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20  x null..
1ce50 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d      } result] ==
1ce60 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1ce70 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1ce80 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1ce90 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1cea0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1ceb0 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e call sqlite3_win 1cec0 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 1ced0 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 ("$index \..
1cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1cef0 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22  , null)... ok: "
1cf00 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 1cf10 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1cf20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1cf30 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1cf40 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cf60 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c    "---- call sql
1cf70 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
1cf80 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65  irectory(" $inde 1cf90 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x \.. 1cfa0 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e ", null). 1cfb0 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 .. error: " \n\t 1cfc0 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
1cfd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1cfe0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1cff0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
1d000 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
1d010 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n 1d020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 1d030 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 # NOTE: D 1d040 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 oes our caller w 1d050 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 ant to reset the 1d060 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20 20 54 directories? T 1d070 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 20 his can only.. 1d080 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 # be 1d090 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 performed if SQ 1d0a0 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61 Lite is loaded a 1d0b0 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 nd ready for use 1d0c0 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20 20 by the test.. 1d0d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75 # su 1d0e0 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ite... #. 1d0f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 . if {$re
1d100 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69 74 65  set && [isSQLite
1d110 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Ready]} then {..
1d120 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1d130 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
1d140 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  ow make sure the
1d150 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65   database and te
1d160 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
1d170 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20  ies are..
1d180 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74     #       reset
1d190 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76   their default v
1d1a0 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f  alues, which sho
1d1b0 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20  uld be null for
1d1c0 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20  both...
1d1d0 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74   #       Since t
1d1e0 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  he sqlite3_win32
1d1f0 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66  _set_directory f
1d200 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74  unction does not
1d210 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
1d220 20 20 20 20 61 70 70 65 61 72 20 74 6f 20 62 65      appear to be
1d230 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 65 20   available, use
1d240 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 50  the associated P
1d250 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a  RAGMA commands..
1d260 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1d270 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20    instead...
1d280 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1d290 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 63     foreach direc
1d2a0 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f  tory [list data_
1d2b0 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory
1d2c0 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
1d2d0 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20  tory] {..
1d2e0 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70       set sql [ap
1d2f0 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41  pendArgs "PRAGMA
1d300 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 20   " $directory " 1d310 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 20 = \"\";"].... 1d320 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 1d330 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 tch {executeSql 1d340 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d 3d$sql} result] ==
1d350 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1d360 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1d370 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1d380 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1d390 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1d3a0 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 execute PRAGMA " 1d3b0 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e$directory "...
1d3c0 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 20   ok: \"" \..
1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72                $r 1d3e0 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 esult \"\n].. 1d3f0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 1d400 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d410 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1d420 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d440 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50   "---- execute P
1d450 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f  RAGMA " $directo 1d460 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 ry "... error: " 1d470 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d480 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 \n\t$resu
1d490 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  lt \n]..
1d4a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1d4b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
1d4c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1d4d0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
1d4e0 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 74   Finally, show t
1d4f0 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
1d500 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
1d510 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d 0a   and temporary..
1d520 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69        #       di
1d530 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69 73  rectories.  This
1d540 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65 72   can only be per
1d550 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65  formed if SQLite
1d560 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20   is loaded..
1d570 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65    #       and re
1d580 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74  ady for use by t
1d590 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a  he test suite...
1d5a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
1d5b0 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61 64  f {[isSQLiteRead
1d5c0 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
1d5d0 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65      foreach dire
1d5e0 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61  ctory [list data
1d5f0 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
1d600 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
1d610 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20  ctory] {..
1d620 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1d630 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " 1d640 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 20 ---- checking " 1d650 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20$directory "...
1d660 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  "]....
1d670 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41  set sql [appendA
1d680 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64  rgs "PRAGMA " $d 1d690 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a irectory \;].... 1d6a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 1d6b0 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c atch {executeSql 1d6c0 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 65$sql scalar} re
1d6d0 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sult] == 0} then
1d6e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1d6f0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 1d700 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a 20 appendArgs "ok: 1d710 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e \""$result \"\n
1d720 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
1d730 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1d740 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1d750 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 65 l [appendArgs "e 1d760 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 rror: " \n\t$re
1d770 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
1d780 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1d790 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1d7a0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c 6f  .....    proc lo
1d7b0 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74  adSQLiteTestSett
1d7c0 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  ings { channel {
1d7d0 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69 65  suffix ""} {quie
1d7e0 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
1d7f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
1d800 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69 6e  OTE: Skip loadin
1d810 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 69  g the settings i
1d820 66 20 74 68 65 69 72 20 75 73 61 67 65 20 68 61  f their usage ha
1d830 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 2e  s been disabled.
1d840 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1d850 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
1d860 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 65  ts ::no(sqliteTe
1d870 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74 68  stSettings)]} th
1d880 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
1d890 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1d8a0 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65 72   Load custom per
1d8b0 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72  -user and/or per
1d8c0 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69  -host test setti
1d8d0 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ngs now...
1d8e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
1d8f0 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
1d900 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65  tcl_platform(use
1d910 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  r)]} then {..
1d920 20 20 20 20 20 20 20 73 65 74 20 75 73 65 72 53         set userS
1d930 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
1d940 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43  [file join [getC
1d950 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20  ommonDirectory]
1d960 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1d970 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74   [appendArgs set
1d980 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20  tings $suffix . 1d990 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28$::tcl_platform(
1d9a0 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a  user) .eagle]]..
1d9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1d9c0 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 75 73  [file exists $us 1d9d0 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 erSettingsFileNa 1d9e0 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 1d9f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1da00 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1da10 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1da20 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1da30 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1da40 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1da50 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 - loading per-us 1da60 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 er test settings 1da70 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 file \"" \.. 1da80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
1da90 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65  userSettingsFile
1daa0 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20  Name \"...\n]..
1dab0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1dac0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1dad0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
1dae0 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20          uplevel
1daf0 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24  1 [list source $1db00 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 userSettingsFile 1db10 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 Name].. 1db20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 } error]} the 1db30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1db40 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1db50 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1db60 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1db70 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1db80 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1db90 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 1dba0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 1dbb0 74 6f 20 6c 6f 61 64 20 70 65 72 2d 75 73 65 72 to load per-user 1dbc0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c settings file \ 1dbd0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 1dbe0 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53$userS
1dbf0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
1dc00 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  "\", error: " \n
1dc10 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. 1dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 1dc30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1dc40 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 1dc50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 1dc60 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1dc70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1dc80 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1dc90 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1dca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1dcb0 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 "---- skipped 1dcc0 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72 loading per-user 1dcd0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 test settings f 1dce0 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ile \"" \.. 1dcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73$us
1dd00 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  erSettingsFileNa
1dd10 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20  me "\", it does
1dd20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20  not exist\n"]..
1dd30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1dd40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1dd50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1dd60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dd90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dda0 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20  #######....
1ddb0 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
1ddc0 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  sts ::tcl_platfo
1ddd0 72 6d 28 68 6f 73 74 29 5d 7d 20 74 68 65 6e 20  rm(host)]} then
1dde0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
1ddf0 20 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c   hostSettingsFil
1de00 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  eName [file join
1de10 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63   [getCommonDirec
1de20 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20  tory] \..
1de30 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72         [appendAr
1de40 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66  gs settings $suf 1de50 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 fix .$::tcl_pla
1de60 74 66 6f 72 6d 28 68 6f 73 74 29 20 2e 65 61 67  tform(host) .eag
1de70 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le]]....
1de80 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
1de90 74 73 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73  ts $hostSettings 1dea0 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 FileName]} then 1deb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 1dec0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1ded0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1dee0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1def0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1df00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1df10 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 "---- loading 1df20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 per-host test se 1df30 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 ttings file \"" 1df40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1df50 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e$hostSettin
1df60 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e  gsFileName \"...
1df70 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
1df80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
1df90 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 70                up
1dfb0 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f  level 1 [list so
1dfc0 75 72 63 65 20 24 68 6f 73 74 53 65 74 74 69 6e  urce $hostSettin 1dfd0 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 gsFileName].. 1dfe0 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 } error 1dff0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1e000 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1e010 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1e020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
1e030 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1e040 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e060 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 1e070 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 ailed to load pe 1e080 72 2d 68 6f 73 74 20 73 65 74 74 69 6e 67 73 20 r-host settings 1e090 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e0b0 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c$hostSettingsFil
1e0c0 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72  eName "\", error
1e0d0 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 1e0e0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 1e0f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1e100 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 1e110 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1e120 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1e130 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1e140 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1e150 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1e160 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1e170 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk 1e180 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 ipped loading pe 1e190 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 r-host test sett 1e1a0 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d ings file \"" \. 1e1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1e1c0 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73$hostSettings
1e1d0 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74  FileName "\", it
1e1e0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
1e1f0 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n"]..
1e200 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
1e210 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
1e220 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
1e230 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74     proc runSQLit
1e240 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b 7d  eTestPrologue {}
1e250 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
1e260 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
1e270 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74  running our cust
1e280 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 20 74  om prologue if t
1e290 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20  he main one has
1e2a0 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  been..      #
1e2b0 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20      skipped...
1e2c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
1e2d0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
1e2e0 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61 67  :no(prologue.eag
1e2f0 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  le)]} then {..
1e300 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1e310 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68   # NOTE: Load th
1e320 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74 72  e "before-constr
1e330 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65  aints" custom pe
1e340 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65  r-user and/or pe
1e350 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20  r-host..
1e360 23 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74  #       test set
1e370 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20  tings now...
1e380 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75      #..        u
1e390 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c  plevel 1 [list l
1e3a0 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74  oadSQLiteTestSet
1e3b0 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68  tings $::test_ch 1e3c0 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d 0a annel .before].. 1e3d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1e3e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 1e3f0 63 6b 20 69 66 20 74 68 65 20 5b 6f 62 6a 65 63 ck if the [objec 1e400 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 76 t] command is av 1e410 61 69 6c 61 62 6c 65 3b 20 69 66 20 6e 6f 74 2c ailable; if not, 1e420 20 61 64 64 20 73 6f 6d 65 0d 0a 20 20 20 20 20 add some.. 1e430 20 20 20 23 20 20 20 20 20 20 20 73 68 69 6d 73 # shims 1e440 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 74 65 73 to make the tes 1e450 74 20 73 75 69 74 65 20 72 75 6e 20 73 6d 6f 6f t suite run smoo 1e460 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 ther... # 1e470 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 1e480 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f orSQLiteObjectCo 1e490 6d 6d 61 6e 64 20 24 3a 3a 74 65 73 74 5f 63 68 mmand$::test_ch
1e4a0 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  annel....
1e4b0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1e4c0 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 74 68  TE: Determine th
1e4d0 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 6e  e names of the n
1e4e0 61 74 69 76 65 20 70 6c 61 74 66 6f 72 6d 20 61  ative platform a
1e4f0 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 65 2e  nd architecture.
1e500 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1e510 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72       set platfor
1e520 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66  m [getBuildPlatf
1e530 6f 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 20 20  orm true]..
1e540 20 20 20 73 65 74 20 61 72 63 68 69 74 65 63 74     set architect
1e550 75 72 65 20 5b 61 72 63 68 69 74 65 63 74 75 72  ure [architectur
1e560 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c  eForPlatform $pl 1e570 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 atform].... 1e580 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1e590 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 70 NOTE: Show the p 1e5a0 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 latform and arch 1e5b0 69 74 65 63 74 75 72 65 20 75 73 65 64 20 74 6f itecture used to 1e5c0 20 68 65 6c 70 20 6c 6f 63 61 74 65 20 74 68 65 help locate the 1e5d0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1e5e0 20 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 native build f 1e5f0 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 iles... # 1e600 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 1e610 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1e620 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1e630 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1e640 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 6c 6f   platform for lo
1e650 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75  cating native bu
1e660 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22  ild files is \""
1e670 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1e680 24 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d  $platform \"\n]. 1e690 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs 1e6a0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1e6b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1e6c0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1e6d0 2d 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66  - architecture f
1e6e0 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69  or locating nati
1e6f0 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20 69  ve build files i
1e700 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  s \"" \..
1e710 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75       $architectu 1e720 72 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 re \"\n].... 1e730 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1e740 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c NOTE: Build a l 1e750 69 73 74 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 ist of configura 1e760 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20 tion files that 1e770 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 we handle... 1e780 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 1e790 65 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d et configFileNam 1e7a0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 es [list \.. 1e7b0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1e7c0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 ata.SQLite.dll.c 1e7d0 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 onfig].... 1e7e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1e7f0 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 OTE: Build a lis 1e800 74 20 6f 66 20 61 75 78 69 6c 69 61 72 79 20 4d t of auxiliary M 1e810 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 anaged Debugging 1e820 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 Assistants (MDA 1e830 29 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ).. # 1e840 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e configuration 1e850 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 files that we h 1e860 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 andle... 1e870 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d #.. set m 1e880 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 daConfigFileName 1e890 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 1e8a0 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c EagleShel 1e8b0 6c 33 32 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 l32.exe.mda.conf 1e8c0 69 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 ig Installer.exe 1e8d0 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 .mda.config \.. 1e8e0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 2e test. 1e8f0 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 exe.mda.config t 1e900 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e estlinq.exe.mda. 1e910 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 config \.. 1e920 20 20 20 20 20 20 74 65 73 74 65 66 36 2e 65 78 testef6.ex 1e930 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a 0d e.mda.config]... 1e940 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1e950 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 1e960 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 d the list of ex 1e970 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 74 68 61 ternal files tha 1e980 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 20 53 6f t we handle. So 1e990 6d 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 23 me of.. # 1e9a0 20 20 20 20 20 20 20 74 68 65 73 65 20 66 69 6c these fil 1e9b0 65 73 20 6d 61 79 20 62 65 20 6e 61 74 69 76 65 es may be native 1e9c0 20 61 6e 64 2f 6f 72 20 6d 61 6e 61 67 65 64 20 and/or managed 1e9d0 61 73 73 65 6d 62 6c 69 65 73 20 74 68 61 74 20 assemblies that 1e9e0 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 are.. # 1e9f0 20 20 20 20 20 72 65 71 75 69 72 65 64 20 74 6f required to 1ea00 20 70 65 72 66 6f 72 6d 20 76 61 72 69 6f 75 73 perform various 1ea10 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 tests... 1ea20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set 1ea30 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 externalFileName 1ea40 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 1ea50 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 [file joi 1ea60 6e 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 n EntityFramewor 1ea70 6b 20 6c 69 62 20 5b 73 74 72 69 6e 67 20 6d 61 k lib [string ma 1ea80 70 20 5b 6c 69 73 74 20 46 78 20 22 22 5d 20 5b p [list Fx ""] [ 1ea90 73 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20 20 20 string \.. 1eaa0 20 20 20 20 20 20 6d 61 70 20 5b 6c 69 73 74 20 map [list 1eab0 6e 65 74 46 78 34 35 31 20 6e 65 74 46 78 34 35 netFx451 netFx45 1eac0 20 6e 65 74 46 78 34 35 32 20 6e 65 74 46 78 34 netFx452 netFx4 1ead0 35 20 6e 65 74 46 78 34 36 20 6e 65 74 46 78 34 5 netFx46 netFx4 1eae0 35 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 5 \.. 1eaf0 20 6e 65 74 46 78 34 36 31 20 6e 65 74 46 78 34 netFx461 netFx4 1eb00 35 5d 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 5] [getBuildNetF 1eb10 78 5d 5d 5d 20 45 6e 74 69 74 79 46 72 61 6d 65 x]]] EntityFrame 1eb20 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 work.dll]].... 1eb30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1eb40 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 1eb50 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 he list of nativ 1eb60 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 e assembly files 1eb70 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e that we handle. 1eb80 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 23 The.. # 1eb90 20 20 20 20 20 20 20 72 65 61 73 6f 6e 20 74 68 reason th 1eba0 65 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 e "System.Data.S 1ebb0 51 4c 69 74 65 2e 64 6c 6c 22 20 66 69 6c 65 20 QLite.dll" file 1ebc0 69 73 20 69 6e 63 6c 75 64 65 64 20 68 65 72 65 is included here 1ebd0 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 is.. # 1ebe0 20 20 20 20 20 62 65 63 61 75 73 65 20 69 74 20 because it 1ebf0 63 6f 75 6c 64 20 62 65 20 74 68 65 20 6d 69 78 could be the mix 1ec00 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 1ec10 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1ec20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 set native 1ec30 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 5d FileNames [list] 1ec40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c .... eval 1ec50 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46 lappend nativeF 1ec60 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 4e 61 74 ileNames [getNat 1ec70 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 iveLibraryFileNa 1ec80 6d 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20 20 mesOnly].. 1ec90 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e eval lappend n 1eca0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b ativeFileNames [ 1ecb0 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 getInteropAssemb 1ecc0 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d lyFileNamesOnly] 1ecd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 .... lapp 1ece0 65 6e 64 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 end nativeFileNa 1ecf0 6d 65 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e mes System.Data. 1ed00 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 0d 0a 20 20 SQLite.dll.... 1ed10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1ed20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 1ed30 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 he list of manag 1ed40 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 ed assembly file 1ed50 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 s that we handle 1ed60 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1ed70 20 20 20 20 20 20 73 65 74 20 6d 61 6e 61 67 65 set manage 1ed80 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 dFileNames [list 1ed90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1eda0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1edb0 74 65 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44 61 te.dll System.Da 1edc0 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 ta.SQLite.Linq.d 1edd0 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ll \.. 1ede0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 1edf0 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d Lite.EF6.dll]... 1ee00 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1ee10 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f # NOTE: Remo 1ee20 76 65 20 61 6e 79 20 74 65 73 74 20 63 6f 6e 73 ve any test cons 1ee30 74 72 61 69 6e 74 73 20 74 68 61 74 20 72 65 66 traints that ref 1ee40 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69 76 65 er to the native 1ee50 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 and/or.. 1ee60 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 # managed 1ee70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 assembly files 1ee80 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 20 75 that we handle u 1ee90 6e 6c 65 73 73 20 66 6f 72 62 69 64 64 65 6e 20 nless forbidden 1eea0 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 23 20 from.. # 1eeb0 20 20 20 20 20 20 64 6f 69 6e 67 20 73 6f 2e 0d doing so.. 1eec0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1eed0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 1eee0 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 xists ::no(sqlit 1eef0 65 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e eRemoveConstrain 1ef00 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ts)]} then {.. 1ef10 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1ef20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 fileName$config
1ef30 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
1ef40 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43           removeC
1ef50 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
1ef60 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c  dArgs file_ $fil 1ef70 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 eName].. 1ef80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 1ef90 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 1efa0 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 e$mdaConfigFile
1efb0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
1efc0 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74       removeConst
1efd0 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
1efe0 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d  s file_ $fileNam 1eff0 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d e].. }. 1f000 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 ... for 1f010 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 each fileName$e
1f020 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73  xternalFileNames
1f030 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1f040 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74  removeConstraint
1f050 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
1f060 65 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  e_ [file tail $f 1f070 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 ileName]].. 1f080 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1f090 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 1f0a0 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 Name$nativeFile
1f0b0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
1f0c0 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74       removeConst
1f0d0 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
1f0e0 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d  s file_ $fileNam 1f0f0 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d e].. }. 1f100 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 ... for 1f110 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d each fileName$m
1f120 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20  anagedFileNames
1f130 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
1f140 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  emoveConstraint
1f150 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
1f160 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20  _ $fileName].. 1f170 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1f180 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1f190 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1f1a0 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53 79 73 74 E: Skip all Syst 1f1b0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 em.Data.SQLite r 1f1c0 65 6c 61 74 65 64 20 66 69 6c 65 20 68 61 6e 64 elated file hand 1f1d0 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e 67 2c 0d ling (deleting,. 1f1e0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1f1f0 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64 20 6c 6f copying, and lo 1f200 61 64 69 6e 67 29 20 69 66 20 69 6e 73 74 72 75 ading) if instru 1f210 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 cted... # 1f220 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 1f230 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 1f240 28 73 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 (sqliteFiles)]} 1f250 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f260 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1f270 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 NOTE: Skip tryi 1f280 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 ng to delete any 1f290 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 files if instru 1f2a0 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 cted... 1f2b0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 1f2c0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1f2d0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 1f2e0 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b eFiles)]} then { 1f2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1f300 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1f310 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 1f320 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20 eConfigFiles)]} 1f330 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f340 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 1f350 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 leName$configFi
1f360 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
1f370 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
1f380 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24  leteBinaryFile $1f390 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 1f3a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1f3b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1f3c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 1f3d0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 1f3e0 65 6c 65 74 65 53 71 6c 69 74 65 45 78 74 65 72 eleteSqliteExter 1f3f0 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e nalFiles)]} then 1f400 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f410 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 1f420 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c me$mdaConfigFil
1f430 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
1f440 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c            tryDel
1f450 65 74 65 42 75 69 6c 64 46 69 6c 65 20 24 66 69  eteBuildFile $fi 1f460 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 1f470 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1f480 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 1f490 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 fileName$exter
1f4a0 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  nalFileNames {..
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f4c0 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46  tryDeleteBinaryF
1f4d0 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  ile $fileName.. 1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 1f500 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 1f510 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 1f520 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 1f530 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 NativeFiles)]} t 1f540 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1f550 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 1f560 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 1f570 74 65 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 teSqliteImplicit 1f580 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 1f590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1f5a0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 1f5b0 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d e$nativeFileNam
1f5c0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
1f5d0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
1f5e0 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 1f5f0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ame.. 1f600 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1f610 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1f620 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 1f630 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 1f640 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 deleteSqliteNonI 1f650 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 mplicitFiles)]} 1f660 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f670 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 1f680 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 1f690 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66 eleteSqlitePlatf 1f6a0 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d ormFiles)] && \. 1f6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1f6c0 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 1f6d0 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e gth$platform] >
1f6e0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1f6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
1f700 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $1f710 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 nativeFileNames 1f720 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f730 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 1f740 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
1f750 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20  me $platform.. 1f760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f770 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1f780 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1f790 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 1f7a0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 1f7b0 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69 eleteSqliteArchi 1f7c0 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 tectureFiles)] & 1f7d0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 1f7e0 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 1f7f0 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 length$archite
1f800 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e  cture] > 0} then
1f810 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1f820 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
1f830 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69  leName $nativeFi 1f840 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 1f860 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 ryDeleteAssembly 1f870 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68$fileName $arch 1f880 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 itecture.. 1f890 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 1f8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1f8c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 1f8d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 1f8e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 1f8f0 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c s ::no(deleteSql 1f900 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 iteManagedFiles) 1f910 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1f920 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 1f930 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 fileName$manag
1f940 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  edFileNames {..
1f950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1f960 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79  ryDeleteAssembly
1f970 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName.. 1f980 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1f990 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1f9a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1f9b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1f9c0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 1f9d0 66 6f 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c for the "autoSel 1f9e0 65 63 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 ect" runtime opt 1f9f0 69 6f 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74 ion. If present 1fa00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 ,.. # 1fa10 20 20 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20 attempt to 1fa20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 automatically se 1fa30 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 20 61 lect the first a 1fa40 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 vailable.. 1fa50 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c # buil 1fa60 64 20 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29 d (or "release") 1fa70 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53 of SQLite and S 1fa80 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1fa90 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 e.. # 1faa0 20 20 20 20 20 66 6f 72 20 75 73 65 20 77 69 74 for use wit 1fab0 68 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 h the test suite 1fac0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1fad0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 if {[h 1fae0 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 asRuntimeOption 1faf0 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 autoSelect]} the 1fb00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1fb10 20 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 if {![checkForS 1fb20 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 QLiteBuilds$::t
1fb30 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65  est_channel true
1fb40 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1fb50 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
1fb60 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20  rSQLiteReleases
1fb70 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1fb80 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 true.. 1fb90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 1fba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 1fbb0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 1fbc0 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 E: Skip trying t 1fbd0 6f 20 76 65 72 69 66 79 20 74 68 65 20 62 75 69 o verify the bui 1fbe0 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 66 20 ld directory if 1fbf0 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20 20 instructed;.. 1fc00 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f # o 1fc10 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 therwise, make s 1fc20 75 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79 20 ure it actually 1fc30 65 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20 74 exists or halt t 1fc40 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20 20 he entire.. 1fc50 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 # tes 1fc60 74 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66 20 ting process if 1fc70 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 1fc80 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d t... #. 1fc90 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 1fca0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1fcb0 6f 28 76 65 72 69 66 79 42 75 69 6c 64 44 69 72 o(verifyBuildDir 1fcc0 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b ectory)]} then { 1fcd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 1fce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 1fcf0 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69 OTE: At this poi 1fd00 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69 nt, the build di 1fd10 72 65 63 74 6f 72 79 20 4d 55 53 54 20 65 78 69 rectory MUST exi 1fd20 73 74 20 61 73 20 61 0d 0a 20 20 20 20 20 20 20 st as a.. 1fd30 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c # val 1fd40 69 64 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 id directory for 1fd50 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f the testing pro 1fd60 63 65 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 cess to continue 1fd70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 1fd80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 1fd90 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 t directory [get 1fda0 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 5d 0d BuildDirectory]. 1fdb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 1fdc0 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 f {![file exists 1fdd0 20 24 64 69 72 65 63 74 6f 72 79 5d 20 7c 7c 20$directory] ||
1fde0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1fdf0 20 20 20 21 5b 66 69 6c 65 20 69 73 64 69 72 65     ![file isdire
1fe00 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79  ctory $directory 1fe10 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1fe20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1fe30 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1fe40 3a 20 4a 75 73 74 20 70 72 69 6f 72 20 74 6f 20 : Just prior to 1fe50 61 63 74 75 61 6c 6c 79 20 68 61 6c 74 69 6e 67 actually halting 1fe60 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f the testing pro 1fe70 63 65 73 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 cess,.. 1fe80 20 20 20 20 20 23 20 20 20 20 20 20 20 61 64 64 # add 1fe90 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 74 68 65 an error to the 1fea0 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 2e 0d test log file.. 1feb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1fec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1fed0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1fee0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1fef0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1ff00 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 75         "---- cou
1ff10 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75  ld not verify bu
1ff20 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22  ild directory \"
1ff30 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a  " $directory \.. 1ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ff50 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 "\", all testi 1ff60 6e 67 20 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d ng halted\n"]... 1ff70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1ff80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1ff90 23 20 4e 4f 54 45 3a 20 52 61 69 73 69 6e 67 20 # NOTE: Raising 1ffa0 61 20 73 63 72 69 70 74 20 65 72 72 6f 72 20 66 a script error f 1ffb0 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 73 rom this point s 1ffc0 68 6f 75 6c 64 20 68 61 6c 74 0d 0a 20 20 20 20 hould halt.. 1ffd0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1ffe0 20 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 the testing pr 1fff0 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 ocess... 20000 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 20010 20 20 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 error [ap 20020 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 20030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 "c 20040 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 ould not verify 20050 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 build directory 20060 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c \""$directory \
20070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20080 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73      "\", all tes
20090 74 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d 0a 20  ting halted"]..
200a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
200b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
200c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
200d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
200e0 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 20   trying to copy
200f0 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73  any files if ins
20100 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20  tructed...
20110 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
20120 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
20130 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
20140 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  teFiles)]} then
20150 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
20160 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
20170 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
20180 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d 20 74  ConfigFiles)]} t
20190 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
201a0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
201b0 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c  eName $configFil 201c0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 201d0 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 tryCop 201e0 79 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 yBuildFile$file
201f0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
20200 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
20210 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
20220 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
20230 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
20240 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c  qliteExternalFil
20250 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
20260 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
20270 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
20280 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 4d 61  OTE: Copy the Ma
20290 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 20  naged Debugging
202a0 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29  Assistants (MDA)
202b0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a   configuration..
202c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
202d0 20 20 20 20 20 20 66 69 6c 65 20 66 6f 72 20 74        file for t
202e0 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 20 74  he Eagle shell t
202f0 6f 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70  o the build outp
20300 75 74 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ut directory,..
20310 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
20320 20 20 20 20 20 77 68 69 6c 65 20 75 73 69 6e 67       while using
20330 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 61 6d   each of the nam
20340 65 73 20 6f 66 20 74 68 65 20 76 61 72 69 6f 75  es of the variou
20350 73 20 6c 65 67 61 63 79 20 74 65 73 74 0d 0a 20  s legacy test..
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
20370 20 20 20 20 20 65 78 65 63 75 74 61 62 6c 65 73       executables
20380 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 68 65 6c  .  This will hel
20390 70 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74  p to make sure t
203a0 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a 20 20 20  hat all the..
203b0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
203c0 20 20 20 6c 65 67 61 63 79 20 74 65 73 74 73 20     legacy tests
203d0 72 75 6e 20 77 69 74 68 20 65 78 61 63 74 6c 79  run with exactly
203e0 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f 66   the same set of
203f0 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20   Managed..
20400 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
20410 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74  Debugging Assist
20420 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 65 64 2e  ants configured.
20430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20440 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
20450 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
20460 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65  e $mdaConfigFile 20470 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 20480 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 tryCopy 20490 42 69 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65 BinaryFile Eagle 204a0 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f Shell.exe.mda.co 204b0 6e 66 69 67 20 22 22 20 24 66 69 6c 65 4e 61 6d nfig ""$fileNam
204c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
204d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
204e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
204f0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70       # NOTE: Cop
20500 79 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62  y the external b
20510 69 6e 61 72 69 65 73 2c 20 69 66 20 61 6e 79 2c  inaries, if any,
20520 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72   to the director
20530 79 20 74 68 61 74 0d 0a 20 20 20 20 20 20 20 20  y that..
20540 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
20550 6e 74 61 69 6e 73 20 74 68 65 20 45 61 67 6c 65  ntains the Eagle
20560 20 73 68 65 6c 6c 2e 20 20 54 68 69 73 20 69 73   shell.  This is
20570 20 74 79 70 69 63 61 6c 6c 79 20 75 73 65 64 20   typically used
20580 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20  to make..
20590 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
205a0 75 72 65 20 61 73 73 65 6d 62 6c 69 65 73 20 72  ure assemblies r
205b0 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
205c0 20 6f 6e 65 73 20 62 65 69 6e 67 20 74 65 73 74   ones being test
205d0 65 64 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20  ed are..
205e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 76        #       av
205f0 61 69 6c 61 62 6c 65 20 64 75 72 69 6e 67 20 74  ailable during t
20600 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65  he testing proce
20610 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ss...
20620 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
20630 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
20640 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69  Name $externalFi 20650 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 20660 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 20670 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 24 pyExternalFile$
20680 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..
20690 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
206a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
206b0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
206c0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
206d0 6f 70 79 53 71 6c 69 74 65 4e 61 74 69 76 65 46  opySqliteNativeF
206e0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
206f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
20700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
20710 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 65   NOTE: If the te
20720 73 74 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6c  st platform is l
20730 69 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c  ikely the defaul
20740 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20  t for this..
20750 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
20760 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c 73 6f 20    machine, also
20770 74 72 79 20 74 6f 20 63 6f 70 79 20 74 68 65 20  try to copy the
20780 6e 61 74 69 76 65 20 66 69 6c 65 73 20 74 6f 20  native files to
20790 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..
207a0 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72     #       binar
207b0 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  y location...
207c0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
207d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
207e0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
207f0 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70  no(copySqliteImp
20800 6c 69 63 69 74 46 69 6c 65 73 29 5d 20 26 26 20  licitFiles)] &&
20810 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
20820 20 20 20 20 20 5b 69 73 44 65 66 61 75 6c 74 42       [isDefaultB
20830 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 75  uildPlatform tru
20840 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
20850 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
20860 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61  ach fileName $na 20870 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 20880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 20890 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 tryCopyAssemb 208a0 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 ly$fileName..
208b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
208c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
208d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
208e0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
208f0 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
20900 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69  iteNonImplicitFi
20910 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
20920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
20930 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
20940 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
20950 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20  PlatformFiles)]
20960 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
20970 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
20980 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f  g length $platfo 20990 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d rm] > 0} then {. 209a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 209b0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 209c0 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e ame$nativeFileN
209d0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
209e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
209f0 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  opyAssembly $fil 20a00 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d eName$platform.
20a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
20a20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
20a30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
20a40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
20a50 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
20a60 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68  o(copySqliteArch
20a70 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20  itectureFiles)]
20a80 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
20a90 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
20aa0 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 20ab0 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 20ac0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 20ad0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 20ae0 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
20af0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
20b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20b10 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20  tryCopyAssembly
20b20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69  $fileName$archi
20b30 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20  tecture..
20b40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
20b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
20b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20b80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
20b90 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
20ba0 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
20bb0 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20  ManagedFiles)]}
20bc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
20bd0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
20be0 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46  leName $managedF 20bf0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 20c00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 tryC 20c10 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c opyAssembly$fil
20c20 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..
20c30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
20c40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
20c50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
20c60 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
20c70 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67  OTE: Skip trying
20c80 20 74 6f 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c   to load any fil
20c90 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 64  es if instructed
20ca0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
20cb0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
20cc0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
20cd0 28 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c 65 73  (loadSqliteFiles
20ce0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
20cf0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
20d00 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c  fo exists ::no(l
20d10 6f 61 64 53 71 6c 69 74 65 49 6d 70 6c 69 63 69  oadSqliteImplici
20d20 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  tFiles)]} then {
20d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20d40 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20  tryLoadAssembly
20d50 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
20d60 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20  te.dll..
20d70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
20d80 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
20d90 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64  exists ::no(load
20da0 53 71 6c 69 74 65 4c 69 6e 71 46 69 6c 65 73 29  SqliteLinqFiles)
20db0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
20dc0 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64           tryLoad
20dd0 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
20de0 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
20df0 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  .dll..
20e00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
20e10 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
20e20 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71  ists ::no(loadSq
20e30 6c 69 74 65 45 66 36 46 69 6c 65 73 29 5d 7d 20  liteEf6Files)]}
20e40 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
20e50 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73        tryLoadAss
20e60 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74  embly System.Dat
20e70 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c  a.SQLite.EF6.dll
20e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20e90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
20ea0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
20eb0 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65   ::no(loadSqlite
20ec0 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73  NonImplicitFiles
20ed0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
20ee0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
20ef0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
20f00 28 6c 6f 61 64 53 71 6c 69 74 65 50 6c 61 74 66  (loadSqlitePlatf
20f10 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  ormFiles)] && \.
20f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
20f30 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
20f40 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30  h $platform] > 0 20f50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 20f60 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 20f70 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 20f80 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 20f90 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20$platform..
20fa0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
20fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
20fc0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
20fd0 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 41 72  :no(loadSqliteAr
20fe0 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29  chitectureFiles)
20ff0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
21000 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
21010 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 21020 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 21030 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 21040 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 tryLoadAsse 21050 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 mbly System.Data 21060 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 .SQLite.dll$arc
21070 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20  hitecture..
21080 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
21090 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
210a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
210b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  }....        for
210c0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c  each fileNameOnl
210d0 79 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62 72  y [getNativeLibr
210e0 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79  aryFileNamesOnly
210f0 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  ] {..          c
21100 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
21110 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 21120 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 21130 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 21140 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 21150 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c ile version of \ 21160 22 22 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 ""$fileNameOnly
21170 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20   "\"... \"" \..
21180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
21190 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65  file version [ge
211a0 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
211b0 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20  $fileNameOnly]] 211c0 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 211d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 211e0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach 211f0 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 fileNameOnly [g 21200 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c etInteropAssembl 21210 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 yFileNamesOnly] 21220 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 {.. cat 21230 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 21240 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
21250 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
21260 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
21270 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
21280 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22  e version of \""
21290 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22   $fileNameOnly " 212a0 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 \"... \"" \.. 212b0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 212c0 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 le version [getB 212d0 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 inaryFileName$f
212e0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22  ileNameOnly]] \"
212f0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
21300 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
21310 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
21320 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
21330 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 21340 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 21350 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 21360 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 -- file version 21370 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 of \"System.Data 21380 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e .SQLite.dll\"... 21390 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 213a0 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 [file vers 213b0 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ion [getBinaryFi 213c0 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 leName System.Da 213d0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20 ta.SQLite.dll]] 213e0 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d \"\n].. } 213f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 .... catc 21400 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 h {.. t 21410 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
21420 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
21430 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
21440 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72    "---- file ver
21450 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d  sion of \"System
21460 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
21470 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22 20 5c  q.dll\"... \"" \
21480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21490 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67  [file version [g
214a0 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
214b0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
214c0 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 5c  ite.Linq.dll]] \
214d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
214e0 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  \"\n]..        }
214f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
21500 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
21510 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 21520 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 21530 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21540 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 21550 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d sion of \"System 21560 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 .Data.SQLite.EF6 21570 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d .dll\"... \"" \. 21580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 21590 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 file version [ge 215a0 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 215b0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 215c0 74 65 2e 45 46 36 2e 64 6c 6c 5d 5d 20 5c 0d 0a te.EF6.dll]] \.. 215d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 22 \" 215e0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. 215f0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s 21600 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c tring length$pl
21610 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65  atform] > 0} the
21620 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66  n {..          f
21630 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f  oreach fileNameO
21640 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c 69  nly [getNativeLi
21650 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e  braryFileNamesOn
21660 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ly] {..
21670 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
21680 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
21690 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 216a0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 216b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 216c0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 "---- file vers 216d0 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 ion of \""$plat
216e0 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20  form \..
216f0 20 20 20 20 20 20 20 20 20 20 2f 20 24 66 69 6c            / $fil 21700 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e eNameOnly "\"... 21710 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 \"" [file versi 21720 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 on \.. 21730 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 [getBina 21740 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ryFileName$file
21750 4e 61 6d 65 4f 6e 6c 79 20 24 70 6c 61 74 66 6f  NameOnly $platfo 21760 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 rm]] \"\n].. 21770 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 21780 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 21790 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 217a0 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 NameOnly [getInt 217b0 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 eropAssemblyFile 217c0 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 NamesOnly] {.. 217d0 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 catch 217e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 217f0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
21800 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
21810 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
21820 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
21830 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
21840 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20  " $platform \.. 21850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21860 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 /$fileNameOnly
21870 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c   "\"... \"" [fil
21880 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20  e version \..
21890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
218a0 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
218b0 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  e $fileNameOnly 218c0 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e$platform]] \"\n
218d0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
218e0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
218f0 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68  .          catch
21900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
21910 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 21920 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 21930 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 21940 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 21950 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 version of \""$
21960 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20  platform \..
21970 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 79              "/Sy
21980 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
21990 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66  .dll\"... \"" [f
219a0 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20  ile version \..
219b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
219c0 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
219d0 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
219e0 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f  Lite.dll $platfo 219f0 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 rm]] \"\n].. 21a00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 21a10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 21a20 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 21a30 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20$architecture]
21a40 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
21a50 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
21a60 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74  ileNameOnly [get
21a70 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c  NativeLibraryFil
21a80 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20  eNamesOnly] {..
21a90 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
21aa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
21ab0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 21ac0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 21ad0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 21ae0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 21af0 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c ile version of \ 21b00 22 22 20 24 61 72 63 68 69 74 65 63 74 75 72 65 ""$architecture
21b10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
21b20 20 20 20 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d        / $fileNam 21b30 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 eOnly "\"... \"" 21b40 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c [file version \ 21b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 21b60 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 [getBinaryFi 21b70 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 leName$fileName
21b80 4f 6e 6c 79 20 24 61 72 63 68 69 74 65 63 74 75  Only $architectu 21b90 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 re]] \"\n].. 21ba0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 21bb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 21bc0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 21bd0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
21be0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
21bf0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
21c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
21c10 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e  --- file version
21c20 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65   of \"" $archite 21c30 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 cture \.. 21c40 20 20 20 20 20 20 20 20 20 2f 20 24 66 69 6c 65 /$file
21c50 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20  NameOnly "\"...
21c60 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f  \"" [file versio
21c70 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
21c80 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46       [getBinaryF
21c90 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam 21ca0 65 4f 6e 6c 79 20 24 61 72 63 68 69 74 65 63 74 eOnly$architect
21cb0 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20  ure]] \"\n]..
21cc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
21cd0 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
21ce0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
21cf0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 21d00 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 21d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21d20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 21d30 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 on of \""$archi
21d40 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20  tecture \..
21d50 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 79 73             "/Sys
21d60 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
21d70 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69  dll\"... \"" [fi
21d80 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20  le version \..
21d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67                [g
21da0 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
21db0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
21dc0 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65  ite.dll $archite 21dd0 63 74 75 72 65 5d 5d 20 5c 0d 0a 20 20 20 20 20 cture]] \.. 21de0 20 20 20 20 20 20 20 20 20 20 20 5c 22 5c 6e 5d \"\n] 21df0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 21e00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 21e10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 21e20 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 NOTE: Grab the 21e30 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 list of managed 21e40 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 20 74 assemblies for t 21e50 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 he current proce 21e60 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ss.. # 21e70 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 20 6f and report o 21e80 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 n the System.Dat 21e90 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 a.SQLite related 21ea0 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 ones... 21eb0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 21ec0 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 haveSQLiteObject 21ed0 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b Command]} then { 21ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 21ef0 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 assemblies [obje 21f00 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d ct invoke AppDom 21f10 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 ain.CurrentDomai 21f20 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73 5d n GetAssemblies] 21f30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 .... ob 21f40 6a 65 63 74 20 66 6f 72 65 61 63 68 20 61 73 73 ject foreach ass 21f50 65 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 embly$assemblie
21f60 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
21f70 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74   if {[string mat
21f80 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61  ch \{System.Data
21f90 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65 6d 62  .SQLite* $assemb 21fa0 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ly]} then {.. 21fb0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 21fc0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
21fd0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
21fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21ff0 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f    "---- found lo
22000 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 22  aded assembly: "
22010 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a   $assembly \n].. 22020 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 22030 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 22040 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 22050 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 22060 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
22070 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
22080 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
22090 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74   define constant
220a0 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44  s for \"System.D
220b0 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20  ata.SQLite\"...
220c0 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  "....          i
220d0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
220e0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
220f0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
22100 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
22110 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
22120 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
22130 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e  QLite3 DefineCon
22140 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20  stants..
22150 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61    } defineConsta
22160 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  nts] == 0} then
22170 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
22180 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 22190 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 221a0 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 [formatList [ls 221b0 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ort \.. 221c0 20 20 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f$defineCo
221d0 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d  nstants] <none>]
221e0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
221f0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
22200 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 22210 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn 22220 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. 22230 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 22240 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 22250 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 22260 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
22270 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
22280 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20     "---- source
22290 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73  version of \"Sys
222a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
222b0 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  dll\"... "....
222c0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
222d0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
222e0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
222f0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
22300 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
22310 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
22320 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
22330 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65  nnection Provide
22340 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  rVersion..
22350 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d      } version] =
22360 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
22370 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
22380 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72  ring length $ver 22390 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then 223a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 223b0 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 set version nu 223c0 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 223d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 }.. t 223e0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
223f0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
22400 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20   $version \n].. 22410 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 22420 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 22430 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
22440 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a  nnel unknown\n..
22450 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
22460 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
22470 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
22480 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 22490 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 224a0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 224b0 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 - source checkou 224c0 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 t of \"System.Da 224d0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e ta.SQLite.dll\". 224e0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 224f0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 22500 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 22510 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 22520 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 22530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 22540 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 22550 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 e.SQLiteConnecti 22560 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 on ProviderSourc 22570 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 7d eId.. } 22580 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d sourceId] == 0} 22590 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 225a0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 225b0 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 length$sourceI
225c0 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  d] == 0} then {.
225d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
225e0 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c  et sourceId null
225f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22600 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
22610 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 22620 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
22630 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20  sourceId \n]..
22640 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
22650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
22660 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 22670 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 nel unknown\n.. 22680 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 22690 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 226a0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 226b0 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 TE: Check the av 226c0 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 ailable builds ( 226d0 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 and "releases") 226e0 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 of SQLite and.. 226f0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 # S 22700 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 22710 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 22720 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 22730 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 QLiteBuilds$::t
22740 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  est_channel..
22750 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
22760 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74  iteReleases $::t 22770 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 22780 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 22790 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 # NOTE: Now, w 227a0 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 e need to know i 227b0 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 f the SQLite cor 227c0 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 e library is ava 227d0 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 ilable.. 227e0 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 # (i.e. be 227f0 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 cause the manage 22800 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 d-only System.Da 22810 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 ta.SQLite assemb 22820 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 ly can.. 22830 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 # load wit 22840 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 hout it; however 22850 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 , it cannot do a 22860 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 nything useful w 22870 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 ithout.. 22880 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 # it). If 22890 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 we are using th 228a0 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 228b0 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 embly and we alr 228c0 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 eady.. # 228d0 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 found it ( 228e0 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f above), this sho 228f0 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 uld always succe 22900 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ed... #.. 22910 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 22920 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a SQLiteLibrary$:
22930 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
22940 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
22950 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
22960 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  k if the SQLite
22970 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
22980 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   is available...
22990 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
229a0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
229b0 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74  eInterop $::test 229c0 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 _channel.... 229d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 229e0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 NOTE: Check the 229f0 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 SQLite database 22a00 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 and temporary d 22a10 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 irectories... 22a20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 22a30 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 checkForSQLiteDi 22a40 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 rectories$::tes
22a50 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
22a60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
22a70 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
22a80 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  to determine if
22a90 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d  various compile-
22aa0 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65  time options nee
22ab0 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  ded for..
22ac0 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f   #       test co
22ad0 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 65  nstraints were e
22ae0 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d  nabled for the m
22af0 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e  anaged assembly.
22b00 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20    There..
22b10 20 23 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d   #       are som
22b20 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  e compile-time o
22b30 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74  ptions that must
22b40 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20   also have been
22b50 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20  enabled..
22b60 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65   #       for the
22b70 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
22b80 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65  y in order to be
22b90 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72   effective.  For
22ba0 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20   those..
22bb0 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c  #       options,
22bc0 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75   it will be assu
22bd0 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 73 20  med that it was
22be0 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20  enabled for the
22bf0 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20  interop..
22c00 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c   #       assembl
22c10 79 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 62  y if it was enab
22c20 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61  led for the mana
22c30 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ged assembly...
22c40 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
22c50 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65    foreach define
22c60 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c  Constant [list \
22c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 48  ..            CH
22c80 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f  ECK_STATE COUNT_
22c90 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54  HANDLE DEBUG INT
22ca0 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52  EROP_CODEC INTER
22cb0 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20  OP_DEBUG \..
22cc0 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f          INTEROP_
22cd0 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49  EXTENSION_FUNCTI
22ce0 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 35  ONS INTEROP_FTS5
22cf0 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20  _EXTENSION \..
22d00 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f            INTERO
22d10 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20  P_INCLUDE_CEROD
22d20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
22d30 45 58 54 52 41 20 49 4e 54 45 52 4f 50 5f 49 4e  EXTRA INTEROP_IN
22d40 43 4c 55 44 45 5f 53 45 45 20 5c 0d 0a 20 20 20  CLUDE_SEE \..
22d50 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50           INTEROP
22d60 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 20  _INCLUDE_ZIPVFS
22d70 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58  INTEROP_JSON1_EX
22d80 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  TENSION \..
22d90 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 4c         INTEROP_L
22da0 45 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45  EGACY_CLOSE INTE
22db0 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50 5f  ROP_LOG INTEROP_
22dc0 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e  PERCENTILE_EXTEN
22dd0 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20  SION \..
22de0 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45      INTEROP_REGE
22df0 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54  XP_EXTENSION INT
22e00 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53  EROP_TEST_EXTENS
22e10 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ION \..
22e20 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50     INTEROP_TOTYP
22e30 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45  E_EXTENSION INTE
22e40 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
22e50 45 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20  E NET_20 NET_35
22e60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4e  \..            N
22e70 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 54  ET_40 NET_45 NET
22e80 5f 34 35 31 20 4e 45 54 5f 34 35 32 20 4e 45 54  _451 NET_452 NET
22e90 5f 34 36 20 4e 45 54 5f 34 36 31 20 4e 45 54 5f  _46 NET_461 NET_
22ea0 43 4f 4d 50 41 43 54 5f 32 30 20 5c 0d 0a 20 20  COMPACT_20 \..
22eb0 20 20 20 20 20 20 20 20 20 20 50 4c 41 54 46 4f            PLATFO
22ec0 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
22ed0 4f 52 4b 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49  ORK PRELOAD_NATI
22ee0 56 45 5f 4c 49 42 52 41 52 59 20 52 45 54 41 52  VE_LIBRARY RETAR
22ef0 47 45 54 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20  GETABLE \..
22f00 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 53 54         SQLITE_ST
22f10 41 4e 44 41 52 44 20 53 51 4c 49 54 45 5f 53 54  ANDARD SQLITE_ST
22f20 41 4e 44 41 52 44 5f 4c 49 42 52 41 52 59 5f 4e  ANDARD_LIBRARY_N
22f30 41 4d 45 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53  AME THROW_ON_DIS
22f40 50 4f 53 45 44 20 5c 0d 0a 20 20 20 20 20 20 20  POSED \..
22f50 20 20 20 20 20 54 52 41 43 45 20 54 52 41 43 45       TRACE TRACE
22f60 5f 43 4f 4e 4e 45 43 54 49 4f 4e 20 54 52 41 43  _CONNECTION TRAC
22f70 45 5f 44 45 54 45 43 54 49 4f 4e 20 54 52 41 43  E_DETECTION TRAC
22f80 45 5f 48 41 4e 44 4c 45 20 54 52 41 43 45 5f 50  E_HANDLE TRACE_P
22f90 52 45 4c 4f 41 44 20 5c 0d 0a 20 20 20 20 20 20  RELOAD \..
22fa0 20 20 20 20 20 20 54 52 41 43 45 5f 53 48 41 52        TRACE_SHAR
22fb0 45 44 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45  ED TRACE_STATEME
22fc0 4e 54 20 54 52 41 43 45 5f 57 41 52 4e 49 4e 47  NT TRACE_WARNING
22fd0 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59   TRACK_MEMORY_BY
22fe0 54 45 53 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  TES \..
22ff0 20 20 20 55 53 45 5f 45 4e 54 49 54 59 5f 46 52     USE_ENTITY_FR
23000 41 4d 45 57 4f 52 4b 5f 36 20 55 53 45 5f 49 4e  AMEWORK_6 USE_IN
23010 54 45 52 4f 50 5f 44 4c 4c 20 55 53 45 5f 50 52  TEROP_DLL USE_PR
23020 45 50 41 52 45 5f 56 32 20 57 49 4e 44 4f 57 53  EPARE_V2 WINDOWS
23030 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ] {..          #
23040 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
23050 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65  TE: Check if the
23060 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
23070 74 69 6f 6e 20 69 73 20 6c 69 73 74 65 64 20 69  tion is listed i
23080 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0d 0a 20  n the list of..
23090 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
230a0 20 22 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e   "define constan
230b0 74 73 22 20 6b 65 70 74 20 74 72 61 63 6b 20 6f  ts" kept track o
230c0 66 20 62 79 20 74 68 65 20 6d 61 6e 61 67 65 64  f by the managed
230d0 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20   assembly...
230e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
230f0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
23100 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20  eDefineConstant
23110 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 23120 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 0d$defineConstant.
23130 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
23140 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
23150 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
23160 66 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74  f the System.Dat
23170 61 2e 53 51 4c 69 74 65 20 70 72 6f 76 69 64 65  a.SQLite provide
23180 72 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77  r was compiled w
23190 69 74 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ith..        #
231a0 20 20 20 20 20 73 75 70 70 6f 72 74 20 66 6f 72       support for
231b0 20 61 6e 79 20 65 6e 63 72 79 70 74 65 64 20 64   any encrypted d
231c0 61 74 61 62 61 73 65 73 2e 0d 0a 20 20 20 20 20  atabases...
231d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
231e0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66   {[haveSQLiteDef
231f0 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45  ineConstant INTE
23200 52 4f 50 5f 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d  ROP_CODEC] || \.
23210 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 68 61  .            [ha
23220 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  veSQLiteDefineCo
23230 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f 49  nstant INTEROP_I
23240 4e 43 4c 55 44 45 5f 53 45 45 5d 7d 20 74 68 65  NCLUDE_SEE]} the
23250 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
23260 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
23270 54 45 3a 20 59 65 73 2c 20 61 64 64 20 67 65 6e  TE: Yes, add gen
23280 65 72 69 63 20 63 6f 6e 73 74 72 61 69 6e 74 20  eric constraint
23290 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74  for use by the t
232a0 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20  est suite...
232b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
232c0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
232d0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
232e0 69 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a  ite.Encryption..
232f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
23300 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
23310 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68  # NOTE: Check th
23320 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20  e current build
23330 79 65 61 72 2e 20 20 42 61 73 69 63 61 6c 6c 79  year.  Basically
23340 2c 20 74 68 69 73 20 69 6e 64 69 63 61 74 65 73  , this indicates
23350 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
23360 20 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20    which version
23370 6f 66 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f  of MSBuild and/o
23380 72 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  r Visual Studio
23390 77 61 73 20 75 73 65 64 20 74 6f 0d 0a 20 20 20  was used to..
233a0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d       #       com
233b0 70 69 6c 65 20 74 68 65 20 61 73 73 65 6d 62 6c  pile the assembl
233c0 79 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72  y binaries under
233d0 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 20   test...
233e0 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  #..        tputs
233f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 23400 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23410 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f 23420 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 or System.Data.S 23430 51 4c 69 74 65 20 62 75 69 6c 64 20 79 65 61 72 QLite build year 23440 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 ... ".... 23450 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 42 75 set year [getBu 23460 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 ildYear].. 23470 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 23480 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c [appendArgs buil 23490 64 59 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 dYear.$year]..
234a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 234b0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 234c0 70 65 6e 64 41 72 67 73 20 5c 22 20 24 79 65 61 pendArgs \"$yea
234d0 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  r \"\n]....
234e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
234f0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20  NOTE: Check the
23500 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 2e 4e  current build .N
23510 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 20 20 42  ET Framework.  B
23520 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 0d 0a  asically, this..
23530 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
23540 69 6e 64 69 63 61 74 65 73 20 77 68 69 63 68 20  indicates which
23550 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 2e  version of the .
23560 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 69 73  NET Framework is
23570 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20   being..
23580 23 20 20 20 20 20 20 20 75 73 65 64 20 62 79 20  #       used by
23590 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e  the assembly bin
235a0 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74  aries under test
235b0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
235c0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 235d0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 235e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 235f0 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 checking for Sy 23600 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 23610 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d build .NET Fram 23620 65 77 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 ework... ".... 23630 20 20 20 20 20 20 73 65 74 20 6e 65 74 46 78 20 set netFx 23640 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 78 5d 0d [getBuildNetFx]. 23650 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons 23660 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 23670 67 73 20 62 75 69 6c 64 46 72 61 6d 65 77 6f 72 gs buildFramewor 23680 6b 2e 20 24 6e 65 74 46 78 5d 0d 0a 20 20 20 20 k.$netFx]..
23690 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 236a0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 236b0 64 41 72 67 73 20 5c 22 20 24 6e 65 74 46 78 20 dArgs \"$netFx
236c0 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  \"\n]....
236d0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
236e0 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75  TE: Check the cu
236f0 72 72 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66  rrent build conf
23700 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 69 73  iguration.  This
23710 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79   should normally
23720 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
23730 20 20 62 65 20 65 69 74 68 65 72 20 22 44 65 62    be either "Deb
23740 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22  ug" or "Release"
23750 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
23760 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 23770 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 23780 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 23790 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 checking for Sy 237a0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 237b0 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 build configura 237c0 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 tion... ".... 237d0 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 75 set configu 237e0 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 ration [getBuild 237f0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a Configuration].. 23800 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 23810 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 23820 73 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 s buildConfigura 23830 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61 tion.$configura
23840 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74  tion]..        t
23850 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 23860 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 23870 20 5c 22 20 24 63 6f 6e 66 69 67 75 72 61 74 69 \"$configurati
23880 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  on \"\n]....
23890 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
238a0 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 73 65   NOTE: Try to se
238b0 74 75 70 20 61 6e 20 69 6e 74 65 72 72 75 70 74  tup an interrupt
238c0 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using
238d0 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67  the script debug
238e0 67 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ger..        #
238f0 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20 63       that will c
23900 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75  ancel all SQL qu
23910 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73  eries in progres
23920 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61  s for all databa
23930 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  se..        #
23940 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20      connections
23950 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 69 6e  known to this in
23960 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
23970 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
23980 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
23990 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65   ::no(sqliteInte
239a0 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d  rruptCallback)]}
239b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
239c0 20 20 20 73 65 74 75 70 44 62 49 6e 74 65 72 72     setupDbInterr
239d0 75 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74  uptCallback $::t 239e0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 est_channel$::t
239f0 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20  est_log..
23a00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
23a10 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
23a20 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 6e   Check for the n
23a30 61 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f 70  ative runtime op
23a40 74 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c  tion, which woul
23a50 64 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a 20  d mean we are..
23a60 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75         #       u
23a70 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d  sing the mixed-m
23a80 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ode assembly...
23a90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
23aa0 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d    checkForRuntim
23ab0 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f  eOption $::test_ 23ac0 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a channel native.. 23ad0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 23ae0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 23af0 63 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 73 ck if the test s 23b00 75 69 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e uite should coun 23b10 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 t the number of 23b20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 connections.. 23b30 20 20 20 20 20 23 20 20 20 20 20 20 20 22 6f 70 # "op 23b40 65 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 ened" and "close 23b50 64 22 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c d" from the pool 23b60 20 77 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e when determinin 23b70 67 20 69 66 20 61 20 74 65 73 74 0d 0a 20 20 20 g if a test.. 23b80 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 73 # pas 23b90 73 65 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 sed. Disabling 23ba0 74 68 69 73 20 62 65 68 61 76 69 6f 72 20 69 73 this behavior is 23bb0 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 sometimes neces 23bc0 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 sary (e.g... 23bd0 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 # duri 23be0 6e 67 20 74 68 65 20 72 65 6c 65 61 73 65 20 74 ng the release t 23bf0 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 29 20 esting process) 23c00 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 because there ar 23c10 65 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 e several.. 23c20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 73 # tests 23c30 20 74 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 that rely on th 23c40 65 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 e "opened from p 23c50 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 ool" count being 23c60 20 67 72 65 61 74 65 72 0d 0a 20 20 20 20 20 20 greater.. 23c70 20 20 23 20 20 20 20 20 20 20 74 68 61 6e 20 7a # than z 23c80 65 72 6f 2e 20 20 54 68 65 73 65 20 74 65 73 74 ero. These test 23c90 73 20 6d 61 79 20 66 61 69 6c 20 64 75 65 20 74 s may fail due t 23ca0 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d o the non-determ 23cb0 69 6e 69 73 74 69 63 0d 0a 20 20 20 20 20 20 20 inistic.. 23cc0 20 23 20 20 20 20 20 20 20 62 65 68 61 76 69 6f # behavio 23cd0 72 20 6f 66 20 74 68 65 20 43 4c 52 20 47 43 2c r of the CLR GC, 23ce0 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72 65 even when there 23cf0 20 69 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 is no bug in th 23d00 65 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 e code.. 23d10 23 20 20 20 20 20 20 20 62 65 69 6e 67 20 74 65 # being te 23d20 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 sted... # 23d30 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 23d40 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 orRuntimeOption 23d50 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
23d60 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a  noPoolCounts....
23d70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
23d80 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
23d90 20 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69   if the test sui
23da0 74 65 20 73 68 6f 75 6c 64 20 75 73 65 20 73 68  te should use sh
23db0 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e  ared-cache mode.
23dc0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
23dd0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e       checkForRun
23de0 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65  timeOption $::te 23df0 73 74 5f 63 68 61 6e 6e 65 6c 20 73 68 61 72 65 st_channel share 23e00 64 43 61 63 68 65 0d 0a 0d 0a 20 20 20 20 20 20 dCache.... 23e10 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 23e20 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 OTE: Report the 23e30 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 70 resource usage p 23e40 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 rior to running 23e50 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 any tests... 23e60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 23e70 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 eportSQLiteResou 23e80 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 rces$::test_cha
23e90 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nnel....
23ea0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
23eb0 45 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73 74  E: Grab the list
23ec0 20 6f 66 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c   of native modul
23ed0 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  es for the curre
23ee0 6e 74 20 70 72 6f 63 65 73 73 20 61 6e 64 0d 0a  nt process and..
23ef0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
23f00 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 79  report on the Sy
23f10 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
23f20 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a   related ones...
23f30 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
23f40 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69     if {[haveSQLi
23f50 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
23f60 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
23f70 20 20 20 20 73 65 74 20 6d 6f 64 75 6c 65 73 20      set modules
23f80 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c  [object invoke \
23f90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
23fa0 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69  System.Diagnosti
23fb0 63 73 2e 50 72 6f 63 65 73 73 2e 47 65 74 43 75  cs.Process.GetCu
23fc0 72 72 65 6e 74 50 72 6f 63 65 73 73 20 4d 6f 64  rrentProcess Mod
23fd0 75 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ules]....
23fe0 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63     object foreac
23ff0 68 20 2d 61 6c 69 61 73 20 6d 6f 64 75 6c 65 20  h -alias module
24000 24 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 20 20  $modules {.. 24010 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 24020 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 24030 68 65 20 6d 6f 64 75 6c 65 20 66 69 6c 65 20 6e he module file n 24040 61 6d 65 20 68 65 72 65 20 6d 75 73 74 20 62 65 ame here must be 24050 20 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d 0a 20 20 normalized... 24060 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 24070 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c set fil 24080 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d eName [file norm 24090 61 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 46 alize [$module F
240a0 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20  ileName]]..
240b0 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
240c0 61 6d 65 4f 6e 6c 79 20 5b 66 69 6c 65 20 74 61  ameOnly [file ta
240d0 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  il $fileName]... 240e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 240f0 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 {[lsearch -exact 24100 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 -nocase -- \.. 24110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 24120 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 getNativeLibrary 24130 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24 FileNamesOnly]$
24140 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d  fileNameOnly] !=
24150 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20   -1} then {..
24160 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
24170 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 24180 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 24190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 241a0 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f "---- found lo 241b0 61 64 65 64 20 53 51 4c 69 74 65 20 6e 61 74 69 aded SQLite nati 241c0 76 65 20 6c 69 62 72 61 72 79 20 6d 6f 64 75 6c ve library modul 241d0 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 e: " \.. 241e0 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e$fileN
241f0 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ame \n]..
24200 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
24210 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d  lsearch -exact -
24220 6e 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 20  nocase -- \..
24230 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
24240 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79  tInteropAssembly
24250 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24  FileNamesOnly] $24260 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d fileNameOnly] != 24270 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 -1} then {.. 24280 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 24290 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
242a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
242b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
242c0 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f    "---- found lo
242d0 61 64 65 64 20 53 51 4c 69 74 65 20 69 6e 74 65  aded SQLite inte
242e0 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 6d 6f 64  rop assembly mod
242f0 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ule: " \..
24300 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil 24310 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 eName \n].. 24320 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 24330 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 24340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 .... catc 24350 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 h {.. t 24360 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
24370 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
24380 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70        "---- comp
24390 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
243a0 20 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65   for SQLite core
243b0 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d   library... "...
243c0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
243d0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
243e0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
243f0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
24400 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
24410 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
24420 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
24430 65 33 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65  e3 SQLiteCompile
24440 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  Options..
24450 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69     } compileOpti
24460 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ons] == 0} then
24470 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
24480 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 24490 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 244a0 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 [formatList [ls 244b0 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ort \.. 244c0 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f$compileO
244d0 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20  ptions] <none>]
244e0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
244f0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
24500 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 24510 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f st_channel unkno 24520 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 wn\n.. 24530 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 24540 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 24550 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 24560 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
24570 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24580 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d    "---- compile-
24590 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72  time options for
245a0 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20   SQLite interop
245b0 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d  assembly... "...
245c0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
245d0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
245e0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
245f0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
24600 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
24610 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
24620 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
24630 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c  e3 InteropCompil
24640 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  eOptions..
24650 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74      } compileOpt
24660 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ions] == 0} then
24670 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
24680 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 24690 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 246a0 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c s [formatList [l 246b0 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 sort \.. 246c0 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65$compile
246d0 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d  Options] <none>]
246e0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
246f0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
24700 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 24710 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn 24720 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. 24730 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 24740 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 24750 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 # NOTE: Show 24760 20 74 68 65 20 61 63 74 69 76 65 20 74 65 73 74 the active test 24770 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 constraints... 24780 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 24790 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
247a0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
247b0 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72  rgs "---- constr
247c0 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20  aints: " \..
247d0 20 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c          [formatL
247e0 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43  ist [lsort [getC
247f0 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f  onstraints]] <no
24800 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  ne>] \n]....
24810 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
24820 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the
24830 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  test constraints
24840 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 72 65   for use by thre
24850 61 64 73 20 63 72 65 61 74 65 64 20 69 6e 20 74  ads created in t
24860 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  his..        #
24870 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e       application
24880 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20 69   domain.  This i
24890 73 20 6e 65 63 65 73 73 61 72 79 20 62 65 63 61  s necessary beca
248a0 75 73 65 20 61 6c 6c 20 74 68 65 20 45 61 67 6c  use all the Eagl
248b0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
248c0 20 20 20 22 74 65 73 74 20 63 6f 6e 74 65 78 74     "test context
248d0 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  " information is
248e0 20 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20   per-thread...
248f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
24900 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
24910 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72  ts ::test_constr
24920 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a  aints]} then {..
24930 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
24940 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73  test_constraints
24950 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28   $::eagle_tests( 24960 63 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 constraints).. 24970 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 24980 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 24990 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 NOTE: Load the " 249a0 61 66 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 after-constraint 249b0 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 s" custom per-us 249c0 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f er and/or per-ho 249d0 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 249e0 20 20 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 test setting 249f0 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 s now... 24a00 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 #.. uplev 24a10 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 el 1 [list loadS 24a20 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 QLiteTestSetting 24a30 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
24a40 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20  l .after]....
24a50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
24a60 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73  # NOTE: If neces
24a70 73 61 72 79 2c 20 65 6e 61 62 6c 65 20 73 68 61  sary, enable sha
24a80 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e  red-cache mode n
24a90 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
24aa0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73          if {[has
24ab0 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68  RuntimeOption sh
24ac0 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65 6e  aredCache]} then
24ad0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6e   {..          en
24ae0 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20  ableSharedCache
24af0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 24b00 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d true.. }. 24b10 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 24b20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh 24b30 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 ow when our test 24b40 73 20 61 63 74 75 61 6c 6c 79 20 62 65 67 61 6e s actually began 24b50 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 (now)... 24b60 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 24b70 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
24b80 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
24b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
24ba0 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  -- System.Data.S
24bb0 51 4c 69 74 65 20 74 65 73 74 73 20 62 65 67 61  QLite tests bega
24bc0 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20  n at " \..
24bd0 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72        [clock for
24be0 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e  mat [clock secon
24bf0 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  ds]] \n]..
24c00 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
24c10 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54   proc runSQLiteT
24c20 65 73 74 46 69 6c 65 73 50 72 6f 6c 6f 67 75 65  estFilesPrologue
24c30 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c   {} {..      upl
24c40 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20  evel 1 {..
24c50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
24c60 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65 20 76  OTE: Setup the v
24c70 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 72 65  ariables that re
24c80 66 65 72 20 74 6f 20 74 68 65 20 76 61 72 69 6f  fer to the vario
24c90 75 73 20 6e 6f 6e 2d 64 61 74 61 20 66 69 6c 65  us non-data file
24ca0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
24cb0 20 20 20 72 65 71 75 69 72 65 64 20 62 79 20 74     required by t
24cc0 68 65 20 74 65 73 74 73 20 69 6e 20 74 68 69 73  he tests in this
24cd0 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...
24ce0 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 65  #..        set e
24cf0 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c  ntityFrameworkDl
24d00 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20  lFile \..
24d10 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69       [getBuildFi
24d20 6c 65 4e 61 6d 65 20 45 6e 74 69 74 79 46 72 61  leName EntityFra
24d30 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 0d 0a 0d 0a 20  mework.dll]....
24d40 20 20 20 20 20 20 20 73 65 74 20 69 6e 73 74 61         set insta
24d50 6c 6c 65 72 45 78 65 46 69 6c 65 20 5b 67 65 74  llerExeFile [get
24d60 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 49 6e  BuildFileName In
24d70 73 74 61 6c 6c 65 72 2e 65 78 65 5d 0d 0a 20 20  staller.exe]..
24d80 20 20 20 20 20 20 73 65 74 20 73 71 6c 69 74 65        set sqlite
24d90 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20  DesignerDllFile
24da0 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
24db0 65 20 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65  e SQLite.Designe
24dc0 72 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20  r.dll]....
24dd0 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61    set systemData
24de0 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d  SQLiteDllFile \.
24df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
24e00 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53  tBuildFileName S
24e10 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
24e20 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20  e.dll]....
24e30 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61    set systemData
24e40 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c  SQLiteLinqDllFil
24e50 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
24e60 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
24e70 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  me System.Data.S
24e80 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 0d  QLite.Linq.dll].
24e90 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 73  ...        set s
24ea0 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45  ystemDataSQLiteE
24eb0 66 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20  f6DllFile \..
24ec0 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69           [getBui
24ed0 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65  ldFileName Syste
24ee0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46  m.Data.SQLite.EF
24ef0 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20  6.dll]....
24f00 20 20 73 65 74 20 74 65 73 74 45 78 65 46 69 6c    set testExeFil
24f10 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  e [getBuildFileN
24f20 61 6d 65 20 74 65 73 74 2e 65 78 65 5d 0d 0a 20  ame test.exe]..
24f30 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 4c         set testL
24f40 69 6e 71 45 78 65 46 69 6c 65 20 5b 67 65 74 42  inqExeFile [getB
24f50 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74 65 73  uildFileName tes
24f60 74 6c 69 6e 71 2e 65 78 65 5d 0d 0a 20 20 20 20  tlinq.exe]..
24f70 20 20 20 20 73 65 74 20 74 65 73 74 45 66 36 45      set testEf6E
24f80 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64  xeFile [getBuild
24f90 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 65 66 36  FileName testef6
24fa0 2e 65 78 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .exe]....
24fb0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
24fc0 54 45 3a 20 53 65 74 75 70 20 74 68 65 20 76 61  TE: Setup the va
24fd0 72 69 61 62 6c 65 73 20 74 68 61 74 20 72 65 66  riables that ref
24fe0 65 72 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75  er to the variou
24ff0 73 20 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 20  s data files..
25000 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
25010 71 75 69 72 65 64 20 62 79 20 74 68 65 20 74 65  quired by the te
25020 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65  sts in this file
25030 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
25040 20 20 20 20 20 20 73 65 74 20 74 65 73 74 4c 69        set testLi
25050 6e 71 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65 20  nqOutFile [file
25060 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
25070 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
25080 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
25090 65 73 74 44 61 74 61 50 61 74 68 5d 20 74 65 73  estDataPath] tes
250a0 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20  tlinq.out]]....
250b0 20 20 20 20 20 20 20 73 65 74 20 6e 6f 72 74 68         set north
250c0 77 69 6e 64 45 66 44 62 46 69 6c 65 20 5b 66 69  windEfDbFile [fi
250d0 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
250e0 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
250f0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 64 69          [file di
25100 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e  rname [file dirn
25110 61 6d 65 20 5b 67 65 74 53 51 4c 69 74 65 54 65  ame [getSQLiteTe
25120 73 74 44 61 74 61 50 61 74 68 5d 5d 5d 20 5c 0d  stDataPath]]] \.
25130 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
25140 74 6c 69 6e 71 20 6e 6f 72 74 68 77 69 6e 64 45  tlinq northwindE
25150 46 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  F.db]]....
25160 20 20 73 65 74 20 6e 6f 6e 57 61 6c 44 62 46 69    set nonWalDbFi
25170 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
25180 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
25190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
251a0 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
251b0 50 61 74 68 5d 20 6e 6f 6e 57 61 6c 2e 64 62 5d  Path] nonWal.db]
251c0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
251d0 20 77 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65   walDbFile [file
251e0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
251f0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
25200 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
25210 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 77 61  TestDataPath] wa
25220 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  l.db]]....
25230 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
25240 4f 54 45 3a 20 54 68 65 20 76 61 72 69 6f 75 73  OTE: The various
25250 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e 73 74 61   install/uninsta
25260 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20 75 73 65  ll log files use
25270 64 20 74 6f 20 74 65 73 74 20 74 68 65 0d 0a 20  d to test the..
25280 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64         #       d
25290 65 73 69 67 6e 2d 74 69 6d 65 20 63 6f 6d 70 6f  esign-time compo
252a0 6e 65 6e 74 20 69 6e 73 74 61 6c 6c 65 72 2e 0d  nent installer..
252b0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
252c0 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74      set testInst
252d0 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65  allVs2005LogFile
252e0 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
252f0 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
25300 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
25310 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
25320 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65  th] Installer_Te
25330 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d  st_Vs2005.log]].
25340 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  ...        set t
25350 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38  estInstallVs2008
25360 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  LogFile [file na
25370 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
25380 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
25390 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
253a0 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61  tDataPath] Insta
253b0 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38  ller_Test_Vs2008
253c0 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
253d0 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c    set testInstal
253e0 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b  lVs2010LogFile [
253f0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
25400 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
25410 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51            [getSQ
25420 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
25430 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74  ] Installer_Test
25440 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d  _Vs2010.log]]...
25450 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73  .        set tes
25460 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f  tInstallVs2012Lo
25470 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
25480 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
25490 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
254a0 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
254b0 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c  ataPath] Install
254c0 65 72 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c  er_Test_Vs2012.l
254d0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
254e0 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56  set testInstallV
254f0 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69  s2013LogFile [fi
25500 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
25510 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
25520 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
25530 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
25540 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  Installer_Test_V
25550 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2013.log]]....
25560 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49         set testI
25570 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46  nstallVs2015LogF
25580 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
25590 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
255a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
255b0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
255c0 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72  aPath] Installer
255d0 5f 54 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67  _Test_Vs2015.log
255e0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  ]]....        se
255f0 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56  t testUninstallV
25600 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69  s2005LogFile [fi
25610 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
25620 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
25630 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
25640 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
25650 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74  Uninstaller_Test
25660 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d  _Vs2005.log]]...
25670 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73  .        set tes
25680 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38  tUninstallVs2008
25690 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  LogFile [file na
256a0 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
256b0 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
256c0 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
256d0 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73  tDataPath] Unins
256e0 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30  taller_Test_Vs20
256f0 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20  08.log]]....
25700 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e      set testUnin
25710 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69  stallVs2010LogFi
25720 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
25730 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
25740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
25750 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
25760 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65  Path] Uninstalle
25770 72 5f 54 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f  r_Test_Vs2010.lo
25780 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  g]]....        s
25790 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c  et testUninstall
257a0 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 5b 66  Vs2012LogFile [f
257b0 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
257c0 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
257d0 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
257e0 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
257f0 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73   Uninstaller_Tes
25800 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a  t_Vs2012.log]]..
25810 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
25820 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
25830 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  3LogFile [file n
25840 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
25850 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
25860 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
25870 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e  stDataPath] Unin
25880 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
25890 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  013.log]]....
258a0 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69       set testUni
258b0 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46  nstallVs2015LogF
258c0 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
258d0 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
258e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
258f0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
25900 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c  aPath] Uninstall
25910 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e 6c  er_Test_Vs2015.l
25920 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
25930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25970 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20  #######....
25980 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
25990 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
259a0 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
259b0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
259c0 61 69 6c 20 24 65 6e 74 69 74 79 46 72 61 6d 65  ail $entityFrame 259d0 77 6f 72 6b 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 workDllFile]]]} 259e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 259f0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
25a00 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 65 6e  test_channel $en 25a10 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c tityFrameworkDll 25a20 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 25a30 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 25a40 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 25a50 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 25a60 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 25a70 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 69 6e 73 [file tail$ins
25a80 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 5d 5d 5d  tallerExeFile]]]
25a90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
25aa0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
25ab0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
25ac0 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65  installerExeFile
25ad0 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 0d 0a   Installer.exe..
25ae0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
25af0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43       if {![haveC
25b00 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
25b10 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20  dArgs file_ \..
25b20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
25b30 20 74 61 69 6c 20 24 73 71 6c 69 74 65 44 65 73   tail $sqliteDes 25b40 69 67 6e 65 72 44 6c 6c 46 69 6c 65 5d 5d 5d 7d ignerDllFile]]]} 25b50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 25b60 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 25b70 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73$test_channel $s 25b80 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c qliteDesignerDll 25b90 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 25ba0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 25bb0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 25bc0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 25bd0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 25be0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 73 [file tail$sys
25bf0 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
25c00 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
25c10 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
25c20 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 25c30 61 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 annel$systemDat
25c40 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 0d 0a  aSQLiteDllFile..
25c50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
25c60 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43       if {![haveC
25c70 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
25c80 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20  dArgs file_ \..
25c90 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
25ca0 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74   tail $systemDat 25cb0 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 aSQLiteLinqDllFi 25cc0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 25cd0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 25ce0 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
25cf0 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53  nel $systemDataS 25d00 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 QLiteLinqDllFile 25d10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 25d20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 25d30 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 25d40 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 25d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 25d60 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 le tail$systemD
25d70 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46  ataSQLiteEf6DllF
25d80 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ile]]]} then {..
25d90 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
25da0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 25db0 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 nnel$systemData
25dc0 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65  SQLiteEf6DllFile
25dd0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
25de0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
25df0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
25e00 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
25e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
25e20 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45 78 65  le tail $testExe 25e30 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 25e40 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 25e50 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
25e60 61 6e 6e 65 6c 20 24 74 65 73 74 45 78 65 46 69  annel $testExeFi 25e70 6c 65 20 74 65 73 74 2e 65 78 65 0d 0a 20 20 20 le test.exe.. 25e80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 25e90 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 25ea0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 25eb0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 25ec0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 25ed0 69 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 il$testLinqExeF
25ee0 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ile]]]} then {..
25ef0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
25f00 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 25f10 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 nnel$testLinqEx
25f20 65 46 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e 65  eFile testlinq.e
25f30 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  xe..        }...
25f40 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
25f50 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
25f60 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
25f70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
25f80 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45  file tail $testE 25f90 66 36 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 f6ExeFile]]]} th 25fa0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 25fb0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
25fc0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 25fd0 45 66 36 45 78 65 46 69 6c 65 20 74 65 73 74 65 Ef6ExeFile teste 25fe0 66 36 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 f6.exe.. 25ff0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 26000 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 26010 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 26020 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 26030 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 [file tail$t
26040 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 5d 5d  estLinqOutFile]]
26050 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
26060 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
26070 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 26080 24 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65$testLinqOutFile
26090 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
260a0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
260b0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
260c0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
260d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
260e0 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68 77 69  le tail $northwi 260f0 6e 64 45 66 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 ndEfDbFile]]]} t 26100 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 26110 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
26120 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 72  est_channel $nor 26130 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 0d 0a thwindEfDbFile.. 26140 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 26150 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 26160 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 26170 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 26180 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 26190 20 74 61 69 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 tail$nonWalDbF
261a0 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ile]]]} then {..
261b0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
261c0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 261d0 6e 6e 65 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 nnel$nonWalDbFi
261e0 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  le..        }...
261f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
26200 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
26210 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
26220 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
26230 66 69 6c 65 20 74 61 69 6c 20 24 77 61 6c 44 62  file tail $walDb 26240 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 26250 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 26260 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
26270 61 6e 6e 65 6c 20 24 77 61 6c 44 62 46 69 6c 65  annel $walDbFile 26280 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 26290 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 262a0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 262b0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 262c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 262d0 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 le tail$testIns
262e0 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c  tallVs2005LogFil
262f0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
26300 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
26310 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 26320 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 el$testInstallV
26330 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20  s2005LogFile..
26340 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
26350 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
26360 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
26370 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
26380 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
26390 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c  ail $testInstall 263a0 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d Vs2008LogFile]]] 263b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 263c0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 263d0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $263e0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 testInstallVs200 263f0 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 8LogFile.. 26400 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 26410 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 26420 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 26430 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 26440 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 26450 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
26460 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68  10LogFile]]]} th
26470 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
26480 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 26490 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 st_channel$test
264a0 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67  InstallVs2010Log
264b0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
264c0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
264d0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
264e0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
264f0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
26500 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 26510 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f tInstallVs2012Lo 26520 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b gFile]]]} then { 26530 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 26540 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
26550 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74  hannel $testInst 26560 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 allVs2012LogFile 26570 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 26580 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 26590 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 265a0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 265b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 265c0 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 le tail$testIns
265d0 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c  tallVs2013LogFil
265e0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
265f0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
26600 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 26610 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 el$testInstallV
26620 73 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20  s2013LogFile..
26630 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
26640 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
26650 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
26660 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
26670 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
26680 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c  ail $testInstall 26690 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d Vs2015LogFile]]] 266a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 266b0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 266c0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $266d0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 266e0 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 5LogFile.. 266f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 26700 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 26710 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 26720 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 26730 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 26740 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
26750 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20  2005LogFile]]]}
26760 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
26770 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $26780 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 test_channel$te
26790 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30  stUninstallVs200
267a0 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20  5LogFile..
267b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
267c0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
267d0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
267e0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
267f0 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
26800 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 26810 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 2008LogFile]]]} 26820 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 26830 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
26840 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te 26850 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 stUninstallVs200 26860 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 8LogFile.. 26870 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 26880 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 26890 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 268a0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 268b0 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 268c0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
268d0 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20  2010LogFile]]]}
268e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
268f0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $26900 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 test_channel$te
26910 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
26920 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20  0LogFile..
26930 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
26940 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
26950 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
26960 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
26970 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
26980 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 26990 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 2012LogFile]]]} 269a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 269b0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
269c0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te 269d0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 269e0 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 2LogFile.. 269f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 26a00 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 26a10 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 26a20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 26a30 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 26a40 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
26a50 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20  2013LogFile]]]}
26a60 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
26a70 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $26a80 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 test_channel$te
26a90 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
26aa0 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20  3LogFile..
26ab0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
26ac0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
26ad0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
26ae0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
26af0 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
26b00 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 26b10 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 2015LogFile]]]} 26b20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 26b30 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
26b40 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te 26b50 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 26b60 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 5LogFile.. 26b70 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 26b80 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 26b90 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 runSQLiteTestFi 26ba0 6c 65 73 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b lesEpilogue {} { 26bb0 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 .. uplevel 26bc0 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 1 {.. uns 26bd0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c et -nocomplain \ 26be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 .. te 26bf0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 26c00 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e 69 5LogFile testUni 26c10 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 nstallVs2013LogF 26c20 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 26c30 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c testUninstall 26c40 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 74 65 Vs2012LogFile te 26c50 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 26c60 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 0LogFile \.. 26c70 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e testUnin 26c80 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 stallVs2008LogFi 26c90 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c le testUninstall 26ca0 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5c 0d Vs2005LogFile \. 26cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 . tes 26cc0 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f tInstallVs2015Lo 26cd0 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c gFile testInstal 26ce0 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5c lVs2013LogFile \ 26cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 .. te 26d00 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c stInstallVs2012L 26d10 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 ogFile testInsta 26d20 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 llVs2010LogFile 26d30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 26d40 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 estInstallVs2008 26d50 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 LogFile testInst 26d60 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 allVs2005LogFile 26d70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 .... unse 26d80 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d t -nocomplain \. 26d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 72 . nor 26da0 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 74 thwindEfDbFile t 26db0 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c estLinqOutFile \ 26dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 61 .. wa 26dd0 6c 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 lDbFile nonWalDb 26de0 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 File.... 26df0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 26e00 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 26e10 20 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 testEf6ExeFile 26e20 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 testLinqExeFile 26e30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 26e40 65 73 74 45 78 65 46 69 6c 65 20 73 79 73 74 65 estExeFile syste 26e50 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c mDataSQLiteEf6Dl 26e60 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 lFile \.. 26e70 20 20 20 20 20 73 79 73 74 65 6d 44 61 74 61 53 systemDataS 26e80 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 QLiteLinqDllFile 26e90 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 systemDataSQLit 26ea0 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 eDllFile \.. 26eb0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 44 65 sqliteDe 26ec0 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 69 6e signerDllFile in 26ed0 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c stallerExeFile \ 26ee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e .. en 26ef0 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c tityFrameworkDll 26f00 46 69 6c 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 File.. }.. 26f10 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 26f20 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 c runSQLiteTestE 26f30 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 pilogue {} {.. 26f40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 26f50 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e OTE: Skip runnin 26f60 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 69 g our custom epi 26f70 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 logue if the mai 26f80 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a n one has been.. 26f90 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b # sk 26fa0 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d ipped... #. 26fb0 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 . if {![inf 26fc0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 o exists ::no(ep 26fd0 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 ilogue.eagle)]} 26fe0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 26ff0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 27000 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 E: Show when our 27010 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 tests actually 27020 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 ended (now)... 27030 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 27040 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
27050 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
27060 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
27070 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44    "---- System.D
27080 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73  ata.SQLite tests
27090 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a 20   ended at " \..
270a0 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63             [cloc
270b0 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20  k format [clock
270c0 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d  seconds]] \n]...
270d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
270e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64      # NOTE: Load
270f0 20 74 68 65 20 22 65 70 69 6c 6f 67 75 65 22 20   the "epilogue"
27100 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20  custom per-user
27110 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20  and/or per-host
27120 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  test..        #
27130 20 20 20 20 20 20 73 65 74 74 69 6e 67 73 20 6e        settings n
27140 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
27150 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20          uplevel
27160 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69  1 [list loadSQLi
27170 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24  teTestSettings $27180 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e ::test_channel . 27190 65 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a 20 20 20 epilogue].... 271a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 271b0 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 # BUGFIX: Before 271c0 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66 69 checking the fi 271d0 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69 6e nal resources in 271e0 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c 20 use by SQLite, 271f0 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 20 make.. # 27200 20 20 20 20 20 20 20 20 73 75 72 65 20 62 6f 74 sure bot 27210 68 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 h of the PRAGMA 27220 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 related director 27230 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 y names are free 27240 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 27250 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 27260 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 QLiteDirectories 27270 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
27280 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20   true....
27290 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
272a0 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74 20  TE: Also report
272b0 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61  the resource usa
272c0 67 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67  ge after running
272d0 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20   the tests...
272e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
272f0 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f  reportSQLiteReso
27300 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68  urces $::test_ch 27310 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 annel.... 27320 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 27330 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 63 TE: Report the c 27340 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 ritical handle c 27350 6f 75 6e 74 73 20 61 66 74 65 72 20 72 75 6e 6e ounts after runn 27360 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a ing the tests... 27370 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 27380 20 20 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 getSQLiteHand 27390 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73 74 leCounts$::test
273a0 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
273b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
273c0 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 73   NOTE: If necess
273d0 61 72 79 2c 20 64 69 73 61 62 6c 65 20 73 68 61  ary, disable sha
273e0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e  red-cache mode n
273f0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
27400 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73          if {[has
27410 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68  RuntimeOption sh
27420 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65 6e  aredCache]} then
27430 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6e   {..          en
27440 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20  ableSharedCache
27450 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  \$::test_channel
27460 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d  false..        }
27470 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
27480 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23 23 23  .....    #######
27490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274d0 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23  ####..    ######
274e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
274f0 23 23 23 23 23 23 23 20 45 4e 44 20 45 61 67 6c  ####### END Eagl
27500 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23 23  e ONLY #########
27510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27520 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23  #####..    #####
27530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
27570 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20  ######..  }....
27580 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61   #..  # NOTE: Sa
27590 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ve the name of t
275a0 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e  he directory con
275b0 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  taining this fil
275c0 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21  e...  #..  if {!
275d0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6d  [info exists com
275e0 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20  mon_directory]}
275f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20  then {..    set
27600 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
27610 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b   [file dirname [
27620 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20  info script]]..
27630 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e   }....  #..  # N
27640 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74 68 65  OTE: Provide the
27650 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
27660 69 74 65 20 74 65 73 74 20 70 61 63 6b 61 67 65  ite test package
27670 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65   to the interpre
27680 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63  ter...  #..  pac
27690 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53 79 73  kage provide Sys
276a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
276b0 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a           Test 1.0..}..