System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 7e20f4a0ec75aa2f6727ce65963e6dc0af79b941:

• File lib/System.Data.SQLite/common.eagle — part of check-in [448185cbf9] at 2016-06-22 03:13:48 on branch trunk — Cleanup and simplify the tests for ticket [a7d04fb111] and make them work without assuming a particular time zone. (user: mistachkin size: 165731)

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 64 79 6c t libsqlite3.dyl 4ba0: 69 62 20 6c 69 62 73 71 6c 69 74 65 33 2e 73 6f ib libsqlite3.so 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 6c 69 62 53 51 4c urn [list libSQL 4fb0: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 79 6c 69 ite.Interop.dyli 4fc0: 62 20 6c 69 62 53 51 4c 69 74 65 2e 49 6e 74 65 b libSQLite.Inte 4fd0: 72 6f 70 2e 73 6f 5d 0d 0a 20 20 20 20 20 20 7d rop.so].. } 4fe0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 4ff0: 70 72 6f 63 20 67 65 74 43 6f 72 65 45 78 74 65 proc getCoreExte 5000: 6e 73 69 6f 6e 42 69 6e 61 72 79 46 69 6c 65 4e nsionBinaryFileN 5010: 61 6d 65 20 7b 20 7b 64 65 66 61 75 6c 74 20 22 ame { {default " 5020: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 "} } {.. se 5030: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 43 t fileName [getC 5040: 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d oreBinaryFileNam 5050: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b e].... if { 5060: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
5070: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
5080: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
5090: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 50a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 50b0: 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 rn$default..
50c0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
50d0: 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65  isBuildAvailable
50e0: 20 7b 20 6e 61 74 69 76 65 20 64 69 72 65 63 74   { native direct
50f0: 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d  ory {varName ""}
5100: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
5110: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
5120: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61  ld the fully qua
5130: 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65  lified file name
5140: 20 66 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79   for the primary
5150: 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..
5160: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e   #       contain
5170: 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44  ing the System.D
5180: 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67  ata.SQLite manag
5190: 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20  ed components.
51a0: 49 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  It..      #
51b0: 20 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65    should be note
51c0: 64 20 74 68 61 74 20 74 68 69 73 20 61 73 73 65  d that this asse
51d0: 6d 62 6c 79 20 66 69 6c 65 20 6d 61 79 20 61 6c  mbly file may al
51e0: 73 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a  so contain the..
51f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
5200: 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c  tive components,
5210: 20 69 66 20 61 20 6e 61 74 69 76 65 20 62 75 69   if a native bui
5220: 6c 64 20 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20  ld is in use...
5230: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
5240: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
5250: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
5260: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 5270: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 y \.. S 5280: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 5290: 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 e.dll]].... 52a0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis 52b0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
52c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
52d0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
52e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
52f0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
5300: 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61  ttempt to automa
5310: 74 69 63 61 6c 6c 79 20 64 65 74 65 63 74 20 69  tically detect i
5320: 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73  f the primary as
5330: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20  sembly..      #
5340: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 61        contains a
5350: 6e 79 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e  ny native compon
5360: 65 6e 74 73 2c 20 69 66 20 6e 65 63 65 73 73 61  ents, if necessa
5370: 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ry...      #..
5380: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
5390: 6c 65 6e 67 74 68 20 24 6e 61 74 69 76 65 5d 20  length $native] 53a0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 53b0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 53c0: 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d g length$varNam
53d0: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
53e0: 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20            upvar
53f0: 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e  1 $varName$varN
5400: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ame..        }..
5410: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61  ..        set na
5420: 74 69 76 65 20 5b 69 73 4d 69 78 65 64 4d 6f 64  tive [isMixedMod
5430: 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 5440: 61 6d 65 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 ame$varName]..
5450: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
5460: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
5470: 20 49 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   If the primary
5480: 61 73 73 65 6d 62 6c 79 20 61 6c 73 6f 20 63 6f  assembly also co
5490: 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 74 69 76  ntains the nativ
54a0: 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20  e components,..
54b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 65 20       #       we
54c0: 68 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20  have everything
54d0: 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20  we need...
54e0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61  #..      if {$na 54f0: 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 tive} then {.. 5500: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 5510: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 5520: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5530: 4f 54 45 3a 20 57 68 61 74 20 69 73 20 74 68 65 OTE: What is the 5540: 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66 6f architecture fo 5550: 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d r this machine?. 5560: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5570: 73 65 74 20 61 72 63 68 69 74 65 63 74 75 72 65 set architecture 5580: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 [machineToPlatf 5590: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 orm$::tcl_platf
55a0: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 20 74 72 75  orm(machine) tru
55b0: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  e]....      #..
55c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61       # NOTE: Wha
55d0: 74 20 69 73 20 74 68 65 20 70 6c 61 74 66 6f 72  t is the platfor
55e0: 6d 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69  m for this machi
55f0: 6e 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ne?..      #..
5600: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d      set platform
5610: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66   [machineToPlatf
5620: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  orm $::tcl_platf 5630: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d orm(machine)]... 5640: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5650: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th 5660: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 e fully qualifie 5670: 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 d file name for 5680: 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 the interop asse 5690: 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 mbly.. # 56a0: 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 containing t 56b0: 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 he System.Data.S 56c0: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 63 6f 6d QLite native com 56d0: 70 6f 6e 65 6e 74 73 2e 20 20 49 66 20 74 68 69 ponents. If thi 56e0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 56f0: 20 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 file exists, we 5700: 20 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 should have eve 5710: 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e rything we need. 5720: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5730: 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 5740: 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f eOnly [getIntero 5750: 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d pAssemblyFileNam 5760: 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 esOnly] {.. 5770: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 5780: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 5790: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 [file join$dir
57a0: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
57b0: 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74        $architect 57c0: 75 72 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c ure$fileNameOnl
57d0: 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  y]]....        i
57e0: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
57f0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 5800: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 {.. re 5810: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 5820: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 5830: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi 5840: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 5850: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 ile join$direct
5860: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
5870: 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69     $platform$fi
5880: 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a  leNameOnly]]....
5890: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
58a0: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa 58b0: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 58c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 58d0: 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ue.. }... 58e0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c . set fil 58f0: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 eName [file nati 5900: 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 5910: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a n$directory \..
5920: 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil 5930: 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 eNameOnly]].... 5940: 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 if {[file 5950: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
5960: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
5970: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
5980: 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  e..        }..
5990: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
59a0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
59b0: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20  Build the fully
59c0: 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e  qualified file n
59d0: 61 6d 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ame for the SQLi
59e0: 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23  te core..      #
59f0: 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20         library.
5a00: 20 49 66 20 74 68 69 73 20 66 69 6c 65 20 65 78   If this file ex
5a10: 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20  ists, we should
5a20: 68 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20  have everything
5a30: 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  we..      #
5a40: 20 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23    need...      #
5a50: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
5a60: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65  fileNameOnly [ge
5a70: 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69  tNativeLibraryFi
5a80: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a  leNamesOnly] {..
5a90: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
5aa0: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
5ab0: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
5ac0: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 5ad0: 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68$arch
5ae0: 69 74 65 63 74 75 72 65 20 24 66 69 6c 65 4e 61  itecture $fileNa 5af0: 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 meOnly]].... 5b00: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 5b10: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
5b20: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
5b30: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
5b40: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
5b50: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
5b60: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
5b70: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d 5b80: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 5b90: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72$platfor
5ba0: 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d  m $fileNameOnly] 5bb0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ].... if 5bc0: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 {[file exists$f
5bd0: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
5be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
5bf0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20  rn true..
5c00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65   }....        se
5c10: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
5c20: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
5c30: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 5c40: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 5c50: 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d$fileNameOnly]]
5c60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
5c70: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 5c80: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 5c90: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 . retur 5ca0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 n true.. 5cb0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 5cc0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5cd0: 4f 54 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 OTE: One or more 5ce0: 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e native componen 5cf0: 74 73 20 6e 65 65 64 65 64 20 62 79 20 53 79 73 ts needed by Sys 5d00: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d tem.Data.SQLite. 5d10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 5d20: 72 65 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 20 20 re missing... 5d30: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 5d40: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. 5d50: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 .... proc isR 5d60: 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 eleaseAvailable 5d70: 7b 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 { directory {var 5d80: 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 Name ""} } {.. 5d90: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 5da0: 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d length$varName]
5db0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
5dc0: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76        upvar 1 $v 5dd0: 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d arName$varName.
5de0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
5df0: 20 20 72 65 74 75 72 6e 20 5b 69 73 42 75 69 6c    return [isBuil
5e00: 64 41 76 61 69 6c 61 62 6c 65 20 22 22 20 24 64  dAvailable "" $d 5e10: 69 72 65 63 74 6f 72 79 20 24 76 61 72 4e 61 6d irectory$varNam
5e20: 65 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  e]..    }.....
5e30: 20 20 70 72 6f 63 20 6a 6f 69 6e 42 75 69 6c 64    proc joinBuild
5e40: 44 69 72 65 63 74 6f 72 79 20 7b 20 6e 61 74 69  Directory { nati
5e50: 76 65 20 70 61 74 68 20 79 65 61 72 20 70 6c 61  ve path year pla
5e60: 74 66 6f 72 6d 20 63 6f 6e 66 69 67 75 72 61 74  tform configurat
5e70: 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ion } {..      #
5e80: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
5e90: 46 69 67 75 72 65 20 6f 75 74 20 61 6e 64 20 74  Figure out and t
5ea0: 68 65 6e 20 72 65 74 75 72 6e 20 74 68 65 20 66  hen return the f
5eb0: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70  ully qualified p
5ec0: 61 74 68 20 74 6f 20 74 68 65 20 62 75 69 6c 64  ath to the build
5ed0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5ee0: 64 69 72 65 63 74 6f 72 79 20 62 61 73 65 64 20  directory based
5ef0: 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72 67 75 6d  on all the argum
5f00: 65 6e 74 73 20 70 72 6f 76 69 64 65 64 20 62 79  ents provided by
5f10: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20   our caller...
5f20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
5f30: 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b  {$native} then { 5f40: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 5f50: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 [file join$pat
5f60: 68 20 62 69 6e 20 24 79 65 61 72 20 24 70 6c 61  h bin $year$pla
5f70: 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61  tform $configura 5f80: 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 tion].. } e 5f90: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 5fa0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e eturn [file join 5fb0: 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72$path bin $year 5fc0: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20$configuration
5fd0: 62 69 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  bin]..      }..
5fe0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
5ff0: 63 20 67 65 74 42 75 69 6c 64 44 69 72 65 63 74  c getBuildDirect
6000: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ory {} {..
6010: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
6020: 20 53 65 65 20 69 66 20 74 68 65 20 22 6e 61 74   See if the "nat
6030: 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74  ive" runtime opt
6040: 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 74  ion has been set
6050: 2e 20 20 49 66 20 73 6f 2c 20 75 73 65 20 74 68  .  If so, use th
6060: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
6070: 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
6080: 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
6090: 73 65 6d 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74  sembly (a.k.a. t
60a0: 68 65 20 6e 61 74 69 76 65 20 69 6e 74 65 72 6f  he native intero
60b0: 70 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  p..      #
60c0: 20 61 73 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20   assembly).  To
60d0: 65 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69  enable this opti
60e0: 6f 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61  on via the comma
60f0: 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61  nd line, enter a
6100: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6110: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20  command similar
6120: 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f  to one of the fo
6130: 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20  llowing (all on
6140: 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20  one line):..
6150: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
6160: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
6170: 65 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72  e -initialize -r
6180: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74  untimeOption nat
6190: 69 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ive..      #
61a0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
61b0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
61c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
61d0: 20 20 20 20 20 20 20 54 6f 20 65 6e 61 62 6c 65         To enable
61e0: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61   this option via
61f0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
6200: 65 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 22  e prior to the "
6210: 62 65 74 61 20 31 36 22 0d 0a 20 20 20 20 20 20  beta 16"..
6220: 23 20 20 20 20 20 20 20 72 65 6c 65 61 73 65 20  #       release
6230: 6f 66 20 45 61 67 6c 65 2c 20 74 68 65 20 66 6f  of Eagle, the fo
6240: 6c 6c 6f 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20  llowing command
6250: 6d 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 73  must be used ins
6260: 74 65 61 64 0d 0a 20 20 20 20 20 20 23 20 20 20  tead..      #
6270: 20 20 20 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e      (also all on
6280: 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20   one line):..
6290: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
62a0: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
62b0: 78 65 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d  xe -initialize -
62c0: 70 6f 73 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a  postInitialize..
62d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
62e0: 22 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  "object invoke I
62f0: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
6300: 74 69 76 65 20 41 64 64 52 75 6e 74 69 6d 65 4f  tive AddRuntimeO
6310: 70 74 69 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20  ption native"..
6320: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
6330: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
6340: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
6350: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
6360: 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c  fo exists ::buil
6370: 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20  d_directory] &&
6380: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
6390: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62  ring length $::b 63a0: 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 uild_directory] 63b0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 63c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 63d0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 63e0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c tion of the buil 63f0: 64 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 d directory has 6400: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b been overridden; 6410: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6420: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 therefore, use 6430: 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 it verbatim... 6440: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 6450: 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c return$::buil
6460: 64 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  d_directory..
6470: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
6480: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6490: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22  # NOTE: If the "
64a0: 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20  native" runtime
64b0: 6f 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 74  option is set, t
64c0: 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
64d0: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..
64e0: 23 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67  #       is being
64f0: 20 74 65 73 74 65 64 2e 20 20 49 6e 20 74 68 61   tested.  In tha
6500: 74 20 63 61 73 65 2c 20 74 68 65 20 70 61 74 68  t case, the path
6510: 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69   to the build di
6520: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20  rectory..
6530: 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6f   #       will co
6540: 6e 74 61 69 6e 20 74 68 65 20 70 6c 61 74 66 6f  ntain the platfo
6550: 72 6d 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20  rm name and all
6560: 74 68 65 20 62 69 6e 61 72 69 65 73 20 75 6e 64  the binaries und
6570: 65 72 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20  er test..
6580: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
6590: 62 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  be present in th
65a0: 61 74 20 64 69 72 65 63 74 6f 72 79 2e 20 20 49  at directory.  I
65b0: 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72  f the "native" r
65c0: 75 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20  untime..
65d0: 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 69  #       option i
65e0: 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 62  s not set, the b
65f0: 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 77  uild directory w
6600: 69 6c 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 65  ill be considere
6610: 64 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20  d to be..
6620: 20 23 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f   #       "platfo
6630: 72 6d 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 74  rm-neutral", wit
6640: 68 20 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 78  h the notable ex
6650: 63 65 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e  ception of any n
6660: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 23  ative..        #
6670: 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20         assembly
6680: 28 65 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e  (e.g. "SQLite.In
6690: 74 65 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69  terop.dll") copi
66a0: 65 64 20 74 68 65 72 65 20 64 75 72 69 6e 67 20  ed there during
66b0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
66c0: 20 20 20 20 20 62 75 69 6c 64 20 70 72 6f 63 65       build proce
66d0: 73 73 20 69 74 73 65 6c 66 2e 20 20 49 66 20 74  ss itself.  If t
66e0: 68 65 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73  he build process
66f0: 20 73 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f   somehow does no
6700: 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
6710: 20 20 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69     copy the nati
6720: 76 65 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 20  ve assembly for
6730: 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d  this platform, m
6740: 6f 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 73  ost of the tests
6750: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6760: 20 20 69 6e 20 74 68 65 20 73 75 69 74 65 20 77    in the suite w
6770: 69 6c 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 6b  ill simply be sk
6780: 69 70 70 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c  ipped.  Generall
6790: 79 20 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 72  y speaking, ther
67a0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
67b0: 20 20 20 61 72 65 20 74 77 6f 20 77 61 79 73 20     are two ways
67c0: 74 6f 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e  to build the bin
67d0: 61 72 69 65 73 20 77 68 65 6e 20 70 72 65 70 61  aries when prepa
67e0: 72 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 0d  ring to run the.
67f0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6800: 20 74 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 20   test suite:..
6810: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
6820: 20 23 20 20 20 20 20 20 20 31 2e 20 42 75 69 6c   #       1. Buil
6830: 64 20 74 68 65 20 73 65 70 61 72 61 74 65 20 6d  d the separate m
6840: 61 6e 61 67 65 64 20 61 6e 64 20 6e 61 74 69 76  anaged and nativ
6850: 65 20 61 73 73 65 6d 62 6c 69 65 73 20 75 73 69  e assemblies usi
6860: 6e 67 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20  ng some..
6870: 20 23 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d   #          comm
6880: 61 6e 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a  ands similar to:
6890: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
68a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
68b0: 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66  build.bat ${Conf 68c0: 69 67 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 iguration}Manage 68d0: 64 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d dOnly${Platform
68e0: 7d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  }..        #
68f0: 20 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20        build.bat
6900: 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d  ${Configuration} 6910: 4e 61 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 NativeOnly${Pla
6920: 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20  tform}..
6930: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  #..        #
6940: 20 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f        Where ${Co 6950: 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 nfiguration} is 6960: 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f either "Debug" o 6970: 72 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d r "Release" and. 6980: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 6990: 20 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20${Platform}
69a0: 69 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32  is either "Win32
69b0: 22 20 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 20  " or "x64"...
69c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
69d0: 23 20 20 20 20 20 20 20 32 2e 20 42 75 69 6c 64  #       2. Build
69e0: 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20   the mixed-mode
69f0: 61 73 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 61  assembly using a
6a00: 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72   command similar
6a10: 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d   to:..        #.
6a20: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6a30: 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b      build.bat ${ 6a40: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 Configuration}$
6a50: 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20  {Platform}..
6a60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6a70: 20 20 20 20 20 20 20 20 20 20 57 68 65 72 65 20            Where
6a80: 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d  ${Configuration} 6a90: 20 69 73 20 65 69 74 68 65 72 20 22 44 65 62 75 is either "Debu 6aa0: 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 g" or "Release" 6ab0: 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 and.. # 6ac0: 20 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f${Platfo
6ad0: 72 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 57  rm} is either "W
6ae0: 69 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e 20  in32" or "x64".
6af0: 20 49 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64   If this command
6b00: 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20   is..        #
6b10: 20 20 20 20 20 20 20 20 75 73 65 64 2c 20 76 61          used, va
6b20: 72 69 6f 75 73 20 74 65 73 74 73 20 74 68 61 74  rious tests that
6b30: 20 72 65 71 75 69 72 65 20 73 75 70 70 6c 65 6d   require supplem
6b40: 65 6e 74 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a  entary managed..
6b50: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6b60: 20 20 20 61 73 73 65 6d 62 6c 69 65 73 20 28 65     assemblies (e
6b70: 2e 67 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 65  .g. LINQ) may be
6b80: 20 73 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 20   skipped unless
6b90: 74 68 6f 73 65 20 62 69 6e 61 72 69 65 73 0d 0a  those binaries..
6ba0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6bb0: 20 20 20 61 72 65 20 73 75 62 73 65 71 75 65 6e     are subsequen
6bc0: 74 6c 79 20 63 6f 70 69 65 64 20 69 6e 74 6f 20  tly copied into
6bd0: 74 68 65 20 63 6f 72 72 65 63 74 20 64 69 72 65  the correct dire
6be0: 63 74 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a  ctory (i.e. by..
6bf0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6c00: 20 20 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74     "test_all.bat
6c10: 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ")...        #..
6c20: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6c30: 4e 6f 74 65 20 74 68 61 74 20 61 6c 6c 20 6f 66  Note that all of
6c40: 20 74 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61   the build comma
6c50: 6e 64 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 64  nds above will d
6c60: 65 66 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d  efault to using.
6c70: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6c80: 20 74 68 65 20 6c 61 74 65 73 74 20 76 65 72 73   the latest vers
6c90: 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61  ion of MSBuild a
6ca0: 76 61 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 65  vailable and the
6cb0: 20 22 74 65 73 74 5f 79 65 61 72 22 20 6d 61 79   "test_year" may
6cc0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6cd0: 20 20 6e 65 65 64 20 74 6f 20 62 65 20 61 64 6a    need to be adj
6ce0: 75 73 74 65 64 20 61 63 63 6f 72 64 69 6e 67 6c  usted accordingl
6cf0: 79 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 75  y to actually ru
6d00: 6e 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  n the test suite
6d10: 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ...        #
6d20: 20 20 20 52 65 66 65 72 20 74 6f 20 74 68 65 20     Refer to the
6d30: 63 6f 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74  comments in [get
6d40: 42 75 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d  BuildYear] for m
6d50: 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ore information
6d60: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  on..        #
6d70: 20 20 20 20 68 6f 77 20 74 6f 20 73 65 74 20 74      how to set t
6d80: 68 69 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20  his variable...
6d90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
6da0: 20 20 73 65 74 20 6e 61 74 69 76 65 20 5b 68 61    set native [ha
6db0: 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e  sRuntimeOption n
6dc0: 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  ative]....
6dd0: 20 20 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 42 75    return [joinBu
6de0: 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61  ildDirectory $na 6df0: 74 69 76 65 20 5b 67 65 74 42 75 69 6c 64 42 61 tive [getBuildBa 6e00: 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a seDirectory] \.. 6e10: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 6e20: 42 75 69 6c 64 59 65 61 72 5d 20 5b 67 65 74 42 BuildYear] [getB 6e30: 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 uildPlatform$na
6e40: 74 69 76 65 5d 20 5b 67 65 74 42 75 69 6c 64 43  tive] [getBuildC
6e50: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 5d 0d 0a  onfiguration]]..
6e60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
6e70: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 52  ...    proc getR
6e80: 65 6c 65 61 73 65 56 65 72 73 69 6f 6e 20 7b 7d  eleaseVersion {}
6e90: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
6ea0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72     # NOTE: Figur
6eb0: 65 20 6f 75 74 20 74 68 65 20 72 65 6c 65 61 73  e out the releas
6ec0: 65 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 75 73  e version for us
6ed0: 65 20 77 69 74 68 20 74 68 65 20 62 75 69 6c 64  e with the build
6ee0: 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20   directory..
6ef0: 20 20 23 20 20 20 20 20 20 20 77 68 65 6e 20 63    #       when c
6f00: 68 65 63 6b 69 6e 67 20 66 6f 72 20 61 76 61 69  hecking for avai
6f10: 6c 61 62 6c 65 20 72 65 6c 65 61 73 65 73 2e 0d  lable releases..
6f20: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
6f30: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
6f40: 20 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69   ::release_versi
6f50: 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  on] && \..
6f60: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
6f70: 74 68 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65  th $::release_ve 6f80: 72 73 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e rsion] > 0} then 6f90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 6fa0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 6fb0: 68 65 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 he release versi 6fc0: 6f 6e 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 on has been over 6fd0: 72 69 64 64 65 6e 3b 20 74 68 65 72 65 66 6f 72 ridden; therefor 6fe0: 65 2c 20 75 73 65 20 69 74 0d 0a 20 20 20 20 20 e, use it.. 6ff0: 20 20 20 23 20 20 20 20 20 20 20 76 65 72 62 61 # verba 7000: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d tim... #. 7010: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 7020: 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69$::release_versi
7030: 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  on..      } else
7040: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
7050: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
7060: 6f 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f  o release versio
7070: 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20  n is available,
7080: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20  return an empty
7090: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...
70a0: 20 23 20 20 20 20 20 20 20 49 74 20 69 73 20 69   #       It is i
70b0: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 75  mportant to retu
70c0: 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  rn an empty stri
70d0: 6e 67 20 68 65 72 65 20 62 65 63 61 75 73 65 20  ng here because
70e0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
70f0: 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 74       result of t
7100: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 61  his procedure ma
7110: 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20 5b  y be used with [
7120: 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20  file join]...
7130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7140: 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20  return ""..
7150: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
7160: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 46    proc getBuildF
7170: 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61  ileName { fileNa
7180: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
7190: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
71a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
71b0: 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69  urns the specifi
71c0: 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20  ed file name as
71d0: 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74  if it were locat
71e0: 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ed in the..
71f0: 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 64   #       build d
7200: 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72  irectory, discar
7210: 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f  ding any directo
7220: 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70  ry information p
7230: 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20  resent..      #
7240: 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c        in the fil
7250: 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64  e name as provid
7260: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
7270: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
7280: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 66 69    set result [fi
7290: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d  le nativename \.
72a0: 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65  .          [file
72b0: 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44   join [getBuildD
72c0: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66  irectory] $platf 72d0: 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 orm [file tail$
72e0: 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20  fileName]]]....
72f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
7300: 48 41 43 4b 3a 20 57 68 65 6e 20 72 75 6e 6e 69  HACK: When runni
7310: 6e 67 20 6f 6e 20 57 6f 57 36 34 2c 20 61 73 73  ng on WoW64, ass
7320: 75 6d 65 20 74 68 65 20 74 65 73 74 20 65 78 65  ume the test exe
7330: 63 75 74 61 62 6c 65 73 20 61 72 65 20 70 72 65  cutables are pre
7340: 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20  sent..      #
7350: 20 20 20 20 77 69 74 68 20 74 68 65 20 22 33 32      with the "32
7360: 22 20 73 75 66 66 69 78 20 6f 6e 20 74 68 65 6d  " suffix on them
7370: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
7380: 20 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67    if {[isRunning
7390: 57 6f 57 36 34 5d 20 26 26 20 5b 66 69 6c 65 20  WoW64] && [file
73a0: 65 78 74 65 6e 73 69 6f 6e 20 24 72 65 73 75 6c  extension $resul 73b0: 74 5d 20 65 71 20 22 2e 65 78 65 22 7d 20 74 68 t] eq ".exe"} th 73c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 en {.. se 73d0: 74 20 72 65 73 75 6c 74 20 5b 61 70 70 65 6e 64 t result [append 73e0: 41 72 67 73 20 5b 66 69 6c 65 20 72 6f 6f 74 6e Args [file rootn 73f0: 61 6d 65 20 24 72 65 73 75 6c 74 5d 20 33 32 2e ame$result] 32.
7400: 65 78 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  exe]..      }...
7410: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72  .      return $r 7420: 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d esult.. }.... 7430: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 . proc getExt 7440: 65 72 6e 61 6c 44 69 72 65 63 74 6f 72 79 20 7b ernalDirectory { 7450: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 7460: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 7470: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur 7480: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 ns the directory 7490: 20 77 68 65 72 65 20 74 68 65 20 65 78 74 65 72 where the exter 74a0: 6e 61 6c 20 62 69 6e 61 72 79 0d 0a 20 20 20 20 nal binary.. 74b0: 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20 # files 74c0: 61 72 65 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 are located... 74d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret 74e0: 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 urn [file native 74f0: 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 name [file dirna 7500: 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 me [file dirname 7510: 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 5d 5d [info binary]]] 7520: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 7530: 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 44 proc getBinaryD 7540: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. 7550: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 7560: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 7570: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 dure returns the 7580: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where 7590: 20 74 68 65 20 74 65 73 74 20 61 70 70 6c 69 63 the test applic 75a0: 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 ation.. # 75b0: 20 20 20 20 20 69 74 73 65 6c 66 20 28 69 2e 65 itself (i.e 75c0: 2e 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c . the Eagle shel 75d0: 6c 29 20 69 73 20 6c 6f 63 61 74 65 64 2e 20 20 l) is located. 75e0: 54 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73 65 This will be use 75f0: 64 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 d as.. # 7600: 20 20 20 20 74 68 65 20 64 65 73 74 69 6e 61 74 the destinat 7610: 69 6f 6e 20 66 6f 72 20 74 68 65 20 63 6f 70 69 ion for the copi 7620: 65 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ed System.Data.S 7630: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 61 6e 64 QLite native and 7640: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7650: 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 managed assembli 7660: 65 73 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 es (i.e. because 7670: 20 74 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 this is one of 7680: 74 68 65 20 66 65 77 20 70 6c 61 63 65 73 0d 0a the few places.. 7690: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 # wh 76a0: 65 72 65 20 74 68 65 20 43 4c 52 20 77 69 6c 6c ere the CLR will 76b0: 20 61 63 74 75 61 6c 6c 79 20 66 69 6e 64 20 61 actually find a 76c0: 6e 64 20 6c 6f 61 64 20 74 68 65 6d 20 70 72 6f nd load them pro 76d0: 70 65 72 6c 79 29 2e 0d 0a 20 20 20 20 20 20 23 perly)... # 76e0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 76f0: 6f 20 65 78 69 73 74 73 20 3a 3a 62 69 6e 61 72 o exists ::binar 7700: 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 y_directory] && 7710: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 7720: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 ring length$::b
7730: 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d  inary_directory]
7740: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
7750: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
7760: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
7770: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 69 6e  ation of the bin
7780: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61  ary directory ha
7790: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
77a0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
77b0: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
77c0: 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d  se it verbatim..
77d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
77e0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 69      return $::bi 77f0: 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a nary_directory.. 7800: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 7810: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 7820: 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 info binary].. 7830: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 7840: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 . proc getExt 7850: 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 7b 20 ernalFileName { 7860: 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 fileName } {.. 7870: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 7880: 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 OTE: Returns the 7890: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 specified file 78a0: 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 name as if it we 78b0: 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 re located in th 78c0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 78d0: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 directory conta 78e0: 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65 72 6e ining the extern 78f0: 61 6c 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 al binaries... 7900: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret 7910: 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 urn [file native 7920: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 7930: 5b 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 [getExternalDire 7940: 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 ctory]$fileName
7950: 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ]]..    }.....
7960: 20 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79    proc getBinary
7970: 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e  FileName { fileN
7980: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22  ame {platform ""
7990: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
79a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
79b0: 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66  turns the specif
79c0: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73  ied file name as
79d0: 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61   if it were loca
79e0: 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ted in the..
79f0: 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79    #       binary
7a00: 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63   directory, disc
7a10: 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63  arding any direc
7a20: 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tory information
7a30: 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20   present..
7a40: 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 66  #       in the f
7a50: 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76  ile name as prov
7a60: 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  ided by our call
7a70: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
7a80: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
7a90: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20   nativename \..
7aa0: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a           [file j
7ab0: 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69  oin [getBinaryDi
7ac0: 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f  rectory] $platfo 7ad0: 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 rm [file tail$f
7ae0: 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20  ileName]]]..
7af0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
7b00: 65 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65  etCoreBinaryFile
7b10: 4e 61 6d 65 20 7b 20 7b 70 6c 61 74 66 6f 72 6d  Name { {platform
7b20: 20 22 22 7d 20 7b 73 74 61 6e 64 61 72 64 20 22   ""} {standard "
7b30: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  "} } {..      #.
7b40: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
7b50: 65 74 75 72 6e 73 20 74 68 65 20 66 75 6c 6c 20  eturns the full
7b60: 70 61 74 68 20 66 6f 72 20 74 68 65 20 66 69 6c  path for the fil
7b70: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
7b80: 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20   SQLite core..
7b90: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69      #       nati
7ba0: 76 65 20 6c 69 62 72 61 72 79 20 63 6f 64 65 20  ve library code
7bb0: 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72  for this platfor
7bc0: 6d 2e 20 20 46 69 72 73 74 2c 20 63 68 65 63 6b  m.  First, check
7bd0: 20 61 6e 64 20 73 65 65 20 69 66 0d 0a 20 20 20   and see if..
7be0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53     #       the S
7bf0: 51 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76  QLite core nativ
7c00: 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c  e library has al
7c10: 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65  ready been loade
7c20: 64 2e 20 20 4e 65 78 74 2c 0d 0a 20 20 20 20 20  d.  Next,..
7c30: 20 23 20 20 20 20 20 20 20 66 61 6c 6c 62 61 63   #       fallbac
7c40: 6b 20 74 6f 20 77 68 61 74 20 74 68 65 20 66 75  k to what the fu
7c50: 6c 6c 20 70 61 74 68 20 73 68 6f 75 6c 64 20 62  ll path should b
7c60: 65 2c 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74  e, based on whet
7c70: 68 65 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23  her the..      #
7c80: 20 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64         mixed-mod
7c90: 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20 62 65  e assembly is be
7ca0: 69 6e 67 20 75 73 65 64 20 61 6e 64 20 74 68 65  ing used and the
7cb0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72   name of the cur
7cc0: 72 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20  rent..      #
7cd0: 20 20 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20      platform...
7ce0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
7cf0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
7d00: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
7d10: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
7d20: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
7d30: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
7d40: 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
7d50: 76 65 4d 65 74 68 6f 64 73 20 5f 53 51 4c 69 74  veMethods _SQLit
7d60: 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 46 69 6c  eNativeModuleFil
7d70: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 20 66  eName..      } f
7d80: 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 26  ileName] == 0 &&
7d90: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
7da0: 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20  $fileName] > 0} 7db0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7dc0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 7dd0: 45 3a 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f E: The SQLite co 7de0: 72 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 re native librar 7df0: 79 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 y has already be 7e00: 65 6e 20 6c 6f 61 64 65 64 20 76 69 61 0d 0a 20 en loaded via.. 7e10: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 7e20: 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 he native librar 7e30: 79 20 70 72 65 2d 6c 6f 61 64 65 72 2e 20 20 52 y pre-loader. R 7e40: 65 74 75 72 6e 20 74 68 61 74 20 66 69 6c 65 20 eturn that file 7e50: 6e 61 6d 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 name now... 7e60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 7e70: 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a turn$fileName..
7e80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
7e90: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
7ea0: 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65  : If the "native
7eb0: 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e  " runtime option
7ec0: 20 68 61 73 20 62 65 65 6e 20 73 65 74 2c 20 61   has been set, a
7ed0: 6c 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 65  lways return the
7ee0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7ef0: 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68  file name for th
7f00: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
7f10: 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d  embly...      #.
7f20: 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52  .      if {[hasR
7f30: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74  untimeOption nat
7f40: 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ive]} then {..
7f50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
7f60: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20   # NOTE: Return
7f70: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
7f80: 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d  ssembly file nam
7f90: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
7fa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66         return [f
7fb0: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c  ile nativename \
7fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
7fd0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e  ile join [getBin
7fe0: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70  aryDirectory] $p 7ff0: 6c 61 74 66 6f 72 6d 20 53 79 73 74 65 6d 2e 44 latform System.D 8000: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d ata.SQLite.dll]] 8010: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 8020: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 8030: 54 45 3a 20 41 72 65 20 77 65 20 61 74 74 65 6d TE: Are we attem 8040: 70 74 69 6e 67 20 74 6f 20 61 75 74 6f 6d 61 74 pting to automat 8050: 69 63 61 6c 6c 79 20 64 65 74 65 63 74 20 77 68 ically detect wh 8060: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 ether or not the 8070: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8080: 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 interop assembly 8090: 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 3f should be used? 80a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 80b0: 20 73 65 74 20 61 75 74 6f 6d 61 74 69 63 20 5b set automatic [ 80c0: 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 expr {[string le 80d0: 6e 67 74 68 20 24 73 74 61 6e 64 61 72 64 5d 20 ngth$standard]
80e0: 3d 3d 20 30 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20  == 0}]....
80f0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
8100: 20 46 69 72 73 74 2c 20 69 6e 20 65 69 74 68 65   First, in eithe
8110: 72 20 22 61 75 74 6f 6d 61 74 69 63 22 20 6f 72  r "automatic" or
8120: 20 22 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 22 20   "non-standard"
8130: 6d 6f 64 65 73 2c 20 61 74 74 65 6d 70 74 0d 0a  modes, attempt..
8140: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
8150: 20 66 69 6e 64 20 74 68 65 20 6e 61 74 69 76 65   find the native
8160: 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73  -only interop as
8170: 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23  sembly...      #
8180: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 61 75 74  ..      if {$aut 8190: 6f 6d 61 74 69 63 20 7c 7c 20 21 24 73 74 61 6e omatic || !$stan
81a0: 64 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  dard} then {..
81b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
81c0: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
81d0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
81e0: 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e  e native-only in
81f0: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66  terop assembly f
8200: 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ile..        #
8210: 20 20 20 20 20 6e 61 6d 65 20 66 6f 72 20 74 68       name for th
8220: 69 73 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20  is platform and
8230: 74 68 65 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d  then return it..
8240: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
8250: 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
8260: 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74  NameOnly [getInt
8270: 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65  eropAssemblyFile
8280: 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20  NamesOnly] {..
8290: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
82a0: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
82b0: 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  ename \..
82c0: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
82d0: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
82e0: 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d  ctory] $platform 82f0: 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d$fileNameOnly]]
8300: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
8310: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $8320: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 8330: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 {.. r 8340: 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d eturn$fileName.
8350: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
8360: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
8370: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
8380: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 6e 2c     # NOTE: Then,
8390: 20 69 6e 20 65 69 74 68 65 72 20 22 61 75 74 6f   in either "auto
83a0: 6d 61 74 69 63 22 20 6f 72 20 22 73 74 61 6e 64  matic" or "stand
83b0: 61 72 64 22 20 6d 6f 64 65 73 2c 20 61 74 74 65  ard" modes, atte
83c0: 6d 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 23 20  mpt to..      #
83d0: 20 20 20 20 20 20 66 69 6e 64 20 74 68 65 20 73        find the s
83e0: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 6c  tandard SQLite l
83f0: 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 23  ibrary...      #
8400: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 61 75 74  ..      if {$aut 8410: 6f 6d 61 74 69 63 20 7c 7c 20 24 73 74 61 6e 64 omatic ||$stand
8420: 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ard} then {..
8430: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
8440: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
8450: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
8460: 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61   native-only sta
8470: 6e 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62  ndard SQLite lib
8480: 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20  rary..        #
8490: 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 20        file name
84a0: 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72  for this platfor
84b0: 6d 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72  m and then retur
84c0: 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  n it...        #
84d0: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
84e0: 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b  h fileNameOnly [
84f0: 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79  getNativeLibrary
8500: 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b  FileNamesOnly] {
8510: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
8520: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e  fileName [file n
8530: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
8540: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
8550: 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79   join [getBinary
8560: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74  Directory] $plat 8570: 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e form$fileNameOn
8580: 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ly]]....
8590: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
85a0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t 85b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 85c0: 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e return$fileN
85d0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ame..          }
85e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
85f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
8600: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57  .      # NOTE: W
8610: 61 73 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61  as the managed a
8620: 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64  ssembly compiled
8630: 20 65 78 70 65 63 74 69 6e 67 20 74 6f 20 64 65   expecting to de
8640: 61 6c 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20  al with the..
8650: 20 20 20 23 20 20 20 20 20 20 20 73 74 61 6e 64     #       stand
8660: 61 72 64 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ard core library
8670: 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ?..      #..
8680: 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74    if {[haveSQLit
8690: 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20  eDefineConstant
86a0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 5d  SQLITE_STANDARD]
86b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
86c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
86d0: 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f  OTE: Fallback to
86e0: 20 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20 6e   returning the n
86f0: 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64  ative-only stand
8700: 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61  ard SQLite libra
8710: 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ry..        #
8720: 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f      file name fo
8730: 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d  r the platform..
8740: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
8750: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
8760: 73 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65  sOnly [getNative
8770: 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73  LibraryFileNames
8780: 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  Only]....
8790: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66   if {[llength $f 87a0: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d ileNamesOnly] == 87b0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 87c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d return "". 87d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 87e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 return [fi 87f0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 8800: 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. 8810: 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 [getBina 8820: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c ryDirectory]$pl
8830: 61 74 66 6f 72 6d 20 5b 6c 69 6e 64 65 78 20 24  atform [lindex $8840: 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d fileNamesOnly 0] 8850: 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ]].. } else 8860: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 8870: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 8880: 61 6c 6c 62 61 63 6b 20 74 6f 20 72 65 74 75 72 allback to retur 8890: 6e 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 2d ning the native- 88a0: 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73 only interop ass 88b0: 65 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 embly file.. 88c0: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 # name 88d0: 20 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f 72 for the platfor 88e0: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 m... #.. 88f0: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e set fileN 8900: 61 6d 65 73 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 amesOnly [getInt 8910: 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 eropAssemblyFile 8920: 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 NamesOnly].... 8930: 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 if {[lleng 8940: 74 68 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c th$fileNamesOnl
8950: 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  y] == 0} then {.
8960: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
8970: 6e 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n ""..        }.
8980: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
8990: 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  n [file nativena
89a0: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
89b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
89c0: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79  tBinaryDirectory
89d0: 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 6e  ] $platform [lin 89e0: 64 65 78 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e dex$fileNamesOn
89f0: 6c 79 20 30 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d  ly 0]]]..      }
8a00: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
8a10: 70 72 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69  proc getCommonDi
8a20: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
8a30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
8a40: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
8a50: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the
8a60: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where
8a70: 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74 73  the test scripts
8a80: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
8a90: 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65  should be locate
8aa0: 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20  d.  By default,
8ab0: 74 68 69 73 20 6a 75 73 74 20 72 65 74 75 72 6e  this just return
8ac0: 73 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20  s the Eagle..
8ad0: 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72     #       binar
8ae0: 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20  y directory...
8af0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
8b00: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
8b10: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
8b20: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
8b30: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
8b40: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63   $::common_direc 8b50: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 8b60: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 8b70: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 8b80: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 8b90: 65 20 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f e common directo 8ba0: 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b ry has been set; 8bb0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 8bc0: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 therefore, use 8bd0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 8be0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 8bf0: 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74$::common_direct
8c00: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ory..      } els
8c10: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  eif {[info exist
8c20: 73 20 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63  s ::vendor_direc
8c30: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
8c40: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
8c50: 6e 67 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64  ngth $::vendor_d 8c60: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 8c70: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 8c80: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 8c90: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 8ca0: 66 20 74 68 65 20 76 65 6e 64 6f 72 20 64 69 72 f the vendor dir 8cb0: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 8cc0: 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 set;.. # 8cd0: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 8ce0: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... 8cf0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 8d00: 75 72 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 urn$::vendor_di
8d10: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
8d20: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
8d30: 78 69 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72  xists ::tcl_libr
8d40: 61 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ary] && \..
8d50: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
8d60: 67 74 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61  gth $::tcl_libra 8d70: 72 79 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 ry] > 0 && \.. 8d80: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 [file is 8d90: 64 69 72 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c directory$::tcl
8da0: 5f 6c 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20  _library]} then
8db0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
8dc0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
8dd0: 65 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 20  e variable with
8de0: 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  the location of
8df0: 74 68 65 20 73 63 72 69 70 74 20 6c 69 62 72 61  the script libra
8e00: 72 79 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23  ry is..        #
8e10: 20 20 20 20 20 20 20 73 65 74 20 61 6e 64 20 61         set and a
8e20: 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 72  ppears to be a r
8e30: 65 61 6c 20 64 69 72 65 63 74 6f 72 79 20 28 69  eal directory (i
8e40: 2e 65 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 64  .e. not embedded
8e50: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
8e60: 20 20 77 69 74 68 69 6e 20 61 20 66 69 6c 65 29    within a file)
8e70: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65  ; therefore, use
8e80: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
8e90: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
8ea0: 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a  $::tcl_library.. 8eb0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 8ec0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8ed0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 # NOTE: Fallb 8ee0: 61 63 6b 20 74 6f 20 74 68 65 20 64 69 72 65 63 ack to the direc 8ef0: 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 tory containing 8f00: 74 68 65 20 65 78 65 63 75 74 61 62 6c 65 2e 0d the executable.. 8f10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8f20: 20 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f return [info 8f30: 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 binary].. 8f40: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 8f50: 20 70 72 6f 63 20 67 65 74 44 61 74 61 62 61 73 proc getDatabas 8f60: 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d eDirectory {} {. 8f70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 8f80: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f # NOTE: This pro 8f90: 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 cedure returns t 8fa0: 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 he directory whe 8fb0: 72 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 re the test data 8fc0: 62 61 73 65 73 0d 0a 20 20 20 20 20 20 23 20 20 bases.. # 8fd0: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c should be l 8fe0: 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 ocated. By defa 8ff0: 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 ult, this just u 9000: 73 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 ses the temporar 9010: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 9020: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 directory confi 9030: 67 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 gured for this s 9040: 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d ystem... #. 9050: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 9060: 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 62 61 exists ::databa 9070: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 se_directory] && 9080: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 9090: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
90a0: 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f  database_directo
90b0: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
90c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
90d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
90e0: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
90f0: 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f  database directo
9100: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
9110: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
9120: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
9130: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
9140: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
9150: 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 61  return $::databa 9160: 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 se_directory.. 9170: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 9180: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 nfo exists ::scr 9190: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 atch_directory] 91a0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 91b0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
91c0: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
91d0: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
91e0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
91f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
9200: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
9210: 20 73 63 72 61 74 63 68 20 64 69 72 65 63 74 6f   scratch directo
9220: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
9230: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
9240: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
9250: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
9260: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
9270: 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63  return $::scratc 9280: 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 h_directory.. 9290: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 92a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 return [get 92b0: 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a TemporaryPath].. 92c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 92d0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 ... proc getT 92e0: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 emporaryDirector 92f0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 9300: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 9310: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 his procedure re 9320: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 turns the direct 9330: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 ory where the te 9340: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 mporary files.. 9350: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f # sho 9360: 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 uld be located. 9370: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 By default, thi 9380: 73 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 s just uses the 9390: 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 temporary.. 93a0: 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f # directo 93b0: 72 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f ry configured fo 93c0: 72 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a r this system... 93d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 93e0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 93f0: 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 ::temporary_dire 9400: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 ctory] && \.. 9410: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 9420: 65 6e 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 ength$::tempora
9430: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ry_directory] >
9440: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
9450: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
9460: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
9470: 6f 6e 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  on of the tempor
9480: 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61  ary directory ha
9490: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
94a0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
94b0: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
94c0: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  se it...
94d0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
94e0: 6e 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64  n $::temporary_d 94f0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 9500: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 9510: 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 exists ::scratch 9520: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 9530: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 9540: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 ing length$::sc
9550: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d  ratch_directory]
9560: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
9570: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9580: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
9590: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72  ation of the scr
95a0: 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68  atch directory h
95b0: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
95c0: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20  en;..        #
95d0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore,
95e0: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20  use it...
95f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
9600: 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69  rn $::scratch_di 9610: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d rectory.. } 9620: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 9630: 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 return [getTemp 9640: 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 oraryPath].. 9650: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 9660: 20 20 20 70 72 6f 63 20 67 65 74 45 78 65 63 75 proc getExecu 9670: 74 65 4f 6e 53 65 74 75 70 20 7b 7d 20 7b 0d 0a teOnSetup {} {.. 9680: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 9690: 65 78 69 73 74 73 20 3a 3a 65 78 65 63 75 74 65 exists ::execute 96a0: 5f 6f 6e 5f 73 65 74 75 70 5d 20 26 26 20 5c 0d _on_setup] && \. 96b0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 96c0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 78 65 ng length$::exe
96d0: 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e  cute_on_setup] >
96e0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
96f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
9700: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68   NOTE: Return th
9710: 65 20 63 6f 6e 66 69 67 75 72 65 64 20 53 51 4c  e configured SQL
9720: 20 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 69   to execute duri
9730: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
9740: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
9750: 20 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 75     setup procedu
9760: 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 65  re (i.e. for eve
9770: 72 79 20 74 65 73 74 20 64 61 74 61 62 61 73 65  ry test database
9780: 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20   connection)...
9790: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
97a0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 78 65 63    return $::exec 97b0: 75 74 65 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 ute_on_setup.. 97c0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 97d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 97e0: 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 # NOTE: By defa 97f0: 75 6c 74 2c 20 74 68 65 72 65 20 69 73 20 6e 6f ult, there is no 9800: 20 53 51 4c 20 74 6f 20 65 78 65 63 75 74 65 20 SQL to execute 9810: 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 during the conne 9820: 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 ction.. # 9830: 20 20 20 20 20 20 20 73 65 74 75 70 20 70 72 6f setup pro 9840: 63 65 64 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 cedure (i.e. for 9850: 20 65 76 65 72 79 20 74 65 73 74 20 64 61 74 61 every test data 9860: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 base connection) 9870: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 9880: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d return "". 9890: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 98a0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 98b0: 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 TestOverridesPre 98c0: 61 6d 62 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 amble { {extraVa 98d0: 72 4e 61 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a rNames ""} } {.. 98e0: 20 20 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d set varNam 98f0: 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 es [list].... 9900: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 9910: 54 45 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 TE: If available 9920: 2c 20 73 74 61 72 74 20 77 69 74 68 20 74 68 65 , start with the 9930: 20 6d 61 73 74 65 72 20 6c 69 73 74 20 6f 66 20 master list of 9940: 74 65 73 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 test override.. 9950: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 # var 9960: 69 61 62 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 iables... # 9970: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 9980: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f o exists ::test_ 9990: 6f 76 65 72 72 69 64 65 73 5d 20 26 26 20 5c 0d overrides] && \. 99a0: 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e . [llen 99b0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 gth$::test_over
99c0: 72 69 64 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e  rides] > 0} then
99d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c   {..        eval
99e0: 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65   lappend varName
99f0: 73 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69  s $::test_overri 9a00: 64 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a des.. }.... 9a10: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 9a20: 20 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 NOTE: If reques 9a30: 74 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ted by our calle 9a40: 72 2c 20 61 64 64 20 61 6e 79 20 61 64 64 69 74 r, add any addit 9a50: 69 6f 6e 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a ional variable.. 9a60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 # na 9a70: 6d 65 73 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e mes to copy now. 9a80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 9a90: 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 if {[llength$e
9aa0: 78 74 72 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20  xtraVarNames] >
9ab0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
9ac0: 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20     eval lappend
9ad0: 76 61 72 4e 61 6d 65 73 20 24 65 78 74 72 61 56  varNames $extraV 9ae0: 61 72 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d arNames.. } 9af0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 9b00: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 9b10: 20 74 68 65 20 73 63 72 69 70 74 20 66 72 61 67 the script frag 9b20: 6d 65 6e 74 20 74 6f 20 62 65 20 72 65 74 75 72 ment to be retur 9b30: 6e 65 64 20 62 79 20 70 72 6f 63 65 73 73 69 6e ned by processin 9b40: 67 20 65 61 63 68 0d 0a 20 20 20 20 20 20 23 20 g each.. # 9b50: 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e variable n 9b60: 61 6d 65 20 61 6e 64 20 61 64 64 69 6e 67 20 74 ame and adding t 9b70: 68 65 20 6e 65 63 65 63 65 73 73 61 72 79 20 73 he nececessary s 9b80: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 20 cript fragments 9b90: 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 for.. # 9ba0: 20 20 20 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 each one... 9bb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 9bc0: 20 72 65 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 result "".... 9bd0: 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 72 4e foreach varN 9be0: 61 6d 65 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d ame$varNames {.
9bf0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
9c00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
9c10: 64 20 74 68 65 20 71 75 61 6c 69 66 69 65 64 20  d the qualified
9c20: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable
9c30: 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  name...        #
9c40: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 75  ..        set fu
9c50: 6c 6c 56 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e  llVarName [appen
9c60: 64 41 72 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d  dArgs :: $varNam 9c70: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d e].... #. 9c80: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 9c90: 20 44 6f 65 73 20 74 68 65 20 76 61 72 69 61 62 Does the variab 9ca0: 6c 65 20 65 78 69 73 74 20 69 6e 20 74 68 69 73 le exist in this 9cb0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e interpreter con 9cc0: 74 65 78 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 text?.. # 9cd0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 .. if {[i 9ce0: 6e 66 6f 20 65 78 69 73 74 73 20 24 66 75 6c 6c nfo exists$full
9cf0: 56 61 72 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  VarName]} then {
9d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
9d10: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
9d20: 20 41 70 70 65 6e 64 20 61 20 73 63 72 69 70 74   Append a script
9d30: 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 74 68 65   fragment to the
9d40: 20 72 65 73 75 6c 74 20 74 68 61 74 20 77 69 6c   result that wil
9d50: 6c 20 63 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20  l correctly..
9d60: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
9d70: 6f 70 79 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65  opy any containe
9d80: 64 20 76 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68  d value to anoth
9d90: 65 72 20 69 6e 74 65 72 70 72 65 74 65 72 20 63  er interpreter c
9da0: 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20  ontext...
9db0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
9dc0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e  append result \n
9dd0: 20 22 73 65 74 20 22 20 24 66 75 6c 6c 56 61 72   "set " $fullVar 9de0: 4e 61 6d 65 20 22 20 5c 7b 22 20 5b 73 65 74 20 Name " \{" [set 9df0: 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 20 5c 7d$fullVarName] \}
9e00: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
9e10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
9e20: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
9e30: 66 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e  f the result con
9e40: 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
9e50: 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  e script fragmen
9e60: 74 73 2c 20 61 70 70 65 6e 64 20 61 0d 0a 20 20  ts, append a..
9e70: 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 6c      #       newl
9e80: 69 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ine...      #..
9e90: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
9ea0: 20 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 5d   length $result] 9eb0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 9ec0: 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 append res 9ed0: 75 6c 74 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d ult \n.. }. 9ee0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 9ef0: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a$result..    }..
9f00: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6d 6f 76 65  ...    proc move
9f10: 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  SystemDataSQLite
9f20: 44 6c 6c 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73  DllConfig { {res
9f30: 74 6f 72 65 20 66 61 6c 73 65 7d 20 7b 76 65 72  tore false} {ver
9f40: 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  bose false} } {.
9f50: 0a 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63  .      set direc
9f60: 74 6f 72 79 20 5b 6f 62 6a 65 63 74 20 69 6e 76  tory [object inv
9f70: 6f 6b 65 20 41 70 70 44 6f 6d 61 69 6e 20 43 75  oke AppDomain Cu
9f80: 72 72 65 6e 74 44 6f 6d 61 69 6e 2e 42 61 73 65  rrentDomain.Base
9f90: 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20  Directory]....
9fa0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
9fb0: 6c 65 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72  length $director 9fc0: 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d y] == 0} then {. 9fd0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 . if {$ve
9fe0: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
9ff0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $a000: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ a010: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. a020: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- a030: 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 - skipped moving a040: 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 \"System.Data.S a050: 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 QLite.dll.config a060: 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 \", " \.. a070: 20 20 20 20 20 20 20 22 6e 6f 20 62 61 73 65 20 "no base a080: 64 69 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 directory\n"].. a090: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. a0a0: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 return.. a0b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 }.... set f a0c0: 69 6c 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 ileName(1) [file a0d0: 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 normalize \.. a0e0: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f [file jo a0f0: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 53 79 in$directory Sy
a100: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
a110: 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d  .dll.config]]...
a120: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e  .      set fileN
a130: 61 6d 65 28 32 29 20 5b 61 70 70 65 6e 64 41 72  ame(2) [appendAr
a140: 67 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20  gs $fileName(1) a150: 2e 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 20 .moved].... a160: 20 69 66 20 7b 24 72 65 73 74 6f 72 65 7d 20 74 if {$restore} t
a170: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
a180: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
a190: 24 66 69 6c 65 4e 61 6d 65 28 32 29 5d 7d 20 74  $fileName(2)]} t a1a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. a1b0: 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 file rename$fi
a1c0: 6c 65 4e 61 6d 65 28 32 29 20 24 66 69 6c 65 4e  leName(2) $fileN a1d0: 61 6d 65 28 31 29 0d 0a 0d 0a 20 20 20 20 20 20 ame(1).... a1e0: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
a1f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a200: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a210: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a220: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a230: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- a240: 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 moved \""$file
a250: 4e 61 6d 65 28 32 29 20 22 5c 22 20 74 6f 20 5c  Name(2) "\" to \
a260: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
a270: 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28        $fileName( a280: 31 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 1) \"\n].. a290: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } a2a0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. a2b0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
a2c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a2d0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a2e0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a2f0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a300: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- a310: 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c skipped moving \ a320: 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 ""$fileName(2)
a330: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
a340: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20     "\", it does
a350: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20  not exist\n"]..
a360: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
a370: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
a380: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  lse {..        i
a390: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
a3a0: 24 66 69 6c 65 4e 61 6d 65 28 31 29 5d 7d 20 74  $fileName(1)]} t a3b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. a3c0: 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 file rename$fi
a3d0: 6c 65 4e 61 6d 65 28 31 29 20 24 66 69 6c 65 4e  leName(1) $fileN a3e0: 61 6d 65 28 32 29 0d 0a 0d 0a 20 20 20 20 20 20 ame(2).... a3f0: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
a400: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a410: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a420: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a430: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a440: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- a450: 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 moved \""$file
a460: 4e 61 6d 65 28 31 29 20 22 5c 22 20 74 6f 20 5c  Name(1) "\" to \
a470: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
a480: 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28        $fileName( a490: 32 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 2) \"\n].. a4a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } a4b0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. a4c0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
a4d0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a4e0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a4f0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a500: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a510: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- a520: 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c skipped moving \ a530: 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 ""$fileName(1)
a540: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
a550: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20     "\", it does
a560: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20  not exist\n"]..
a570: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
a580: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
a590: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
a5a0: 6f 63 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50  oc getAppDomainP
a5b0: 72 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69  reamble { {prefi
a5c0: 78 20 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22  x ""} {suffix ""
a5d0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
a5e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
a5f0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
a600: 75 72 6e 73 20 61 20 74 65 73 74 20 73 65 74 75  urns a test setu
a610: 70 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  p script fragmen
a620: 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a  t suitable for..
a630: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76        #       ev
a640: 61 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e 20 69  aluation by an i
a650: 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74  nterpreter creat
a660: 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65  ed in an isolate
a670: 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20  d application..
a680: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 6f 6d       #       dom
a690: 61 69 6e 2e 20 20 54 68 65 20 73 63 72 69 70 74  ain.  The script
a6a0: 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20   fragment being
a6b0: 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65  returned will be
a6c0: 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a   surrounded by..
a6d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
a6e0: 65 20 70 72 65 66 69 78 20 61 6e 64 20 73 75 66  e prefix and suf
a6f0: 66 69 78 20 22 73 63 72 69 70 74 20 66 72 61 67  fix "script frag
a700: 6d 65 6e 74 73 22 20 73 70 65 63 69 66 69 65 64  ments" specified
a710: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d   by our caller,.
a720: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
a730: 66 20 61 6e 79 2e 20 20 54 68 65 20 65 6e 74 69  f any.  The enti
a740: 72 65 20 73 63 72 69 70 74 20 62 65 69 6e 67 20  re script being
a750: 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65  returned will be
a760: 20 73 75 62 73 74 69 74 75 74 65 64 20 76 69 61   substituted via
a770: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
a780: 5b 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 65 20  [subst], in the
a790: 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63  context of our c
a7a0: 61 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 62 65  aller, before be
a7b0: 69 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20  ing returned...
a7c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 54 68 69       #       Thi
a7d0: 73 20 73 74 65 70 20 69 73 20 6e 65 63 65 73 73  s step is necess
a7e0: 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65  ary so that some
a7f0: 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78 74   limited context
a800: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20   information,..
a810: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 69       #       pri
a820: 6d 61 72 69 6c 79 20 72 65 6c 61 74 65 64 20 74  marily related t
a830: 6f 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69  o the testing di
a840: 72 65 63 74 6f 72 69 65 73 2c 20 63 61 6e 20 62  rectories, can b
a850: 65 20 74 72 61 6e 73 66 65 72 72 65 64 0d 0a 20  e transferred..
a860: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
a870: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20  the interpreter
a880: 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20  in the isolated
a890: 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61  application doma
a8a0: 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20  in, making it..
a8b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 62 6c       #       abl
a8c0: 65 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c  e to successfull
a8d0: 79 20 72 75 6e 20 74 65 73 74 73 20 74 68 61 74  y run tests that
a8e0: 20 72 65 71 75 69 72 65 20 6f 6e 65 20 6f 72 20   require one or
a8f0: 6d 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 20 20  more of the..
a900: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73     #       files
a910: 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 74   in one of the t
a920: 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69  esting directori
a930: 65 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 68 6f  es.  Callers sho
a940: 75 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20  uld keep in..
a950: 20 20 20 23 20 20 20 20 20 20 20 6d 69 6e 64 20     #       mind
a960: 74 68 61 74 20 74 68 65 20 74 65 73 74 20 73 63  that the test sc
a970: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65  ript fragment be
a980: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 63 61 6e  ing returned can
a990: 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20  not rely on..
a9a0: 20 20 20 23 20 20 20 20 20 20 20 61 6e 79 20 73     #       any s
a9b0: 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 72  cript library pr
a9c0: 6f 63 65 64 75 72 65 73 20 74 68 61 74 20 61 72  ocedures that ar
a9d0: 65 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62  e not provided b
a9e0: 79 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20  y the Eagle..
a9f0: 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61     #       libra
aa00: 72 79 20 70 61 63 6b 61 67 65 20 28 69 2e 65 2e  ry package (i.e.
aa10: 20 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20   "init.eagle"),
aa20: 69 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 65 20  including those
aa30: 70 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 20 20  provided by..
aa40: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 45     #       the E
aa50: 61 67 6c 65 20 74 65 73 74 20 70 61 63 6b 61 67  agle test packag
aa60: 65 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 66 69  e, unless the fi
aa70: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
aa80: 65 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20  em is loaded..
aa90: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75      #       manu
aaa0: 61 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f 74  ally via some ot
aab0: 68 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 28 65  her mechanism (e
aac0: 2e 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e 67  .g. by including
aad0: 20 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20   appropriate..
aae0: 20 20 20 20 23 20 20 20 20 20 20 20 5b 70 61 63      #       [pac
aaf0: 6b 61 67 65 20 72 65 71 75 69 72 65 5d 20 6f 72  kage require] or
ab00: 20 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e   [source] comman
ab10: 64 73 20 69 6e 20 74 68 65 20 70 72 65 66 69 78  ds in the prefix
ab20: 20 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 20 20   or suffix..
ab30: 20 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74    #       script
ab40: 20 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c   fragments).  Al
ab50: 73 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c 65  so, all variable
ab60: 20 72 65 66 65 72 65 6e 63 65 73 20 61 6e 64 20   references and
ab70: 61 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20 20  all nested..
ab80: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e    #       comman
ab90: 64 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69  ds (i.e. those i
aba0: 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74  n square bracket
abb0: 73 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  s) contained in
abc0: 74 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20  the final..
abd0: 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20   #       script
abe0: 66 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e  fragment will en
abf0: 64 20 75 70 20 62 65 69 6e 67 20 65 76 61 6c 75  d up being evalu
ac00: 61 74 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74  ated in the cont
ac10: 65 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20  ext of the..
ac20: 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 69 6e    #       callin
ac30: 67 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 6e  g interpreter an
ac40: 64 20 6e 6f 74 20 74 68 65 20 74 61 72 67 65 74  d not the target
ac50: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65   interpreter cre
ac60: 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20  ated in the..
ac70: 20 20 20 23 20 20 20 20 20 20 20 69 73 6f 6c 61     #       isola
ac80: 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20  ted application
ac90: 64 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74 68  domain unless th
aca0: 65 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61  e dollar signs a
acb0: 6e 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20 20  nd/or square..
acc0: 20 20 20 20 23 20 20 20 20 20 20 20 62 72 61 63      #       brac
acd0: 6b 65 74 73 20 61 72 65 20 73 70 65 63 69 61 6c  kets are special
ace0: 6c 79 20 71 75 6f 74 65 64 20 77 69 74 68 20 62  ly quoted with b
acf0: 61 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20  ackslashes...
ad00: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
ad10: 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c  rn [uplevel 1 [l
ad20: 69 73 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e  ist subst [appen
ad30: 64 41 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d  dArgs $prefix {. ad40: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. ad50: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The ad60: 5c 5b 6f 62 6a 65 63 74 5c 5d 20 63 6f 6d 6d 61 $object$ comma ad70: 6e 64 20 6d 61 79 20 62 65 20 6d 69 73 73 69 6e nd may be missin ad80: 67 20 69 6e 20 73 6f 6d 65 20 45 61 67 6c 65 20 g in some Eagle ad90: 63 6f 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 core.. # ada0: 20 20 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f library co adb0: 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 20 20 43 nfigurations. C adc0: 6c 6f 6e 69 6e 67 20 61 6e 64 20 75 73 69 6e 67 loning and using add0: 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 0d 0a the procedure.. ade0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # adf0: 5c 5b 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 $changeNativeRu ae00: 6e 74 69 6d 65 4f 70 74 69 6f 6e 5c 5d 20 6d 61 ntimeOption$ ma ae10: 79 20 68 65 6c 70 20 74 6f 20 6d 69 74 69 67 61 y help to mitiga ae20: 74 65 20 74 68 69 73 2e 0d 0a 20 20 20 20 20 20 te this... ae30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 70 72 6f #.. pro ae40: 63 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 c changeNativeRu ae50: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 5c 0d 0a 20 ntimeOption \.. ae60: 20 20 20 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 {[inf ae70: 6f 20 61 72 67 73 20 63 68 61 6e 67 65 4e 61 74 o args changeNat ae80: 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e iveRuntimeOption ae90: 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ]} \.. aea0: 20 20 7b 5b 69 6e 66 6f 20 62 6f 64 79 20 63 68 {[info body ch aeb0: 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d angeNativeRuntim aec0: 65 4f 70 74 69 6f 6e 5d 7d 0d 0a 0d 0a 20 20 20 eOption]}.... aed0: 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. aee0: 20 20 20 20 20 20 20 20 63 68 61 6e 67 65 4e 61 changeNa aef0: 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f tiveRuntimeOptio af00: 6e 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 n [hasRuntimeOpt af10: 69 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 20 20 20 ion native].. af20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } af30: 5b 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 [getTestOverride af40: 73 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 sPreamble [list af50: 70 61 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 path test_channe af60: 6c 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a l]]$suffix]]]..
af70: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
af80: 6f 63 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e  oc tryCopyExtern
af90: 61 6c 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20  alFile {..
afa0: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b        fileName {
afb0: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65  platform ""} {ne
afc0: 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76  wFileName ""} {v
afd0: 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20  erbose false} }
afe0: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75  {..      set sou
aff0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74  rceFileName [get
b000: 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65  ExternalFileName
b010: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... b020: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 if {![file b030: 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 exists$sourceFi
b040: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
b050: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65  .        if {$ve b060: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 rbose} then {.. b070: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
b080: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
b090: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
b0b0: 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e  - skipped copyin
b0c0: 67 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20  g external file
b0d0: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e  \"" $sourceFileN b0e0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. b0f0: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 "\", it doe b100: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. b110: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. b120: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 return.. b130: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if b140: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length b150: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20$newFileName] >
b160: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
b170: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c     set targetFil
b180: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79  eName [getBinary
b190: 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c  FileName $newFil b1a0: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d eName$platform]
b1b0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
b1c0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61  ..        set ta
b1d0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65  rgetFileName [ge
b1e0: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
b1f0: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
b200: 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  orm]..      }...
b210: 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65  .      set targe
b220: 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65  tDirectory [file
b230: 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74   dirname $target b240: 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 FileName].... b250: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. b260: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 . if {![f b270: 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 ile exists$targ
b280: 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68  etDirectory]} th
b290: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
b2a0: 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67  file mkdir $targ b2b0: 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 etDirectory.. b2c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. b2d0: 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 file copy -force b2e0: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
b2f0: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65   $targetFileName b300: 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d .. }] == 0} b310: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. b320: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
b330: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
b340: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
b350: 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 65    "---- copied e
b360: 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f  xternal file fro
b370: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c  m \"" $sourceFil b380: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 eName "\" to \"" b390: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. b3a0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20$targetFileName
b3b0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
b3c0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
b3d0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha b3e0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs b3f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. b400: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 "---- failed to b410: 63 6f 70 79 20 65 78 74 65 72 6e 61 6c 20 66 69 copy external fi b420: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 le from \""$sou
b430: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  rceFileName \..
b440: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74             "\" t
b450: 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c  o \"" $targetFil b460: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. b470: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... b480: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 proc tryCopy b490: 42 69 6e 61 72 79 46 69 6c 65 20 7b 0d 0a 20 20 BinaryFile {.. b4a0: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 fileNa b4b0: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d me {platform ""} b4c0: 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 {newFileName "" b4d0: 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 } {verbose false b4e0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set b4f0: 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 sourceFileName b500: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa b510: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c me$fileName $pl b520: 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 atform].... b530: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis b540: 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ts$sourceFileNa
b550: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
b560: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos b570: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. b580: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
b590: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
b5a0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
b5b0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b          "---- sk
b5c0: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69  ipped copying bi
b5d0: 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73  nary file \"" $s b5e0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d ourceFileName \. b5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " b600: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 \", it does not b610: 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 exist\n"].. b620: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 }.. re b630: 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d turn.. }... b640: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri b650: 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 ng length$newFi
b660: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65  leName] > 0} the
b670: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  n {..        set
b680: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20   targetFileName
b690: 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
b6a0: 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24  e $newFileName$
b6b0: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20  platform]..
b6c0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
b6d0: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c     set targetFil
b6e0: 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46  eName [getBuildF
b6f0: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam b700: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 e$platform]..
b710: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73      }....      s
b720: 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f  et targetDirecto
b730: 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ry [file dirname
b740: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65   $targetFileName b750: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ b760: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. b770: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis b780: 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 ts$targetDirect
b790: 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
b7a0: 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64          file mkd
b7b0: 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74  ir $targetDirect b7c0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ory.. }.. b7d0: 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 file cop b7e0: 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 y -force$source
b7f0: 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74  FileName $target b800: 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 FileName.. b810: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d }] == 0} then {. b820: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
b830: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
b840: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
b850: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
b860: 63 6f 70 69 65 64 20 62 69 6e 61 72 79 20 66 69  copied binary fi
b870: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou b880: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 rceFileName "\" b890: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 to \"" \.. b8a0: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c$targetFil
b8b0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
b8c0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
b8d0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te b8e0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe b8f0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. b900: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c "---- fail b910: 65 64 20 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 ed to copy binar b920: 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 y file from \"" b930: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20$sourceFileName
b940: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
b950: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65  \" to \"" $targe b960: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d tFileName \"\n]. b970: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. b980: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 .... proc try b990: 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d CopyBuildFile {. b9a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c . fil b9b0: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 eName {platform b9c0: 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 ""} {newFileName b9d0: 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 ""} {verbose fa b9e0: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. b9f0: 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 set sourceFileNa ba00: 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 me [getBuildFile ba10: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 Name$fileName $ba20: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 platform].... ba30: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex ba40: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 ists$sourceFile
ba50: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
ba60: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb ba70: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. ba80: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
ba90: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
baa0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
bab0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
bac0: 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20  skipped copying
bad0: 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24  build file \"" $bae0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c sourceFileName \ baf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. bb00: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 "\", it does not bb10: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 exist\n"].. bb20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 }.. r bb30: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a eturn.. }.. bb40: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str bb50: 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 ing length$newF
bb60: 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  ileName] > 0} th
bb70: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  en {..        se
bb80: 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65  t targetFileName
bb90: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
bba0: 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65  ame $newFileName bbb0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20$platform]..
bbc0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
bbd0: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46       set targetF
bbe0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61  ileName [getBina
bbf0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file bc00: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
bc10: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
bc20: 20 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65    set targetDire
bc30: 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e  ctory [file dirn
bc40: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e  ame $targetFileN bc50: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ame].... if bc60: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. bc70: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e bc80: 78 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 xists$targetDir
bc90: 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
bca0: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20  .          file
bcb0: 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72  mkdir $targetDir bcc0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 ectory.. bcd0: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 }.. file bce0: 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 copy -force$sou
bcf0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72  rceFileName $tar bd00: 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 getFileName.. bd10: 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e }] == 0} then bd20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput bd30: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
bd40: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
bd50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
bd60: 2d 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20  -- copied build
bd70: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73  file from \"" $s bd80: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c ourceFileName "\ bd90: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 " to \"" \.. bda0: 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46$targetF
bdb0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
bdc0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
bdd0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: bde0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap bdf0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. be00: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 "---- fa be10: 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 iled to copy bui be20: 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 ld file from \"" be30: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
be40: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
be50: 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67  "\" to \"" $targ be60: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d etFileName \"\n] be70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } be80: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 ..... proc tr be90: 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c yDeleteBinaryFil bea0: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c e { fileName {pl beb0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 atform ""} {verb bec0: 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a ose false} } {.. bed0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa bee0: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c me [getBinaryFil bef0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 eName$fileName
bf00: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20  $platform].... bf10: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e bf20: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
bf30: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
bf40: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20    if {$verbose} bf50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. bf60: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
bf70: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
bf80: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
bf90: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
bfa0: 65 64 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61  ed deleting bina
bfb0: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  ry file \"" $fil bfc0: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. bfd0: 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 "\", it d bfe0: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 oes not exist\n" bff0: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. c000: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 return.. c010: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i c020: 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 f {[catch {file c030: 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 delete$fileName
c040: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  }] == 0} then {.
c050: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $c060: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ c070: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. c080: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- c090: 64 65 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66 deleted binary f c0a0: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
c0b0: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  e \"\n]..      }
c0c0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
c0d0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c c0e0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr c0f0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. c100: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 "---- failed t c110: 6f 20 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 o delete binary c120: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 file \""$fileNa
c130: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  me \"\n]..
c140: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
c150: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42   proc tryDeleteB
c160: 75 69 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e  uildFile { fileN
c170: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22  ame {platform ""
c180: 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65  } {verbose false
c190: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  } } {..      set
c1a0: 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75   fileName [getBu
c1b0: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c  ildFileName $fil c1c0: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d eName$platform]
c1d0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
c1e0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil c1f0: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. c200: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 if {$ver
c210: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bose} then {..
c220: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: c230: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a c240: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. c250: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- c260: 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e skipped deletin c270: 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 g build file \"" c280: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
c290: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
c2a0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
c2b0: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
c2c0: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
c2d0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  n..      }....
c2e0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
c2f0: 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c  file delete $fil c300: 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 eName}] == 0} th c310: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp c320: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
c330: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
c340: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
c350: 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69  ---- deleted bui
c360: 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  ld file \"" $fil c370: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. c380: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. c390: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
c3a0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
c3b0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
c3c0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c        "---- fail
c3d0: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69  ed to delete bui
c3e0: 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  ld file \"" $fil c3f0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. c400: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... c410: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 proc tryCopy c420: 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 Assembly {.. c430: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName c440: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b {platform ""} { c450: 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f pdb true} {verbo c460: 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 se false} } {.. c470: 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c tryCopyBuil c480: 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 dFile$fileName
c490: 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65  $platform ""$ve
c4a0: 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69  rbose....      i
c4b0: 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d  f {$pdb} then {. c4c0: 0a 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 . tryCopy c4d0: 42 75 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e BuildFile [appen c4e0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. c4f0: 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e [file rootn c500: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e ame$fileName] .
c510: 70 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 22  pdb] $platform " c520: 22 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 "$verbose..
c530: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
c540: 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74     proc tryDelet
c550: 65 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20  eAssembly {..
c560: 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
c570: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
c580: 7b 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62  {pdb true} {verb
c590: 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ose false} } {..
c5a0: 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42        tryDeleteB
c5b0: 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e  inaryFile $fileN c5c0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 ame$platform $v c5d0: 65 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 erbose.... c5e0: 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b if {$pdb} then {
c5f0: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44 65 6c  ..        tryDel
c600: 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 5b 61  eteBinaryFile [a
c610: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
c620: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 72           [file r
c630: 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ootname $fileNam c640: 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74 66 6f e] .pdb]$platfo
c650: 72 6d 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20  rm $verbose.. c660: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... c670: 20 20 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 proc tryLoad c680: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e Assembly { fileN c690: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 ame {platform "" c6a0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set c6b0: 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 fileName [getBi c6c0: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
c6d0: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d  leName $platform c6e0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ c6f0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. c700: 20 73 65 74 20 61 73 73 65 6d 62 6c 79 20 5b 6f set assembly [o c710: 62 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 bject load -load c720: 74 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 type File -alias c730: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
c740: 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e     }] == 0} then
c750: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
c760: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
c770: 6f 77 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65  ow, add the nece
c780: 73 73 61 72 79 20 74 65 73 74 20 63 6f 6e 73 74  ssary test const
c790: 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20  raint...
c7a0: 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  #..        addCo
c7b0: 6e 73 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 72  nstraint [file r
c7c0: 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61  ootname [file ta
c7d0: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  il $fileName]].. c7e0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. c7f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 # NOTE: Gra c800: 62 20 74 68 65 20 69 6d 61 67 65 20 72 75 6e 74 b the image runt c810: 69 6d 65 20 76 65 72 73 69 6f 6e 20 66 72 6f 6d ime version from c820: 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 65 the assembly be c830: 63 61 75 73 65 0d 0a 20 20 20 20 20 20 20 20 23 cause.. # c840: 20 20 20 20 20 20 20 73 65 76 65 72 61 6c 20 74 several t c850: 65 73 74 73 20 72 65 6c 79 20 6f 6e 20 69 74 20 ests rely on it c860: 68 61 76 69 6e 67 20 61 20 63 65 72 74 61 69 6e having a certain c870: 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 value... c880: 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 #.. addC c890: 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen c8a0: 64 41 72 67 73 20 5b 66 69 6c 65 20 74 61 69 6c dArgs [file tail c8b0: 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d$fileName] _ \.
c8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 61  .            [$a c8d0: 73 73 65 6d 62 6c 79 20 49 6d 61 67 65 52 75 6e ssembly ImageRun c8e0: 74 69 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d timeVersion]]... c8f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. c900: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu c910: 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 rn the full path c920: 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 64 20 66 of the loaded f c930: 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ile... #. c940: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return c950: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
c960: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
c970: 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  rn ""..    }....
c980: 0a 20 20 20 20 70 72 6f 63 20 69 73 53 51 4c 69  .    proc isSQLi
c990: 74 65 52 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 20  teReady {} {..
c9a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
c9b0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
c9c0: 75 72 65 20 6d 75 73 74 20 72 65 74 75 72 6e 20  ure must return
c9d0: 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66  non-zero only if
c9e0: 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69   the SQLite nati
c9f0: 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ve..      #
ca00: 20 20 6c 69 62 72 61 72 79 20 61 6e 64 20 74 68    library and th
ca10: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
ca20: 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73  Lite managed ass
ca30: 65 6d 62 6c 79 20 61 72 65 20 6c 6f 61 64 65 64  embly are loaded
ca40: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
ca50: 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73  and ready for us
ca60: 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  e by the test su
ca70: 69 74 65 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c  ite.  Currently,
ca80: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 0d   this procedure.
ca90: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
caa0: 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20  hould be called
cab0: 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65 20 5b  only after the [
cac0: 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 5d  tryLoadAssembly]
cad0: 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 0d 0a   procedure has..
cae0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
caf0: 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f  en called to pro
cb00: 62 65 20 66 6f 72 20 74 68 65 20 53 79 73 74 65  be for the Syste
cb10: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61  m.Data.SQLite ma
cb20: 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 0d 0a  naged assembly..
cb30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e        #       an
cb40: 64 20 74 68 65 20 5b 63 68 65 63 6b 46 6f 72 53  d the [checkForS
cb50: 51 4c 69 74 65 5d 20 70 72 6f 63 65 64 75 72 65  QLite] procedure
cb60: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
cb70: 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 0d 0a 20   to probe for..
cb80: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
cb90: 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c   SQLite native l
cba0: 69 62 72 61 72 79 3b 20 6f 74 68 65 72 77 69 73  ibrary; otherwis
cbb0: 65 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  e, this procedur
cbc0: 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20  e will simply..
cbd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6c 77       #       alw
cbe0: 61 79 73 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e  ays return zero.
cbf0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
cc00: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d   return [expr {.
cc10: 0a 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f  .        [haveCo
cc20: 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e  nstraint System.
cc30: 44 61 74 61 2e 53 51 4c 69 74 65 5d 20 26 26 20  Data.SQLite] &&
cc40: 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
cc50: 53 51 4c 69 74 65 5d 0d 0a 20 20 20 20 20 20 7d  SQLite]..      }
cc60: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
cc70: 20 70 72 6f 63 20 6d 61 74 63 68 50 6c 61 74 66   proc matchPlatf
cc80: 6f 72 6d 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d  orm { platform }
cc90: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
cca0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d     # NOTE: An em
ccb0: 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  pty string for t
ccc0: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e  he platform mean
ccd0: 73 20 74 68 61 74 20 74 68 65 20 62 75 69 6c 64  s that the build
cce0: 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23   is not..      #
ccf0: 20 20 20 20 20 20 20 5b 70 72 69 6d 61 72 69 6c         [primaril
cd00: 79 5d 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c  y] a native buil
cd10: 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74  d; therefore, it
cd20: 20 61 6c 77 61 79 73 20 6d 61 74 63 68 65 73 2e   always matches.
cd30: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
cd40: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
cd50: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d  gth $platform] = cd60: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. cd70: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true cd80: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... cd90: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO cda0: 54 45 3a 20 44 6f 65 73 20 74 68 65 20 73 70 65 TE: Does the spe cdb0: 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 cified platform cdc0: 6d 61 74 63 68 20 75 70 20 74 6f 20 74 68 65 20 match up to the cdd0: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 3f current process? cde0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. cdf0: 20 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 if {$platform e
ce00: 71 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74  q [machineToPlat
ce10: 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74  form $::tcl_plat ce20: 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 form(machine)]} ce30: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. ce40: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. ce50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. ce60: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T ce70: 68 65 20 73 70 65 63 69 66 69 65 64 20 70 6c 61 he specified pla ce80: 74 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d tform does not m ce90: 61 74 63 68 20 75 70 20 77 69 74 68 20 74 68 65 atch up with the cea0: 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 platform.. ceb0: 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 # for the cec0: 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 current process ced0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. cee0: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. cef0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr cf00: 6f 63 20 68 61 76 65 53 51 4c 69 74 65 4f 62 6a oc haveSQLiteObj cf10: 65 63 74 43 6f 6d 6d 61 6e 64 20 7b 7d 20 7b 0d ectCommand {} {. cf20: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. cf30: 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 5b # NOTE: Is the [ cf40: 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 object] command cf50: 63 75 72 72 65 6e 74 6c 79 20 61 76 61 69 6c 61 currently availa cf60: 62 6c 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ble?.. #.. cf70: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp cf80: 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 r {[llength [inf cf90: 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 o commands objec cfa0: 74 5d 5d 20 3e 20 30 7d 5d 0d 0a 20 20 20 20 7d t]] > 0}].. } cfb0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 ..... proc ch cfc0: 65 63 6b 46 6f 72 53 51 4c 69 74 65 4f 62 6a 65 eckForSQLiteObje cfd0: 63 74 43 6f 6d 6d 61 6e 64 20 7b 20 63 68 61 6e ctCommand { chan cfe0: 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 nel } {.. t cff0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
d000: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
d010: 20 5c 22 6f 62 6a 65 63 74 5c 22 20 63 6f 6d 6d   \"object\" comm
d020: 61 6e 64 20 75 73 61 67 65 2e 2e 2e 20 22 0d 0a  and usage... "..
d030: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e  ..      if {![in
d040: 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73  fo exists ::no(s
d050: 71 6c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  qliteObjectComma
d060: 6e 64 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  nd)] && \..
d070: 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65       [haveSQLite
d080: 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20  ObjectCommand]}
d090: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
d0a0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79  tputs $channel y d0b0: 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c es\n.. } el d0c0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. d0d0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: d0e0: 20 55 6e 6c 65 73 73 20 77 65 20 61 72 65 20 66 Unless we are f d0f0: 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d 20 64 6f orbidden from do d100: 69 6e 67 20 73 6f 2c 20 61 64 64 20 73 6f 6d 65 ing so, add some d110: 20 63 6f 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 constraints.. d120: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th d130: 61 74 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 6d 6f at will allow mo d140: 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 20 73 st of the test s d150: 75 69 74 65 20 74 6f 20 72 75 6e 20 28 69 2e 65 uite to run (i.e d160: 2e 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 . those.. d170: 20 23 20 20 20 20 20 20 20 74 65 73 74 73 20 74 # tests t d180: 68 61 74 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 hat do not direc d190: 74 6c 79 20 72 65 6c 79 20 75 70 6f 6e 20 74 68 tly rely upon th d1a0: 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 e [object] comma d1b0: 6e 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d nd)... #. d1c0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i d1d0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( d1e0: 73 68 69 6d 53 51 4c 69 74 65 41 73 73 65 6d 62 shimSQLiteAssemb d1f0: 6c 79 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d lyConstraints)]} d200: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. d210: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint d220: 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 SQLite.. d230: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint d240: 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a SQLiteInterop.. d250: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e addCon d260: 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 straint System.D d270: 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 ata.SQLite.. d280: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra d290: 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e int System.Data. d2a0: 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f SQLite.Encryptio d2b0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 n.. add d2c0: 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 Constraint Syste d2d0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 m.Data.SQLite.Li d2e0: 6e 71 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 nq.... d2f0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 addConstraint [a d300: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. d310: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste d320: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl d330: 6c 5f 76 20 5b 67 65 74 42 75 69 6c 64 43 6c 72 l_v [getBuildClr d340: 56 65 72 73 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 Version]].. d350: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... d360: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist d370: 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 s ::no(shimSQLit d380: 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 43 eDefineConstantC d390: 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 onstraints)]} th d3a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. d3b0: 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43 6f foreach defineCo d3c0: 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a nstant [list \.. d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e IN d3e0: 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f TEROP_EXTENSION_ d3f0: 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f FUNCTIONS INTERO d400: 50 5f 46 54 53 35 5f 45 58 54 45 4e 53 49 4f 4e P_FTS5_EXTENSION d410: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. d420: 20 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f INTEROP_JSON1_ d430: 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f EXTENSION INTERO d440: 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 P_PERCENTILE_EXT d450: 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 ENSION \.. d460: 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f INTEROP_ d470: 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e REGEXP_EXTENSION d480: 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 INTEROP_TEST_EX d490: 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 TENSION \.. d4a0: 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP d4b0: 5f 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f _TOTYPE_EXTENSIO d4c0: 4e 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 N INTEROP_VIRTUA d4d0: 4c 5f 54 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20 L_TABLE \.. d4e0: 20 20 20 20 20 20 20 20 20 55 53 45 5f 49 4e 54 USE_INT d4f0: 45 52 4f 50 5f 44 4c 4c 5d 20 7b 0d 0a 20 20 20 EROP_DLL] {.. d500: 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 addCons d510: 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr d520: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. d530: 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite d540: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 DefineConstantPr d550: 65 66 69 78 5d 20 24 64 65 66 69 6e 65 43 6f 6e efix]$defineCon
d560: 73 74 61 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20  stant]..
d570: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
d580: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
d590: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
d5a0: 28 73 68 69 6d 53 51 4c 69 74 65 56 69 73 75 61  (shimSQLiteVisua
d5b0: 6c 53 74 75 64 69 6f 43 6f 6e 73 74 72 61 69 6e  lStudioConstrain
d5c0: 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ts)]} then {..
d5d0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
d5e0: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
d5f0: 73 20 76 69 73 75 61 6c 53 74 75 64 69 6f 20 5b  s visualStudio [
d600: 67 65 74 42 75 69 6c 64 59 65 61 72 5d 5d 0d 0a  getBuildYear]]..
d610: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
d620: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan d630: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 nel no\n.. d640: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... d650: 20 70 72 6f 63 20 63 68 61 6e 67 65 4e 61 74 69 proc changeNati d660: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 veRuntimeOption d670: 7b 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 { native } {.. d680: 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 if {[llength d690: 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 [info commands d6a0: 64 65 62 75 67 5d 5d 20 3e 20 30 20 26 26 20 5c debug]] > 0 && \ d6b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 .. [lle d6c0: 6e 67 74 68 20 5b 69 6e 66 6f 20 73 75 62 63 6f ngth [info subco d6d0: 6d 6d 61 6e 64 73 20 64 65 62 75 67 20 72 75 6e mmands debug run d6e0: 74 69 6d 65 6f 70 74 69 6f 6e 5d 5d 20 3e 20 30 timeoption]] > 0 d6f0: 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 && [catch {.. d700: 20 20 20 20 20 20 64 65 62 75 67 20 72 75 6e 74 debug runt d710: 69 6d 65 6f 70 74 69 6f 6e 20 5b 65 78 70 72 20 imeoption [expr d720: 7b 24 6e 61 74 69 76 65 20 3f 20 22 61 64 64 22 {$native ? "add"
d730: 20 3a 20 22 72 65 6d 6f 76 65 22 7d 5d 20 6e 61   : "remove"}] na
d740: 74 69 76 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d  tive..      }] =
d750: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
d760: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
d770: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
d780: 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69     if {[haveSQLi
d790: 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
d7a0: 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20   && [catch {..
d7b0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
d7c0: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e  oke Interpreter.
d7d0: 47 65 74 41 63 74 69 76 65 20 5b 65 78 70 72 20  GetActive [expr
d7e0: 7b 24 6e 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20  {$native ? \.. d7f0: 20 20 20 20 20 20 20 20 20 20 22 41 64 64 52 75 "AddRu d800: 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22 ntimeOption" : " d810: 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74 RemoveRuntimeOpt d820: 69 6f 6e 22 7d 5d 20 6e 61 74 69 76 65 0d 0a 20 ion"}] native.. d830: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 }] == 0} th d840: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re d850: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. d860: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu d870: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. d880: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 .... proc che d890: 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 ckForSQLiteBuild d8a0: 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c s { channel {sel d8b0: 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a ect false} } {.. d8c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # d8d0: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 NOTE: Check for d8e0: 20 65 76 65 72 79 20 70 6f 73 73 69 62 6c 65 20 every possible d8f0: 76 61 6c 69 64 20 63 6f 6d 62 69 6e 61 74 69 6f valid combinatio d900: 6e 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 n of values used d910: 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 when.. # d920: 20 20 20 20 20 6c 6f 63 61 74 69 6e 67 20 6f 75 locating ou d930: 74 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70 t the build outp d940: 75 74 20 64 69 72 65 63 74 6f 72 79 2c 20 73 68 ut directory, sh d950: 6f 77 69 6e 67 20 65 61 63 68 20 61 76 61 69 6c owing each avail d960: 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 able.. # d970: 20 20 20 20 62 75 69 6c 64 20 76 61 72 69 61 74 build variat d980: 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65 20 77 61 ion along the wa d990: 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 y... #.. d9a0: 20 20 20 66 6f 72 65 61 63 68 20 6e 61 74 69 76 foreach nativ d9b0: 65 20 5b 6c 69 73 74 20 66 61 6c 73 65 20 74 72 e [list false tr d9c0: 75 65 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 ue] {.. f d9d0: 6f 72 65 61 63 68 20 79 65 61 72 20 5b 67 65 74 oreach year [get d9e0: 42 75 69 6c 64 59 65 61 72 73 5d 20 7b 0d 0a 20 BuildYears] {.. d9f0: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach da00: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b configuration [ da10: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur da20: 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 ations] {.. da30: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. da40: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi da50: 67 75 72 65 20 6f 75 74 20 74 68 65 20 65 66 66 gure out the eff da60: 65 63 74 69 76 65 20 62 75 69 6c 64 20 70 6c 61 ective build pla da70: 74 66 6f 72 6d 2e 20 20 54 68 69 73 20 69 73 0d tform. This is. da80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # da90: 20 20 20 20 20 62 61 73 65 64 20 6f 6e 20 77 68 based on wh daa0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 5b ether or not a [ dab0: 70 72 69 6d 61 72 69 6c 79 5d 20 6e 61 74 69 76 primarily] nativ dac0: 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 e build.. dad0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is dae0: 62 65 69 6e 67 20 75 73 65 64 2e 20 20 46 6f 72 being used. For daf0: 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e [primarily] non db00: 2d 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 0d -native builds,. db10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # db20: 20 20 20 20 20 74 68 69 73 20 77 69 6c 6c 20 62 this will b db30: 65 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e e an empty strin db40: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 g... db50: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 #.. s db60: 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 et platform [get db70: 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e BuildPlatform$n
db80: 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  ative]....
db90: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha dba0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs dbb0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. dbc0: 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 "---- checki dbd0: 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ng for System.Da dbe0: 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 ta.SQLite build dbf0: 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a 20 20 20 \"" [expr \.. dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 24 6e {$n
dc10: 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f  ative ? "native/
dc20: 22 20 3a 20 22 22 7d 5d 20 5b 65 78 70 72 20 7b  " : ""}] [expr {
dc30: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5c  [string length \
dc40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
dc50: 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30    $platform] > 0 dc60: 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 ? [appendArgs$
dc70: 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22  platform /] : ""
dc80: 7d 5d 20 24 79 65 61 72 20 5c 0d 0a 20 20 20 20  }] $year \.. dc90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 63 /$c
dca0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 5c 22  onfiguration "\"
dcb0: 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ... "]....
dcc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
dcd0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
dce0: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61  ld the fully qua
dcf0: 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 79  lified directory
dd00: 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 73   where the neces
dd10: 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  sary..
dd20: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e    #       compon
dd30: 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e  ents for System.
dd40: 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75  Data.SQLite shou
dd50: 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20  ld be found...
dd60: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
dd70: 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72           set dir
dd80: 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 75 69 6c  ectory [joinBuil
dd90: 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61 74 69  dDirectory $nati dda0: 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ve \.. ddb0: 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 42 [getBuildB ddc0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 79 aseDirectory]$y
ddd0: 65 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63  ear $platform$c
dde0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d  onfiguration]...
ddf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
de00: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
de10: 54 45 3a 20 44 6f 20 74 68 65 20 6e 65 63 65 73  TE: Do the neces
de20: 73 61 72 79 20 66 69 6c 65 73 20 65 78 69 73 74  sary files exist
de30: 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 6e 6f  ?  Currently, no
de40: 20 6f 74 68 65 72 20 73 74 65 70 73 0d 0a 20 20   other steps..
de50: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
de60: 20 20 61 72 65 20 74 61 6b 65 6e 20 74 6f 20 76    are taken to v
de70: 65 72 69 66 79 20 74 68 69 73 20 62 75 69 6c 64  erify this build
de80: 20 69 73 20 61 63 74 75 61 6c 6c 79 20 76 69 61   is actually via
de90: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ble...
dea0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
deb0: 20 69 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 61   if {[isBuildAva
dec0: 69 6c 61 62 6c 65 20 24 6e 61 74 69 76 65 20 24  ilable $native$
ded0: 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
dee0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
def0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
df00: 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20     # NOTE: When
df10: 69 6e 20 22 73 65 6c 65 63 74 22 20 6d 6f 64 65  in "select" mode
df20: 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  , automatically
df30: 73 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 74  select the first
df40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
df50: 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c  #       availabl
df60: 65 20 62 75 69 6c 64 20 6f 66 20 53 79 73 74 65  e build of Syste
df70: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61 6e  m.Data.SQLite an
df80: 64 20 74 68 65 6e 20 72 65 74 75 72 6e 0d 0a 20  d then return..
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
dfa0: 20 20 20 20 20 69 6d 6d 65 64 69 61 74 65 6c 79       immediately
dfb0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
dfc0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
dfd0: 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26    if {$select && dfe0: 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 [matchPlatform dff0: 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e$platform]} then
e000: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
e010: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
e020: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
e030: 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 65  anually override
e040: 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 20 64   all the build d
e050: 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63 74 69  irectory selecti
e060: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..
e070: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 6c 61      #       rela
e080: 74 65 64 20 74 65 73 74 20 73 65 74 74 69 6e 67  ted test setting
e090: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f  s in order to fo
e0a0: 72 63 65 20 74 68 69 73 20 62 75 69 6c 64 0d 0a  rce this build..
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e0c0: 23 20 20 20 20 20 20 20 6f 66 20 53 79 73 74 65  #       of Syste
e0d0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 6f  m.Data.SQLite to
e0e0: 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20   be used...
e0f0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e110: 20 7b 21 5b 63 68 61 6e 67 65 4e 61 74 69 76 65   {![changeNative
e120: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 6e  RuntimeOption $n e130: 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a ative]} then {.. e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e150: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
e160: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e180: 20 20 20 20 20 20 22 6e 6f 2c 20 66 61 69 6c 65        "no, faile
e190: 64 20 74 6f 20 22 20 5b 65 78 70 72 20 7b 24 6e  d to " [expr {$n e1a0: 61 74 69 76 65 20 3f 20 22 61 64 64 22 20 3a 20 ative ? "add" : e1b0: 22 72 65 6d 6f 76 65 22 7d 5d 20 5c 0d 0a 20 20 "remove"}] \.. e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e1d0: 20 20 20 20 22 20 74 68 65 20 5c 22 6e 61 74 69 " the \"nati e1e0: 76 65 5c 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 ve\" runtime opt e1f0: 69 6f 6e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 ion\n"].... e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret e210: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 urn false.. e220: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e240: 73 65 74 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 set ::test_year e250: 24 79 65 61 72 0d 0a 20 20 20 20 20 20 20 20 20$year..
e260: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73         set ::tes
e270: 74 5f 70 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74  t_platform $plat e280: 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 form.. e290: 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 set ::test e2a0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 _configuration$
e2b0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 0d  configuration...
e2c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
e2d0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel e2e0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e300: 20 20 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 "yes, selecte e310: 64 20 28 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 d (" [expr {$nat
e320: 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20  ive ? "native/"
e330: 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20  : ""}] \..
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65                [e
e350: 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  xpr {[string len
e360: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e  gth $platform] > e370: 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 0 ? [appendArgs e380: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. e390: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72$platfor
e3a0: 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61  m /] : ""}] $yea e3b0: 72 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 r /$configurati
e3c0: 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20  on ")\n"]....
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
e3e0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
e3f0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
e400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
e410: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel e420: 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 yes\n.. e430: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. e440: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu e460: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e ts$channel no\n
e470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
e480: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
e490: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
e4a0: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
e4b0: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c   false..    }...
e4c0: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
e4d0: 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65  ForSQLiteRelease
e4e0: 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c  s { channel {sel
e4f0: 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ect false} } {..
e500: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
e510: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72   NOTE: Check for
e520: 20 70 61 73 74 20 72 65 6c 65 61 73 65 73 20 6f   past releases o
e530: 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  f System.Data.SQ
e540: 4c 69 74 65 20 69 6e 20 74 68 65 20 64 69 72 65  Lite in the dire
e550: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20  ctory..      #
e560: 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 69       contained i
e570: 6e 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61  n the "System.Da
e580: 74 61 2e 53 51 4c 69 74 65 22 20 65 6e 76 69 72  ta.SQLite" envir
e590: 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2c  onment variable,
e5a0: 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20   if..      #
e5b0: 20 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20     present...
e5c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
e5d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65  [info exists ::e
e5e0: 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nv(System.Data.S
e5f0: 51 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20 20  QLite)] && \..
e600: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
e610: 6c 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53 79  length $::env(Sy e620: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite e630: 29 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a )] > 0} then {.. e640: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. e650: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build e660: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 the fully quali e670: 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 fied directory w e680: 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 here the necessa e690: 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ry.. # e6a0: 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 components f e6b0: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 or System.Data.S e6c0: 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20 QLite should be e6d0: 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 found... e6e0: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 #.. set d e6f0: 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6e irectory [file n e700: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file e710: 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. e720: 20 20 20 20 24 3a 3a 65 6e 76 28 53 79 73 74 65$::env(Syste
e730: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 20 5b  m.Data.SQLite) [
e740: 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f  getReleaseVersio
e750: 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n]]]....
e760: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ e770: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. e780: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- e790: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 checking for Sys e7a0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite e7b0: 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 release \"" \.. e7c0: 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72 65$dire
e7d0: 63 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d  ctory "\"... "].
e7e0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
e7f0: 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62  isReleaseAvailab
e800: 6c 65 20 24 64 69 72 65 63 74 6f 72 79 20 70 6c  le $directory pl e810: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. e820: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ e830: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 string length$p
e840: 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74  latform] == 0} t
e850: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
e860: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
e870: 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20  unknown..
e880: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
e890: 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26    if {$select && e8a0: 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 [matchPlatform e8b0: 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e$platform]} then
e8c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
e8d0: 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65  set ::build_dire
e8e0: 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79  ctory $directory e8f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... e900: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
e910: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c  appendArgs "yes,
e920: 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c   selected (" $pl e930: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d atform ")\n"]... e940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret e950: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. e960: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. e970: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs e980: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
e990: 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70 6c  Args "yes (" $pl e9a0: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 atform ")\n"].. e9b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. e9c0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. e9d0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
e9e0: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20  hannel no\n....
e9f0: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
ea00: 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d 64 65   path [lsort -de
ea10: 63 72 65 61 73 69 6e 67 20 5b 66 69 6c 65 20 6c  creasing [file l
ea20: 69 73 74 20 24 64 69 72 65 63 74 6f 72 79 20 2a  ist $directory * ea30: 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ]] {.. ea40: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 if {[file exis ea50: 74 73 20 24 70 61 74 68 5d 20 26 26 20 5b 66 69 ts$path] && [fi
ea60: 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24  le isdirectory $ea70: 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 path]} then {.. ea80: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu ea90: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
eaa0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
eac0: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for
ead0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
eae0: 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c  te release \"" \
eaf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
eb00: 20 20 20 20 24 70 61 74 68 20 22 5c 22 2e 2e 2e      $path "\"... eb10: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 "].... eb20: 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 if {[isRele eb30: 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24 70 61 aseAvailable$pa
eb40: 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68  th platform]} th
eb50: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
eb60: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
eb70: 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f  g length $platfo eb80: 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b rm] == 0} then { eb90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. eba0: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d set platform ebb0: 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 unknown.. ebc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i ebe0: 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d f {$select && [m
ebf0: 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c  atchPlatform $pl ec00: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. ec10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . ec20: 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 set ::build_d ec30: 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 0d 0a irectory$path..
ec40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
ec50: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann ec60: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " ec70: 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 yes, selected (" ec80: 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22$platform ")\n"
ec90: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
eca0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
ecb0: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..
ecc0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ece0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ ecf0: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 appendArgs "yes ed00: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c ("$platform ")\
ed10: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n"]..
ed20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
ed30: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ed50: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n ed60: 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 o\n.. ed70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. ed80: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } ed90: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. eda0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. edb0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
edc0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
edd0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
ede0: 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  ---- environment
edf0: 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73 74   variable \"Syst
ee00: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22  em.Data.SQLite\"
ee10: 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 20   is not " \..
ee20: 20 20 20 20 20 20 20 20 20 22 73 65 74 2c 20 73           "set, s
ee30: 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 6f  kipping check fo
ee40: 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22  r releases...\n"
ee50: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
ee60: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
ee70: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
ee80: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c  proc checkForSQL
ee90: 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 68 61  iteLibrary { cha
eea0: 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20  nnel } {..
eeb0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel " eec0: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo eed0: 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 r SQLite core li eee0: 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 brary... ".... eef0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { ef00: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 .. object ef10: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + ef20: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. ef30: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. ef40: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi ef50: 74 65 33 20 53 51 4c 69 74 65 56 65 72 73 69 6f te3 SQLiteVersio ef60: 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69 n.. } versi ef70: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b on] == 0} then { ef80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. ef90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che efa0: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e ck if the return efb0: 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e ed version was n efc0: 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b ull. If so, mak efd0: 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 e it easy.. efe0: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 # to sp eff0: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ot... #.. f000: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str f010: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 ing length$vers
f020: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ion] == 0} then
f030: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
f040: 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20   version null..
f050: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
f060: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
f070: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
f080: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73  o query the Foss
f090: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69  il source identi
f0a0: 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c  fier for the SQL
f0b0: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ite..        #
f0c0: 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72       core librar
f0d0: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
f0e0: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
f0f0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
f100: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
f110: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
f120: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
f140: 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74  te.SQLite3 SQLit
f150: 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20  eSourceId..
f160: 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20     } sourceId]}
f170: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
f180: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
f190: 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64   NOTE: We failed
f1a0: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f   to query the Fo
f1b0: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
f1c0: 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20  tifier...
f1d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
f1e0: 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b  set sourceId unk
f1f0: 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  nown..        }.
f200: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
f210: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
f220: 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72  eck if the retur
f230: 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63  ned Fossil sourc
f240: 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73  e identifier was
f250: 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20   null.  If..
f260: 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20      #       so,
f270: 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20  make it easy to
f280: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  spot...        #
f290: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
f2a0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f  tring length $so f2b0: 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 urceId] == 0} th f2c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. f2d0: 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c set sourceId nul f2e0: 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a l.. }.... f2f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. f300: 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 # NOTE: Yes, f310: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 the SQLite core f320: 6c 69 62 72 61 72 79 20 61 70 70 65 61 72 73 20 library appears f330: 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e to be available. f340: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. f350: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai f360: 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 nt SQLite.... f370: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
f380: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
f390: 22 79 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e  "yes (" $version f3a0: 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 " "$sourceId "
f3b0: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65  )\n"]..      } e
f3c0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
f3d0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no f3e0: 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 \n.. }.. f3f0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc f400: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e checkForSQLiteIn f410: 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c 20 terop { channel f420: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 } {.. tputs f430: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
f440: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c  checking for SQL
f450: 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65  ite interop asse
f460: 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  mbly... "....
f470: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
f480: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object
f490: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
f4a0: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
f4b0: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
f4c0: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
f4d0: 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f  e3 InteropVersio
f4e0: 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69  n..      } versi
f4f0: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
f500: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
f510: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
f520: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e  ck if the return
f530: 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e  ed version was n
f540: 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b  ull.  If so, mak
f550: 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20  e it easy..
f560: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70     #       to sp
f570: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ot...        #..
f580: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
f590: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73  ing length $vers f5a0: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ion] == 0} then f5b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set f5c0: 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 version null.. f5d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... f5e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # f5f0: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t f600: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 o query the Foss f610: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 il source identi f620: 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c fier for the SQL f630: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ite.. # f640: 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 core librar f650: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 y... #.. f660: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc f670: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o f680: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl f690: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ f6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f6b0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi f6c0: 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 te.SQLite3 Inter f6d0: 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 opSourceId.. f6e0: 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d } sourceId]} f6f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. f700: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. f710: 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 # NOTE: We faile f720: 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 d to query the F f730: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 ossil source ide f740: 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 ntifier... f750: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. f760: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e set sourceId un f770: 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d known.. } f780: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. f790: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C f7a0: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 heck if the retu f7b0: 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 rned Fossil sour f7c0: 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 ce identifier wa f7d0: 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 s null. If.. f7e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c # so, f7f0: 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f make it easy to f800: 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 spot... f810: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ f820: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 string length$s
f830: 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74  ourceId] == 0} t
f840: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
f850: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75   set sourceId nu
f860: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ll..        }...
f870: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f880: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 65 66 6f      # NOTE: Befo
f890: 72 65 20 61 63 74 75 61 6c 6c 79 20 61 64 64 69  re actually addi
f8a0: 6e 67 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73  ng the test cons
f8b0: 74 72 61 69 6e 74 2c 20 6d 61 6b 65 20 73 75 72  traint, make sur
f8c0: 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  e the..        #
f8d0: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 69         version i
f8e0: 73 20 76 61 6c 69 64 20 28 69 2e 65 2e 20 6e 6f  s valid (i.e. no
f8f0: 74 20 6a 75 73 74 20 74 68 61 74 20 77 65 20 63  t just that we c
f900: 6f 75 6c 64 20 71 75 65 72 79 20 69 74 29 2e 0d  ould query it)..
f910: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f920: 20 20 20 20 69 66 20 7b 24 76 65 72 73 69 6f 6e      if {$version f930: 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e ne "null"} then f940: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. f950: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT f960: 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 E: Yes, the SQLi f970: 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d te interop assem f980: 62 6c 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 bly appears to b f990: 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 e available... f9a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. f9b0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai f9c0: 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 nt SQLiteInterop f9d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 .... se f9e0: 74 20 61 6e 73 77 65 72 20 79 65 73 0d 0a 20 20 t answer yes.. f9f0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. fa00: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 61 6e set an fa10: 73 77 65 72 20 6e 6f 0d 0a 20 20 20 20 20 20 20 swer no.. fa20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 }.... tp fa30: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
fa40: 70 65 6e 64 41 72 67 73 20 24 61 6e 73 77 65 72  pendArgs $answer fa50: 20 22 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 " ("$version "
fa60: 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c   " $sourceId ")\ fa70: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 n"].. } els fa80: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu fa90: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e ts$channel no\n
faa0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
fab0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68  .....    proc ch
fac0: 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69  eckForSQLiteDefi
fad0: 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61  neConstant { cha
fae0: 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20  nnel name } {..
faf0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan fb00: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs fb10: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d \.. "-- fb20: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 -- checking for fb30: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi fb40: 74 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 te define consta fb50: 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a nt \""$name \..
fb60: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e            "\"...
fb70: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20   "]....      if
fb80: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
fb90: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
fba0: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
fbb0: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
fbc0: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
fbd0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66  Lite.SQLite3 Def
fbe0: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  ineConstants..
fbf0: 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73      } defineCons
fc00: 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65  tants] == 0} the
fc10: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
fc20: 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74  {[lsearch -exact
fc30: 20 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65   -nocase $define fc40: 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d Constants$name]
fc50: 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a   != -1} then {..
fc60: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
fc70: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59         # NOTE: Y
fc80: 65 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20  es, this define
fc90: 63 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61  constant was ena
fca0: 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61  bled when the ma
fcb0: 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20  naged..
fcc0: 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c   #       assembl
fcd0: 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d  y was compiled..
fce0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
fcf0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
fd00: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
fd10: 73 20 5b 67 65 74 53 51 4c 69 74 65 44 65 66 69  s [getSQLiteDefi
fd20: 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 69 78  neConstantPrefix
fd30: 5d 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20  ] $name].... fd40: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
fd50: 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20  nnel yes\n..
fd60: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
fd70: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c fd80: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 hannel no\n.. fd90: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } fda0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. fdb0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 tputs$channel e
fdc0: 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d  rror\n..      }.
fdd0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
fde0: 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d 65 46  roc getDateTimeF
fdf0: 6f 72 6d 61 74 20 7b 20 7b 74 69 6d 65 5a 6f 6e  ormat { {timeZon
fe00: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  e true} } {..
fe10: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
fe20: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
fe30: 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e  re simply return
fe40: 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 22 20  s the "default"
fe50: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20  DateTime format
fe60: 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  used..      #
fe70: 20 20 20 20 62 79 20 74 68 65 20 74 65 73 74 20      by the test
fe80: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d  suite...      #.
fe90: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
fea0: 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 74 69   exists ::dateti
feb0: 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 5c 0d  me_format] && \.
fec0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
fed0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74  ng length $::dat fee0: 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 etime_format] > fef0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. ff00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # ff10: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 NOTE: Return the ff20: 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 manually overri ff30: 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 dden value for t ff40: 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d he DateTime form ff50: 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a at... #.. ff60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
ff70: 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61  ::datetime_forma
ff80: 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  t..      } else
ff90: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
ffa0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
ffb0: 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 31 20  turn an ISO8601
ffc0: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20  DateTime format
ffd0: 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  compatible with
ffe0: 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 20 20  SQLite,..
fff0: 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e   #       System.
10000 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 6e 64  Data.SQLite, and
10010 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 72 6f   suitable for ro
10020 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 69 74  und-tripping wit
10030 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  h the..        #
10040 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 20         DateTime
10050 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 72 61  class of the fra
10060 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 69 73  mework.  If this
10070 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e 67 65   value is change
10080 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  d,..        #
10090 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 73 74      various test
100a0 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 20 20  s may fail...
100b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
100c0 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72  return [appendAr
100d0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
100e0 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48    "yyyy-MM-dd HH
100f0 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 22 20  :mm:ss.FFFFFFF"
10100 5b 65 78 70 72 20 7b 24 74 69 6d 65 5a 6f 6e 65  [expr {$timeZone 10110 20 3f 20 22 4b 22 20 3a 20 22 22 7d 5d 5d 0d 0a ? "K" : ""}]].. 10120 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 10130 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 ... proc getD 10140 61 74 65 54 69 6d 65 54 69 63 6b 73 20 7b 20 76 ateTimeTicks { v 10150 61 6c 75 65 20 7b 6c 6f 63 61 6c 20 22 22 7d 20 alue {local ""} 10160 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 7d 20 7b {default ""} } { 10170 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 10180 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 ing length$valu
10190 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  e] == 0} then {.
101a0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
101b0 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20  $default.. 101c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 101d0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 101e0 20 73 65 74 20 64 61 74 65 54 69 6d 65 20 5b 6f set dateTime [o 101f0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 bject invoke -cr 10200 65 61 74 65 20 44 61 74 65 54 69 6d 65 20 50 61 eate DateTime Pa 10210 72 73 65 45 78 61 63 74 20 5c 0d 0a 20 20 20 20 rseExact \.. 10220 20 20 20 20 20 20 20 20 24 76 61 6c 75 65 20 5b$value [
10230 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  getDateTimeForma
10240 74 5d 20 6e 75 6c 6c 20 41 64 6a 75 73 74 54 6f  t] null AdjustTo
10250 55 6e 69 76 65 72 73 61 6c 5d 0d 0a 20 20 20 20  Universal]..
10260 20 20 7d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20    }]} then {..
10270 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 65        return $de 10280 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a fault.. }.. 10290 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 102a0 69 6e 67 20 69 73 20 62 6f 6f 6c 65 61 6e 20 2d ing is boolean - 102b0 73 74 72 69 63 74 20 24 6c 6f 63 61 6c 5d 7d 20 strict$local]}
102c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
102d0 73 65 74 20 64 61 74 65 54 69 6d 65 20 5b 6f 62  set dateTime [ob
102e0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65  ject invoke -cre
102f0 61 74 65 20 44 61 74 65 54 69 6d 65 20 53 70 65  ate DateTime Spe
10300 63 69 66 79 4b 69 6e 64 20 5c 0d 0a 20 20 20 20  cifyKind \..
10310 20 20 20 20 20 20 20 20 24 64 61 74 65 54 69 6d          $dateTim 10320 65 20 55 74 63 5d 0d 0a 20 20 20 20 20 20 7d 20 e Utc].. } 10330 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 10340 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 return [object i 10350 6e 76 6f 6b 65 20 24 64 61 74 65 54 69 6d 65 20 nvoke$dateTime
10360 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20 20 7d 0d  Ticks]..      }.
10370 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6c 6f  ...      if {$lo 10380 63 61 6c 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 cal} then {.. 10390 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6f 62 6a return [obj 103a0 65 63 74 20 69 6e 76 6f 6b 65 20 24 64 61 74 65 ect invoke$date
103b0 54 69 6d 65 20 54 6f 4c 6f 63 61 6c 54 69 6d 65  Time ToLocalTime
103c0 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20 20 7d  .Ticks]..      }
103d0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
103e0 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20   return [object
103f0 69 6e 76 6f 6b 65 20 24 64 61 74 65 54 69 6d 65  invoke $dateTime 10400 20 54 6f 55 6e 69 76 65 72 73 61 6c 54 69 6d 65 ToUniversalTime 10410 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20 20 7d .Ticks].. } 10420 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 10430 70 72 6f 63 20 67 65 74 50 72 6f 70 65 72 74 69 proc getProperti 10440 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 61 72 4e es { object varN 10450 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 ame } {.. u 10460 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
10470 70 72 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 20  properties....
10480 20 20 20 20 73 65 74 20 63 6f 75 6e 74 20 30 0d      set count 0.
10490 0a 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 73  .      set names
104a0 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20   [list]....
104b0 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48 61   if {[isObjectHa
104c0 6e 64 6c 65 20 24 6f 62 6a 65 63 74 5d 20 26 26  ndle $object] && 104d0 20 24 6f 62 6a 65 63 74 20 6e 65 20 22 6e 75 6c$object ne "nul
104e0 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  l"} then {..
104f0 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64      eval lappend
10500 20 6e 61 6d 65 73 20 5b 6f 62 6a 65 63 74 20 6d   names [object m
10510 65 6d 62 65 72 73 20 5c 0d 0a 20 20 20 20 20 20  embers \..
10520 20 20 20 20 20 20 2d 6d 65 6d 62 65 72 74 79 70        -membertyp
10530 65 73 20 50 72 6f 70 65 72 74 79 20 2d 6e 61 6d  es Property -nam
10540 65 6f 6e 6c 79 20 24 6f 62 6a 65 63 74 5d 0d 0a  eonly $object].. 10550 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c .. eval l 10560 61 70 70 65 6e 64 20 6e 61 6d 65 73 20 5b 6f 62 append names [ob 10570 6a 65 63 74 20 6d 65 6d 62 65 72 73 20 5c 0d 0a ject members \.. 10580 20 20 20 20 20 20 20 20 20 20 20 20 2d 6d 65 6d -mem 10590 62 65 72 74 79 70 65 73 20 46 69 65 6c 64 20 2d bertypes Field - 105a0 6e 61 6d 65 6f 6e 6c 79 20 24 6f 62 6a 65 63 74 nameonly$object
105b0 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
105c0 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65      foreach name
105d0 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20   $names {.. 105e0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 105f0 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 10600 74 20 69 6e 76 6f 6b 65 20 2d 6f 62 6a 65 63 74 t invoke -object 10610 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 flags +NoDispose 10620 20 24 6f 62 6a 65 63 74 20 24 6e 61 6d 65 0d 0a$object $name.. 10630 20 20 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d } value] 10640 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 10650 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 if {[is 10660 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 ObjectHandle$va
10670 6c 75 65 5d 20 26 26 20 24 76 61 6c 75 65 20 6e  lue] && $value n 10680 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b e "null"} then { 10690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 106a0 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20 6f 62 t error null; ob 106b0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 106c0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 106d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 106e0 20 2d 6d 61 72 73 68 61 6c 66 6c 61 67 73 20 2b -marshalflags + 106f0 4e 6f 48 61 6e 64 6c 65 20 49 6e 74 65 72 70 72 NoHandle Interpr 10700 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 5c eter.GetActive \ 10710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10720 20 20 41 64 64 4f 62 6a 65 63 74 52 65 66 65 72 AddObjectRefer 10730 65 6e 63 65 20 4f 6b 20 24 76 61 6c 75 65 20 65 ence Ok$value e
10740 72 72 6f 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rror....
10750 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72 6f 70      lappend prop
10760 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 20  erties(objects)
10770 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 76 61 6c  [list $name$val
10780 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ue]..          }
10790 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
107a0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72 6f       lappend pro
107b0 70 65 72 74 69 65 73 28 76 61 6c 75 65 73 29 20  perties(values)
107c0 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 76 61 6c  [list $name$val
107d0 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ue]..          }
107e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e  ....          in
107f0 63 72 20 63 6f 75 6e 74 0d 0a 20 20 20 20 20 20  cr count..
10800 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
10810 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72        lappend pr
10820 6f 70 65 72 74 69 65 73 28 65 72 72 6f 72 73 29  operties(errors)
10830 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 3a 3a   [list $name$::
10840 65 72 72 6f 72 43 6f 64 65 5d 0d 0a 20 20 20 20  errorCode]..
10850 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
10860 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $10870 63 6f 75 6e 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d count.. }.... 10880 0a 20 20 20 20 70 72 6f 63 20 67 65 74 41 6c 6c . proc getAll 10890 50 72 6f 70 65 72 74 69 65 73 20 7b 20 6f 62 6a Properties { obj 108a0 65 63 74 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d ect varName } {. 108b0 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
108c0 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 72 74 69  varName properti
108d0 65 73 0d 0a 20 20 20 20 20 20 73 65 74 20 76 61  es..      set va
108e0 6c 75 65 20 24 6f 62 6a 65 63 74 0d 0a 0d 0a 20  lue $object.... 108f0 20 20 20 20 20 77 68 69 6c 65 20 7b 74 72 75 65 while {true 10900 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 } {.. if 10910 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 70 {![info exists p 10920 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 roperties(seenOb 10930 6a 65 63 74 73 29 5d 20 7c 7c 20 5c 0d 0a 20 20 jects)] || \.. 10940 20 20 20 20 20 20 20 20 20 20 24 76 61 6c 75 65$value
10950 20 6e 69 20 24 70 72 6f 70 65 72 74 69 65 73 28   ni $properties( 10960 73 65 65 6e 4f 62 6a 65 63 74 73 29 7d 20 74 68 seenObjects)} th 10970 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 10980 67 65 74 50 72 6f 70 65 72 74 69 65 73 20 24 76 getProperties$v
10990 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65 73 0d  alue properties.
109a0 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65  .          lappe
109b0 6e 64 20 70 72 6f 70 65 72 74 69 65 73 28 73 65  nd properties(se
109c0 65 6e 4f 62 6a 65 63 74 73 29 20 24 76 61 6c 75  enObjects) $valu 109d0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 109e0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 109f0 66 6f 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 fo exists proper 10a00 74 69 65 73 28 6f 62 6a 65 63 74 73 29 5d 7d 20 ties(objects)]} 10a10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 10a20 20 20 62 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 break.. 10a30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 10a40 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 72 6f 70 {[llength$prop
10a50 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 5d  erties(objects)]
10a60 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
10a70 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 70           unset p
10a80 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74  roperties(object
10a90 73 29 3b 20 62 72 65 61 6b 0d 0a 20 20 20 20 20  s); break..
10aa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
10ab0 73 65 74 20 76 61 6c 75 65 20 5b 6c 69 6e 64 65  set value [linde
10ac0 78 20 5b 6c 69 6e 64 65 78 20 24 70 72 6f 70 65  x [lindex $prope 10ad0 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 20 30 rties(objects) 0 10ae0 5d 20 65 6e 64 5d 0d 0a 20 20 20 20 20 20 20 20 ] end].. 10af0 73 65 74 20 70 72 6f 70 65 72 74 69 65 73 28 6f set properties(o 10b00 62 6a 65 63 74 73 29 20 5b 6c 72 61 6e 67 65 20 bjects) [lrange 10b10 24 70 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65$properties(obje
10b20 63 74 73 29 20 31 20 65 6e 64 5d 0d 0a 20 20 20  cts) 1 end]..
10b30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
10b40 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 70   {[info exists p
10b50 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62  roperties(seenOb
10b60 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  jects)]} then {.
10b70 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
10b80 20 76 61 6c 75 65 20 24 70 72 6f 70 65 72 74 69   value $properti 10b90 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 20 es(seenObjects) 10ba0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 10bb0 7b 24 76 61 6c 75 65 20 65 71 20 24 6f 62 6a 65 {$value eq $obje 10bc0 63 74 7d 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 ct} continue.. 10bd0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 6f catch {o 10be0 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 24 76 bject dispose$v
10bf0 61 6c 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 7d  alue}..        }
10c00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65  ....        unse
10c10 74 20 70 72 6f 70 65 72 74 69 65 73 28 73 65 65  t properties(see
10c20 6e 4f 62 6a 65 63 74 73 29 0d 0a 20 20 20 20 20  nObjects)..
10c30 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
10c40 20 20 70 72 6f 63 20 67 65 74 56 61 72 69 61 62    proc getVariab
10c50 6c 65 73 20 7b 20 76 61 72 4e 61 6d 65 73 20 7b  les { varNames {
10c60 6f 62 6a 65 63 74 73 20 66 61 6c 73 65 7d 20 7d  objects false} }
10c70 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65   {..      set re
10c80 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list]....
10c90 20 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 72       foreach var
10ca0 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 73 20 7b  Name $varNames { 10cb0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 75 .. if {[u 10cc0 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 61 plevel 1 [list a 10cd0 72 72 61 79 20 65 78 69 73 74 73 20 24 76 61 72 rray exists$var
10ce0 4e 61 6d 65 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Name]]} then {..
10cf0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 61 72            set ar
10d00 72 61 79 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65  rayName $varName 10d10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f .... fo 10d20 72 65 61 63 68 20 65 6c 65 6d 65 6e 74 4e 61 6d reach elementNam 10d30 65 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 e [uplevel 1 [li 10d40 73 74 20 61 72 72 61 79 20 6e 61 6d 65 73 20 24 st array names$
10d50 61 72 72 61 79 4e 61 6d 65 5d 5d 20 7b 0d 0a 20  arrayName]] {..
10d60 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e             set n
10d70 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ame [appendArgs
10d80 24 61 72 72 61 79 4e 61 6d 65 20 28 20 24 65 6c  $arrayName ($el
10d90 65 6d 65 6e 74 4e 61 6d 65 20 29 5d 0d 0a 20 20  ementName )]..
10da0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61            set va
10db0 72 56 61 6c 75 65 20 5b 75 70 6c 65 76 65 6c 20  rValue [uplevel
10dc0 31 20 5b 6c 69 73 74 20 73 65 74 20 24 6e 61 6d  1 [list set $nam 10dd0 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e]].... 10de0 20 20 20 69 66 20 7b 24 6f 62 6a 65 63 74 73 20 if {$objects
10df0 26 26 20 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64  && [isObjectHand
10e00 6c 65 20 24 76 61 72 56 61 6c 75 65 5d 7d 20 74  le $varValue]} t 10e10 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 10e20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f unset -noco 10e30 6d 70 6c 61 69 6e 20 70 72 6f 70 65 72 74 69 65 mplain propertie 10e40 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s.. 10e50 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 74 69 65 getAllPropertie 10e60 73 20 24 76 61 72 56 61 6c 75 65 20 70 72 6f 70 s$varValue prop
10e70 65 72 74 69 65 73 0d 0a 0d 0a 20 20 20 20 20 20  erties....
10e80 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
10e90 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e 61  result [list $na 10ea0 6d 65 20 5b 61 72 72 61 79 20 67 65 74 20 70 72 me [array get pr 10eb0 6f 70 65 72 74 69 65 73 5d 5d 0d 0a 20 20 20 20 operties]].. 10ec0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 10ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10ee0 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b lappend result [ 10ef0 6c 69 73 74 20 24 6e 61 6d 65 20 24 76 61 72 56 list$name $varV 10f00 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 alue].. 10f10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 10f20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 10f30 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 e {.. s 10f40 65 74 20 76 61 72 56 61 6c 75 65 20 5b 75 70 6c et varValue [upl 10f50 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 65 74 evel 1 [list set 10f60 20 24 76 61 72 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20$varName]]....
10f70 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 6f 62           if {$ob 10f80 6a 65 63 74 73 20 26 26 20 5b 69 73 4f 62 6a 65 jects && [isObje 10f90 63 74 48 61 6e 64 6c 65 20 24 76 61 72 56 61 6c ctHandle$varVal
10fa0 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ue]} then {..
10fb0 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d           unset -
10fc0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 72 6f 70 65  nocomplain prope
10fd0 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  rties..
10fe0 20 20 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 74     getAllPropert
10ff0 69 65 73 20 24 76 61 72 56 61 6c 75 65 20 70 72  ies $varValue pr 11000 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 20 20 20 operties.... 11010 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 11020 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 76 61 result [list$va
11030 72 4e 61 6d 65 20 5b 61 72 72 61 79 20 67 65 74  rName [array get
11040 20 70 72 6f 70 65 72 74 69 65 73 5d 5d 0d 0a 20   properties]]..
11050 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
11060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  {..            l
11070 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c  append result [l
11080 69 73 74 20 24 76 61 72 4e 61 6d 65 20 24 76 61  ist $varName$va
11090 72 56 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20  rValue]..
110a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
110b0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
110c0 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 110d0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 110e0 70 72 6f 63 20 65 6e 75 6d 65 72 61 62 6c 65 54 proc enumerableT 110f0 6f 4c 69 73 74 20 7b 20 65 6e 75 6d 65 72 61 62 oList { enumerab 11100 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 le } {.. se 11110 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d t result [list]. 11120 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st 11130 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 6e 75 ring length$enu
11140 6d 65 72 61 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c  merable] == 0 ||
11150 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 65 71 20   $enumerable eq 11160 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a "null"} then {.. 11170 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
11180 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d  result..      }.
11190 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20  ...      object
111a0 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69  foreach -alias i
111b0 74 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c 65 20  tem $enumerable 111c0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 111d0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 69 string length$i
111e0 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  tem] > 0} then {
111f0 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70  ..          lapp
11200 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 69 74 65  end result [$ite 11210 6d 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20 m ToString].. 11220 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 11230 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 11240 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a$result..    }..
11250 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63  ...    proc catc
11260 68 41 6e 64 52 65 74 75 72 6e 20 7b 20 73 63 72  hAndReturn { scr
11270 69 70 74 20 7b 73 74 61 63 6b 54 72 61 63 65 20  ipt {stackTrace
11280 66 61 6c 73 65 7d 20 7b 73 74 72 69 63 74 20 74  false} {strict t
11290 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
112a0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
112b0 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 73 63   Evaluate the sc
112c0 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79  ript provided by
112d0 20 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 74   our caller in t
112e0 68 65 69 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20  heir context,..
112f0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 70       #       cap
11300 74 75 72 69 6e 67 20 62 6f 74 68 20 74 68 65 20  turing both the
11310 72 65 73 75 6c 74 20 61 6e 64 20 74 68 65 20 72  result and the r
11320 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...
11330 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
11340 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 75 70 6c  code [catch {upl
11350 65 76 65 6c 20 31 20 24 73 63 72 69 70 74 7d 20  evel 1 $script} 11360 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 result].... 11370 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 11380 3a 20 44 69 64 20 74 68 65 20 73 63 72 69 70 74 : Did the script 11390 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 provided by our 113a0 20 63 61 6c 6c 65 72 20 4e 4f 54 20 72 61 69 73 caller NOT rais 113b0 65 20 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 20 e an error?.. 113c0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 113d0 24 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 65$strict && $code 113e0 20 3d 3d 20 30 20 7c 7c 20 21 24 73 74 72 69 63 == 0 || !$stric
113f0 74 20 26 26 20 24 63 6f 64 65 20 21 3d 20 31 7d  t && $code != 1} 11400 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11410 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11420 54 45 3a 20 53 75 63 63 65 73 73 2e 20 20 52 65 TE: Success. Re 11430 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 turn a list with 11440 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 the return code 11450 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 2e and the result. 11460 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 11470 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 11480 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d t$code $result] 11490 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif 114a0 20 7b 24 73 74 61 63 6b 54 72 61 63 65 7d 20 74 {$stackTrace} t
114b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
114c0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
114d0 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20  : Failure.  Our
114e0 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 61 20 66  caller wants a f
114f0 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20  ull stack trace
11500 28 69 66 20 61 70 70 6c 69 63 61 62 6c 65 29 2c  (if applicable),
11510 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
11520 20 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20    return a list
11530 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20  with the return
11540 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73  code and the res
11550 75 6c 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20  ult verbatim...
11560 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
11570 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24    return [list $11580 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 code$result]..
11590 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
115a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
115b0 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72    # NOTE: Failur
115c0 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 64  e.  Our caller d
115d0 6f 65 73 20 6e 6f 74 20 77 61 6e 74 20 61 20 66  oes not want a f
115e0 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20  ull stack trace
115f0 28 69 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20  (if..        #
11600 20 20 20 20 20 61 70 70 6c 69 63 61 62 6c 65 29       applicable)
11610 2c 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20  , return a list
11620 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20  with the return
11630 63 6f 64 65 2c 20 74 68 65 20 65 72 72 6f 72 0d  code, the error.
11640 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
11650 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 69 6e   code for the in
11660 74 65 72 70 72 65 74 65 72 2c 20 61 6e 64 20 74  terpreter, and t
11670 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
11680 20 75 70 20 74 6f 20 74 68 65 0d 0a 20 20 20 20   up to the..
11690 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 69 6e      #       poin
116a0 74 20 77 68 65 72 65 20 74 68 65 20 73 74 61 63  t where the stac
116b0 6b 20 74 72 61 63 65 20 73 68 6f 75 6c 64 20 73  k trace should s
116c0 74 61 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  tart...        #
116d0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
116e0 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 3a 3a   [list $code$::
116f0 65 72 72 6f 72 43 6f 64 65 20 5c 0d 0a 20 20 20  errorCode \..
11700 20 20 20 20 20 20 20 20 20 5b 65 78 74 72 61 63           [extrac
11710 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  tSystemDataSQLit
11720 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67  eExceptionMessag
11730 65 20 24 72 65 73 75 6c 74 5d 5d 0d 0a 20 20 20  e $result]].. 11740 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 11750 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c 65 proc compile 11760 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a 20 20 CSharpWith {.. 11770 20 20 20 20 20 20 20 20 20 20 74 65 78 74 20 6d text m 11780 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 73 74 emory symbols st 11790 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 72 4e rict resultsVarN 117a0 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e 61 6d ame errorsVarNam 117b0 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 20 e fileNames.. 117c0 20 20 20 20 20 20 20 20 20 61 72 67 73 20 7d 20 args } 117d0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 117e0 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 # NOTE: Since 117f0 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 we are going to 11800 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20 use this method 11810 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73 73 69 name a lot, assi 11820 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 20 20 20 gn it to a.. 11830 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab 11840 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 20 20 20 le first... 11850 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 61 64 #.. set ad 11860 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 73 65 d ReferencedAsse 11870 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20 mblies.Add.... 11880 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 11890 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68 65 20 OTE: Create the 118a0 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 base command to 118b0 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61 64 64 evaluate and add 118c0 20 74 68 65 20 70 72 6f 70 65 72 74 79 20 73 65 the property se 118d0 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 20 23 20 ttings.. # 118e0 20 20 20 20 20 20 74 68 61 74 20 61 72 65 20 61 that are a 118f0 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e 65 65 lmost always nee 11900 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69 74 20 ded by our unit 11910 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68 65 20 tests (i.e. the 11920 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 20 23 20 System.. # 11930 20 20 20 20 20 20 61 6e 64 20 53 79 73 74 65 6d and System 11940 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79 20 72 .Data assembly r 11950 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20 eferences)... 11960 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 11970 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 5c 0d command [list \. 11980 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6d 70 69 . compi 11990 6c 65 43 53 68 61 72 70 20 24 74 65 78 74 20 24 leCSharp$text $119a0 6d 65 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 memory$symbols
119b0 24 73 74 72 69 63 74 20 72 65 73 75 6c 74 73 20  $strict results 119c0 65 72 72 6f 72 73 20 5c 0d 0a 20 20 20 20 20 20 errors \.. 119d0 20 20 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e$add System.
119e0 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e  dll $add System. 119f0 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 Data.dll$add Sy
11a00 73 74 65 6d 2e 54 72 61 6e 73 61 63 74 69 6f 6e  stem.Transaction
11a10 73 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20  s.dll \..
11a20 20 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e 58     $add System.X 11a30 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 ml.dll].... 11a40 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 11a50 3a 20 41 64 64 20 61 6c 6c 20 74 68 65 20 70 72 : Add all the pr 11a60 6f 76 69 64 65 64 20 66 69 6c 65 20 6e 61 6d 65 ovided file name 11a70 73 20 61 73 20 61 73 73 65 6d 62 6c 79 20 72 65 s as assembly re 11a80 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20 ferences... 11a90 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 #.. foreac 11aa0 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 h fileName$file
11ab0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
11ac0 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64   lappend command
11ad0 20 24 61 64 64 20 5b 67 65 74 42 69 6e 61 72 79   $add [getBinary 11ae0 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 FileName$fileNa
11af0 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  me]..      }....
11b00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
11b10 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 65   NOTE: Add the e
11b20 78 74 72 61 20 61 72 67 75 6d 65 6e 74 73 2c 20  xtra arguments,
11b30 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 63  if any, to the c
11b40 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61  ommand to evalua
11b50 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  te...      #..
11b60 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64      eval lappend
11b70 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a   command $args.. 11b80 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 11b90 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74 # NOTE: Alias t 11ba0 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 he compiler loca 11bb0 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 20 65 72 l results and er 11bc0 72 6f 72 73 20 76 61 72 69 61 62 6c 65 73 20 74 rors variables t 11bd0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 o the.. # 11be0 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 variable na 11bf0 6d 65 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 mes provided by 11c00 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 our caller... 11c10 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 11c20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
11c30 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 5d 20  resultsVarName]
11c40 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
11c50 20 20 20 20 20 75 70 76 61 72 20 31 20 24 72 65       upvar 1 $re 11c60 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 73 sultsVarName res 11c70 75 6c 74 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d ults.. }... 11c80 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 11c90 6e 67 20 6c 65 6e 67 74 68 20 24 65 72 72 6f 72 ng length$error
11ca0 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  sVarName] > 0} t
11cb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75  hen {..        u
11cc0 70 76 61 72 20 31 20 24 65 72 72 6f 72 73 56 61  pvar 1 $errorsVa 11cd0 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a 20 20 rName errors.. 11ce0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 11cf0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 11d00 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e Evaluate the con 11d10 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c structed [compil 11d20 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 eCSharp] command 11d30 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d and return the. 11d40 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 . # r 11d50 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d esult... #. 11d60 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d . eval$com
11d70 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  mand..    }.....
11d80 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72      proc isMemor
11d90 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d  yDb { fileName }
11da0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
11db0 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68     # NOTE: Is th
11dc0 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  e specified data
11dd0 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72  base file name r
11de0 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f  eally an in-memo
11df0 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20  ry database?..
11e00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
11e10 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65  urn [expr {$file 11e20 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 Name eq ":memory 11e30 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 :" || \.. 11e40 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 [string range 11e50 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d$fileName 0 12]
11e60 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72   eq "file::memor
11e70 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  y:"}]..    }....
11e80 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61 62 6c  .    proc isTabl
11e90 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61  eInDb { name {va
11ea0 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20  rName db} } {..
11eb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
11ec0 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
11ed0 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
11ee0 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22  iable (e.g. "db"
11ef0 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  ) in the context
11f00 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23   of our..      #
11f10 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20         caller.
11f20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  It contains the
11f30 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
11f40 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20  ion handle that
11f50 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23  will be..      #
11f60 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 65         used to e
11f70 78 65 63 75 74 65 20 74 68 65 20 71 75 65 72 79  xecute the query
11f80 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
11f90 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20  ne if the named
11fa0 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20  table is..
11fb0 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20  #       present
11fc0 69 6e 20 74 68 61 74 20 64 61 74 61 62 61 73 65  in that database
11fd0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
11fe0 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 11ff0 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # 12000 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 12010 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 5f 6d Use the sqlite_m 12020 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f 20 64 aster table to d 12030 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 etermine if the 12040 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a named table is.. 12050 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 # pr 12060 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 esent in the dat 12070 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d abase... #. 12080 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 7b . set sql { 12090 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 .. SELECT 120a0 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 73 COUNT(*) FROM s 120b0 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 qlite_master WHE 120c0 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65 RE type = 'table 120d0 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d ' AND name = ?;. 120e0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 120f0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12100 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 E: Return non-ze 12110 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 ro if the named 12120 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 6e 74 table is present 12130 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 12140 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { 12150 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65 .. [sql e 12160 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 xecute -execute 12170 73 63 61 6c 61 72 20 24 64 62 20 24 73 71 6c 20 scalar$db $sql 12180 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 74 72 [list param1 Str 12190 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d ing$name]] > 0.
121a0 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d  .      }]..    }
121b0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
121c0 74 44 62 44 65 66 61 75 6c 74 50 61 67 65 53 69  tDbDefaultPageSi
121d0 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 74  ze {} {..      t
121e0 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  ry {..        se
121f0 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d  t db [sql open -
12200 74 79 70 65 20 53 51 4c 69 74 65 20 7b 44 61 74  type SQLite {Dat
12210 61 20 53 6f 75 72 63 65 3d 3a 6d 65 6d 6f 72 79  a Source=:memory
12220 3a 3b 7d 5d 0d 0a 20 20 20 20 20 20 20 20 72 65  :;}]..        re
12230 74 75 72 6e 20 5b 73 71 6c 20 65 78 65 63 75 74  turn [sql execut
12240 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
12250 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 70 61  r $db "PRAGMA pa 12260 67 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 20 20 ge_size;"].. 12270 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 } finally {.. 12280 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 12290 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68 65 exists db]} the 122a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 122b0 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 atch {sql close 122c0 24 64 62 7d 0d 0a 20 20 20 20 20 20 20 20 20 20$db}..
122d0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
122e0 6e 20 64 62 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n db..        }.
122f0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
12300 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
12310 44 62 44 65 66 61 75 6c 74 43 61 63 68 65 53 69  DbDefaultCacheSi
12320 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 74  ze {} {..      t
12330 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  ry {..        se
12340 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d  t db [sql open -
12350 74 79 70 65 20 53 51 4c 69 74 65 20 7b 44 61 74  type SQLite {Dat
12360 61 20 53 6f 75 72 63 65 3d 3a 6d 65 6d 6f 72 79  a Source=:memory
12370 3a 3b 7d 5d 0d 0a 20 20 20 20 20 20 20 20 72 65  :;}]..        re
12380 74 75 72 6e 20 5b 73 71 6c 20 65 78 65 63 75 74  turn [sql execut
12390 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61  e -execute scala
123a0 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 63 61  r $db "PRAGMA ca 123b0 63 68 65 5f 73 69 7a 65 3b 22 5d 0d 0a 20 20 20 che_size;"].. 123c0 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a } finally {.. 123d0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 if {[inf 123e0 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68 o exists db]} th 123f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 12400 63 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 catch {sql close 12410 20 24 64 62 7d 0d 0a 20 20 20 20 20 20 20 20 20$db}..
12420 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
12430 69 6e 20 64 62 0d 0a 20 20 20 20 20 20 20 20 7d  in db..        }
12440 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
12450 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 75 73  .....    proc us
12460 65 4c 65 67 61 63 79 44 62 50 61 67 65 41 6e 64  eLegacyDbPageAnd
12470 43 61 63 68 65 53 69 7a 65 73 20 7b 20 76 61 72  CacheSizes { var
12480 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  Name } {..
12490 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
124a0 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70   Refer to the sp
124b0 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65  ecified variable
124c0 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20   (e.g. "db") in
124d0 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f  the context of o
124e0 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ur..      #
124f0 20 20 63 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f    caller.  It co
12500 6e 74 61 69 6e 73 20 74 68 65 20 64 61 74 61 62  ntains the datab
12510 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ase connection h
12520 61 6e 64 6c 65 20 74 68 61 74 20 77 69 6c 6c 20  andle that will
12530 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  be..      #
12540 20 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 74    used to execut
12550 65 20 71 75 65 72 69 65 73 20 75 73 65 64 20 74  e queries used t
12560 6f 20 73 65 74 20 74 68 65 20 70 61 67 65 20 61  o set the page a
12570 6e 64 20 63 61 63 68 65 20 73 69 7a 65 73 2e 0d  nd cache sizes..
12580 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
12590 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 125a0 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 73 71 6c db.... sql 125b0 20 65 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a execute$db {..
125c0 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 70          PRAGMA p
125d0 61 67 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b  age_size = 1024;
125e0 0d 0a 20 20 20 20 20 20 20 20 50 52 41 47 4d 41  ..        PRAGMA
125f0 20 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 32 30   cache_size = 20
12600 30 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  00;..      }....
12610 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
12620 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
12630 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
12640 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db 12650 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 "PRAGMA page_si 12660 7a 65 3b 22 5d 20 5c 0d 0a 20 20 20 20 20 20 20 ze;"] \.. 12670 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 [sql execute 12680 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 -execute scalar 12690 24 64 62 20 22 50 52 41 47 4d 41 20 63 61 63 68$db "PRAGMA cach
126a0 65 5f 73 69 7a 65 3b 22 5d 5d 0d 0a 20 20 20 20  e_size;"]]..
126b0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65  }.....    proc e
126c0 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61  xtractSystemData
126d0 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d  SQLiteExceptionM
126e0 65 73 73 61 67 65 20 7b 20 76 61 6c 75 65 20 7d  essage { value }
126f0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
12700 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68     # NOTE: If th
12710 65 20 73 74 72 69 6e 67 20 63 6f 6e 66 6f 72 6d  e string conform
12720 73 20 74 6f 20 66 6f 72 6d 61 74 20 6f 66 20 74  s to format of t
12730 68 65 20 6e 6f 72 6d 61 6c 20 65 78 63 65 70 74  he normal except
12740 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
12750 20 20 20 65 72 72 6f 72 20 73 74 72 69 6e 67 73     error strings
12760 2c 20 65 78 74 72 61 63 74 20 61 6e 64 20 72 65  , extract and re
12770 74 75 72 6e 20 6f 6e 6c 79 20 74 68 65 20 65 72  turn only the er
12780 72 6f 72 20 6d 65 73 73 61 67 65 0d 0a 20 20 20  ror message..
12790 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69     #       porti
127a0 6f 6e 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20  on itself...
127b0 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 70    #..      set p
127c0 61 74 74 65 72 6e 73 20 5b 6c 69 73 74 20 5c 0d  atterns [list \.
127d0 0a 20 20 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e  .      {System\.
127e0 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51  Data\.SQLite\.SQ
127f0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 5c 28  LiteException $$12800 30 78 38 30 30 30 34 30 30 35 5c 29 3a 20 28 2e 0x80004005$$: (.
12810 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d 20 5c  +?)  (?: )?at} \
12820 0d 0a 20 20 20 20 20 20 7b 53 79 73 74 65 6d 5c  ..      {System\
12830 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53  .Data\.SQLite\.S
12840 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 3a 20  QLiteException:
12850 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d  (.+?)  (?: )?at}
12860 20 5c 0d 0a 20 20 20 20 20 20 7b 45 61 67 6c 65   \..      {Eagle
12870 5c 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 5c 2e 50  \._Components\.P
12880 75 62 6c 69 63 5c 2e 53 63 72 69 70 74 45 78 63  ublic\.ScriptExc
12890 65 70 74 69 6f 6e 3a 20 28 2e 2b 3f 29 20 20 28  eption: (.+?)  (
128a0 3f 3a 20 29 3f 61 74 7d 5d 0d 0a 0d 0a 20 20 20  ?: )?at}]....
128b0 20 20 20 66 6f 72 65 61 63 68 20 70 61 74 74 65     foreach patte
128c0 72 6e 20 24 70 61 74 74 65 72 6e 73 20 7b 0d 0a  rn $patterns {.. 128d0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 if {[reg 128e0 65 78 70 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 exp --$pattern
128f0 24 76 61 6c 75 65 20 64 75 6d 6d 79 20 6d 65 73  $value dummy mes 12900 73 61 67 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 sage]} then {.. 12910 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 73 set mes 12920 73 61 67 65 20 5b 73 74 72 69 6e 67 20 6d 61 70 sage [string map 12930 20 5b 6c 69 73 74 20 5c 72 5c 6e 20 5c 6e 5d 20 [list \r\n \n] 12940 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 6d 65 [string trim$me
12950 73 73 61 67 65 5d 5d 0d 0a 20 20 20 20 20 20 20  ssage]]..
12960 20 20 20 73 65 74 20 6c 69 6e 65 73 20 5b 73 70     set lines [sp
12970 6c 69 74 20 24 6d 65 73 73 61 67 65 20 5c 6e 5d  lit $message \n] 12980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 12990 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65 {[llength$line
129a0 73 5d 20 3d 3d 20 32 7d 20 74 68 65 6e 20 7b 0d  s] == 2} then {.
129b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
129c0 7b 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20  {[lindex $lines 129d0 30 5d 20 65 71 20 5b 6c 69 6e 64 65 78 20 24 6c 0] eq [lindex$l
129e0 69 6e 65 73 20 31 5d 7d 20 74 68 65 6e 20 7b 0d  ines 1]} then {.
129f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
12a00 65 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20 24 6c  eturn [lindex $l 12a10 69 6e 65 73 20 30 5d 0d 0a 20 20 20 20 20 20 20 ines 0].. 12a20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 12a30 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70 return [ap 12a40 70 65 6e 64 41 72 67 73 20 5b 6c 69 6e 64 65 78 pendArgs [lindex 12a50 20 24 6c 69 6e 65 73 20 30 5d 20 22 20 2d 2d 20$lines 0] " --
12a60 22 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73  " [lindex $lines 12a70 20 31 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 1]].. 12a80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 }.... r 12a90 65 74 75 72 6e 20 24 6d 65 73 73 61 67 65 0d 0a eturn$message..
12aa0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
12ab0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
12ac0 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 7d  rn $value.. } 12ad0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 ..... proc tr 12ae0 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d imSql { sql } {. 12af0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72 . return [r 12b00 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c egsub -all -- {\ 12b10 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d s+} [string trim 12b20 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20$sql] " "]..
12b30 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
12b40 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c  executeSql { sql
12b50 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20   {execute none}
12b60 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66  {format none} {f
12b70 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  ileName ""} } {.
12b80 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
12b90 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e  ng length $fileN 12ba0 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ame] == 0} then 12bb0 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d {set fileName :m 12bc0 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73 emory:}.. s 12bd0 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 etupDb$fileName
12be0 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20   "" "" "" "" ""
12bf0 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73  false false fals
12c00 65 20 66 61 6c 73 65 20 64 62 20 74 72 75 65 0d  e false db true.
12c10 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a  ...      try {..
12c20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
12c30 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
12c40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  \..            s
12c50 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
12c60 75 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f  ute $execute -fo 12c70 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62 rmat$format $db 12c80 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d$sql]]..      }
12c90 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20   finally {..
12ca0 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66      cleanupDb $f 12cb0 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 ileName db false 12cc0 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 false false.. 12cd0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 12ce0 0a 20 20 20 20 70 72 6f 63 20 68 61 73 4e 6f 46 . proc hasNoF 12cf0 6c 61 67 73 20 7b 20 76 61 72 4e 61 6d 65 20 6e lags { varName n 12d00 6f 6e 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 one } {.. u 12d10 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
12d20 66 6c 61 67 73 0d 0a 0d 0a 20 20 20 20 20 20 69  flags....      i
12d30 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
12d40 20 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d   flags]} then {.
12d50 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
12d60 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
12d70 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
12d80 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73  ng length $flags 12d90 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 12da0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t 12db0 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rue.. }.... 12dc0 20 20 20 20 20 20 69 66 20 7b 24 6e 6f 6e 65 20 if {$none
12dd0 26 26 20 24 66 6c 61 67 73 20 65 71 20 22 4e 6f  && $flags eq "No 12de0 6e 65 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ne"} then {.. 12df0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 12e00 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 12e10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d return false. 12e20 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 12e30 72 6f 63 20 67 65 74 43 6f 6e 6e 65 63 74 69 6f roc getConnectio 12e40 6e 46 6c 61 67 73 20 7b 20 66 69 6c 65 4e 61 6d nFlags { fileNam 12e50 65 20 66 6c 61 67 73 20 7b 71 75 69 65 74 20 66 e flags {quiet f 12e60 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 12e70 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 12e80 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 : Figure out whi 12e90 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 ch database file 12ea0 20 6e 61 6d 65 20 6f 72 20 63 6f 6e 6e 65 63 74 name or connect 12eb0 69 6f 6e 20 73 74 72 69 6e 67 20 74 68 65 73 65 ion string these 12ec0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 12ed0 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags 12ee0 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 61 will actually a 12ef0 70 70 6c 79 20 74 6f 2e 20 20 54 68 69 73 20 69 pply to. This i 12f00 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 0d s not necessary. 12f10 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 12f20 6e 20 71 75 69 65 74 20 6d 6f 64 65 20 62 65 63 n quiet mode bec 12f30 61 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d ause this inform 12f40 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 ation is only us 12f50 65 64 20 66 6f 72 20 6c 6f 67 67 69 6e 67 0d 0a ed for logging.. 12f60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e # an 12f70 64 20 72 65 70 6f 72 74 69 6e 67 20 70 75 72 70 d reporting purp 12f80 6f 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a oses... #.. 12f90 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
12fa0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
12fb0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
12fc0 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d  ength $fileName] 12fd0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 12fe0 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 set data 12ff0 62 61 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73 base [appendArgs 13000 20 22 66 69 6c 65 20 6e 61 6d 65 20 5c 22 22 20 "file name \"" 13010 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5d 0d 0a 20$fileName \"]..
13020 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20         } elseif
13030 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
13040 64 61 74 61 53 6f 75 72 63 65 5d 20 26 26 20 5c  dataSource] && \
13050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 21 5b  ..            ![
13060 61 72 72 61 79 20 65 78 69 73 74 73 20 3a 3a 64  array exists ::d
13070 61 74 61 53 6f 75 72 63 65 5d 7d 20 74 68 65 6e  ataSource]} then
13080 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
13090 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 65  t database [appe
130a0 6e 64 41 72 67 73 20 22 64 61 74 61 20 73 6f 75  ndArgs "data sou
130b0 72 63 65 20 5c 22 22 20 24 3a 3a 64 61 74 61 53  rce \"" $::dataS 130c0 6f 75 72 63 65 20 5c 22 5d 0d 0a 20 20 20 20 20 ource \"].. 130d0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 130e0 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 62 set datab 130f0 61 73 65 20 3c 75 6e 6b 6e 6f 77 6e 3e 0d 0a 20 ase <unknown>.. 13100 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 13110 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 13120 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 65 6e # NOTE: Even 13130 20 74 68 6f 75 67 68 20 74 68 65 72 65 20 69 73 though there is 13140 20 6f 6e 6c 79 20 6f 6e 65 20 73 6f 75 72 63 65 only one source 13150 20 6f 66 20 66 6c 61 67 73 20 73 6f 20 66 61 72 of flags so far 13160 2c 20 74 68 65 79 0d 0a 20 20 20 20 20 20 23 20 , they.. # 13170 20 20 20 20 20 20 6d 75 73 74 20 62 65 20 63 6f must be co 13180 6d 62 69 6e 65 64 20 75 73 69 6e 67 20 74 68 65 mbined using the 13190 20 63 6f 72 72 65 63 74 20 73 79 6e 74 61 78 20 correct syntax 131a0 66 6f 72 20 65 6e 75 6d 65 72 61 74 65 64 0d 0a for enumerated.. 131b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6c # fl 131c0 61 67 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 ag values for th 131d0 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b e .NET Framework 131e0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 131f0 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d set flags [com 13200 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 67 73 bineFlags$flags
13210 20 22 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d   ""]....      #.
13220 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
13230 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68  how (and log) th
13240 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69  e local connecti
13250 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68 65  on flags and the
13260 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20   associated..
13270 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 20     #       data
13280 73 6f 75 72 63 65 20 6f 72 20 66 69 6c 65 20 6e  source or file n
13290 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ame...      #..
132a0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 132b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 132c0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 132d0 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f 63 sts ::no(emitLoc 132e0 61 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a alFlags)] && \.. 132f0 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 (![i 13300 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 13310 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67 73 49 66 emitLocalFlagsIf 13320 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 None)] || \.. 13330 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e ![hasN 13340 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 6c oFlags flags fal 13350 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 se])} then {.. 13360 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
13370 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
13380 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
13390 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
133a0 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f   local connectio
133b0 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64  n flags for " $d 133c0 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 atabase \.. 133d0 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 " are: 133e0 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f " [expr {![hasNo 133f0 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 Flags flags fals 13400 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 e] ? \.. 13410 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 [appendArg 13420 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 s \"$flags \"]
13430 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d  : "<none>"}] \n]
13440 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
13450 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
13460 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
13470 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68  how (and log) th
13480 65 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74  e shared connect
13490 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20  ion flags...
134a0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
134b0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 134c0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 134d0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 134e0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 object invoke Sy 134f0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 13500 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f .SQLiteConnectio 13510 6e 20 53 68 61 72 65 64 46 6c 61 67 73 0d 0a 20 n SharedFlags.. 13520 20 20 20 20 20 20 20 7d 20 73 68 61 72 65 64 46 } sharedF 13530 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e lags] == 0} then 13540 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 13550 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 13560 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 ::no(emitSharedF 13570 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 lags)] && \.. 13580 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e (![in 13590 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 fo exists ::no(e 135a0 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 49 66 mitSharedFlagsIf 135b0 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 None)] || \.. 135c0 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 ![ha 135d0 73 4e 6f 46 6c 61 67 73 20 73 68 61 72 65 64 46 sNoFlags sharedF 135e0 6c 61 67 73 20 74 72 75 65 5d 29 7d 20 74 68 65 lags true])} the 135f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 13600 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
13610 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
13620 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
13630 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72        "---- shar
13640 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  ed connection fl
13650 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62  ags for " $datab 13660 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ase \.. 13670 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 20 " are: " 13680 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c [expr {![hasNoFl 13690 61 67 73 20 73 68 61 72 65 64 46 6c 61 67 73 20 ags sharedFlags 136a0 74 72 75 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 true] ? \.. 136b0 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 [appe 136c0 6e 64 41 72 67 73 20 5c 22 20 24 73 68 61 72 65 ndArgs \"$share
136d0 64 46 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e  dFlags \"] : "<n
136e0 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20  one>"}] \n]..
136f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
13700 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
13710 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
13720 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69   exists ::no(emi
13730 74 53 68 61 72 65 64 46 6c 61 67 73 29 5d 20 26  tSharedFlags)] &
13740 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
13750 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73     ![info exists
13760 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64   ::no(emitShared
13770 46 6c 61 67 73 49 66 55 6e 61 76 61 69 6c 61 62  FlagsIfUnavailab
13780 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  le)]} then {..
13790 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
137a0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 137b0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 137c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 137d0 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e ---- shared conn 137e0 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 ection flags for 137f0 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a "$database \..
13800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13810 22 20 61 72 65 3a 20 3c 75 6e 61 76 61 69 6c 61  " are: <unavaila
13820 62 6c 65 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  ble>\n"]..
13830 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
13840 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
13850 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
13860 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f  TE: Show (and lo
13870 67 29 20 74 68 65 20 64 65 74 65 63 74 65 64 20  g) the detected
13880 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f  global connectio
13890 6e 20 66 6c 61 67 73 2c 20 69 66 20 61 6e 79 2e  n flags, if any.
138a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
138b0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 138c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 138d0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 138e0 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 61 6c 46 ::no(emitGlobalF 138f0 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 lags)] && \.. 13900 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f (![info 13910 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 exists ::no(emi 13920 74 47 6c 6f 62 61 6c 46 6c 61 67 73 49 66 4e 6f tGlobalFlagsIfNo 13930 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 ne)] || \.. 13940 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 ![hasNoF 13950 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f lags ::connectio 13960 6e 5f 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d n_flags false])} 13970 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 13980 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
13990 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
139a0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
139b0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62        "---- glob
139c0 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  al connection fl
139d0 61 67 73 20 61 72 65 3a 20 22 20 5c 0d 0a 20 20  ags are: " \..
139e0 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70              [exp
139f0 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20  r {![hasNoFlags
13a00 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61  ::connection_fla
13a10 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20  gs false] ? \..
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70               [ap
13a30 70 65 6e 64 41 72 67 73 20 5c 22 20 24 3a 3a 63  pendArgs \" $::c 13a40 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 onnection_flags 13a50 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d \"] : "<none>"}] 13a60 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 13a70 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 13a80 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 13a90 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 20 E: If there are 13aa0 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 20 any global (per 13ab0 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 63 test run) connec 13ac0 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 65 tion flags curre 13ad0 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 ntly.. # 13ae0 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 65 set, use the 13af0 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 63 m now (i.e. by c 13b00 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 69 ombining them wi 13b10 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 20 th the ones for 13b20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 this.. # 13b30 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e connection). 13b40 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 13b50 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 13b60 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 s ::connection_f 13b70 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 lags]} then {.. 13b80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 13b90 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e # NOTE: Combin 13ba0 65 20 61 6e 64 2f 6f 72 20 72 65 70 6c 61 63 65 e and/or replace 13bb0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection 13bc0 66 6c 61 67 73 20 61 6e 64 20 74 68 65 6e 20 73 flags and then s 13bd0 68 6f 77 20 74 68 65 0d 0a 20 20 20 20 20 20 20 how the.. 13be0 20 23 20 20 20 20 20 20 20 6e 65 77 20 76 61 6c # new val 13bf0 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ue... #.. 13c00 20 20 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 set flag 13c10 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 s [combineFlags 13c20 24 66 6c 61 67 73 20 24 3a 3a 63 6f 6e 6e 65 63$flags $::connec 13c30 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 tion_flags].... 13c40 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 13c50 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 # NOTE: Show ( 13c60 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6e 65 77 and log) the new 13c70 20 65 66 66 65 63 74 69 76 65 20 63 6f 6e 6e 65 effective conne 13c80 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 ction flags... 13c90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13ca0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
13cb0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
13cc0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
13cd0 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69  s ::no(emitCombi
13ce0 6e 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d  nedFlags)] && \.
13cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  .              (
13d00 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
13d10 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46  no(emitCombinedF
13d20 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20  lagsIfNone)] ||
13d30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
13d40 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66    ![hasNoFlags f
13d50 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 68  lags false])} th
13d60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
13d70 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 13d80 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 13d90 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 13da0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d "---- com 13db0 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e bined connection 13dc0 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 flags for "$da
13dd0 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20  tabase \..
13de0 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a            " are:
13df0 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e   " [expr {![hasN
13e00 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 61 6c  oFlags flags fal
13e10 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20  se] ? \..
13e20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64           [append
13e30 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c  Args \" $flags \ 13e40 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 "] : "<none>"}] 13e50 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 13e60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 13e70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 13e80 74 75 72 6e 20 24 66 6c 61 67 73 0d 0a 20 20 20 turn$flags..
13e90 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
13ea0 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
13eb0 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d 20 7b 71   { {flags ""} {q
13ec0 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
13ed0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
13ee0 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e  # NOTE: Determin
13ef0 65 20 77 68 61 74 20 74 68 65 20 63 6f 6d 62 69  e what the combi
13f00 6e 65 64 20 28 67 6c 6f 62 61 6c 20 61 6e 64 20  ned (global and
13f10 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 63 74 69 6f  local) connectio
13f20 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
13f30 20 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65   flags should be
13f40 2c 20 70 6f 73 73 69 62 6c 79 20 71 75 69 65 74  , possibly quiet
13f50 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ly...      #..
13f60 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 67      set flags [g
13f70 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  etConnectionFlag
13f80 73 20 22 22 20 24 66 6c 61 67 73 20 24 71 75 69  s "" $flags$qui
13f90 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  et]....      #..
13fa0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
13fb0 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f 72 20 6c 6f   no global or lo
13fc0 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  cal connection f
13fd0 6c 61 67 73 20 77 65 72 65 20 73 70 65 63 69 66  lags were specif
13fe0 69 65 64 2c 20 74 68 65 0d 0a 20 20 20 20 20 20  ied, the..
13ff0 23 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20  #       default
14000 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
14010 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 3b   should be used;
14020 20 74 68 65 72 65 66 6f 72 65 2c 20 72 65 74 75   therefore, retu
14030 72 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  rn..      #
14040 20 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e    an empty strin
14050 67 20 69 6e 20 74 68 61 74 20 63 61 73 65 2e 0d  g in that case..
14060 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
14070 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
14080 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d 20 30 7d  th $flags] == 0} 14090 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 140a0 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 140b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 140c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e # NOTE: In 140d0 20 6f 72 64 65 72 20 74 6f 20 63 68 65 63 6b 20 order to check 140e0 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 if the default c 140f0 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 onnection flags 14100 61 72 65 20 62 65 69 6e 67 20 75 73 65 64 0d 0a are being used.. 14110 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 # it 14120 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f is necessary to 14130 20 61 74 74 65 6d 70 74 20 61 20 63 6f 6e 76 65 attempt a conve 14140 72 73 69 6f 6e 20 74 6f 20 74 68 65 20 61 63 74 rsion to the act 14150 75 61 6c 20 65 6e 75 6d 65 72 61 74 65 64 0d 0a ual enumerated.. 14160 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 79 # ty 14170 70 65 2e 20 20 46 61 69 6c 69 6e 67 20 74 68 61 pe. Failing tha 14180 74 2c 20 74 68 65 20 63 68 65 63 6b 20 61 67 61 t, the check aga 14190 69 6e 73 74 20 74 68 65 20 64 65 66 61 75 6c 74 inst the default 141a0 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 0d 0a value will be.. 141b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b # sk 141c0 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d ipped... #. 141d0 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc 141e0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 h {.. set 141f0 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20 23 20 49 error null; # I 14200 47 4e 4f 52 45 44 0d 0a 0d 0a 20 20 20 20 20 20 GNORED.... 14210 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 14220 55 74 69 6c 69 74 79 20 54 72 79 50 61 72 73 65 Utility TryParse 14230 46 6c 61 67 73 45 6e 75 6d 20 22 22 20 5c 0d 0a FlagsEnum "" \.. 14240 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 14250 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S 14260 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 QLiteConnectionF 14270 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 20 6e lags ""$flags n
14280 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20 20 20 20  ull true \..
14290 20 20 20 20 20 20 20 20 74 72 75 65 20 74 72 75          true tru
142a0 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 7d  e error..      }
142b0 20 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d   value]} then {.
142c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
142d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
142e0 6d 70 74 69 6e 67 20 74 6f 20 70 61 72 73 65 20  mpting to parse
142f0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
14300 6c 61 67 73 20 63 61 75 73 65 64 20 61 20 73 63  lags caused a sc
14310 72 69 70 74 0d 0a 20 20 20 20 20 20 20 20 23 20  ript..        #
14320 20 20 20 20 20 20 65 72 72 6f 72 2e 20 20 45 6d        error.  Em
14330 69 74 20 61 20 77 61 72 6e 69 6e 67 20 74 6f 20  it a warning to
14340 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c  the test log fil
14350 65 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 0d 0a  e and continue..
14360 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
14370 75 73 69 6e 67 20 61 6e 20 65 6d 74 70 79 20 73  using an emtpy s
14380 74 72 69 6e 67 20 69 6e 73 74 65 61 64 2e 0d 0a  tring instead...
14390 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
143a0 20 20 20 74 6c 6f 67 20 5b 61 70 70 65 6e 64 41     tlog [appendA
143b0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
143c0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
143d0 3a 20 66 61 69 6c 65 64 20 74 6f 20 70 61 72 73  : failed to pars
143e0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  e connection fla
143f0 67 73 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a  gs, error: " \..
14400 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74              \n\t
14410 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 0d 0a 20   $value \n].... 14420 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 set value 14430 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a "".. }.... 14440 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 14450 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f NOTE: If the co 14460 6d 62 69 6e 65 64 20 66 6c 61 67 73 20 73 74 72 mbined flags str 14470 69 6e 67 20 63 6f 75 6c 64 20 6e 6f 74 20 61 63 ing could not ac 14480 74 75 61 6c 6c 79 20 62 65 20 63 6f 6e 76 65 72 tually be conver 14490 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ted.. # 144a0 20 20 20 74 6f 20 74 68 65 20 65 6e 75 6d 65 72 to the enumer 144b0 61 74 65 64 20 74 79 70 65 20 69 74 20 69 73 20 ated type it is 144c0 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 the default valu 144d0 65 2c 20 74 68 65 6e 20 6a 75 73 74 20 75 73 65 e, then just use 144e0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 144f0 69 74 20 76 65 72 62 61 74 69 6d 3b 20 6f 74 68 it verbatim; oth 14500 65 72 77 69 73 65 2c 20 6a 75 73 74 20 72 65 74 erwise, just ret 14510 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 urn an empty str 14520 69 6e 67 2e 20 20 49 6e 20 74 68 61 74 0d 0a 20 ing. In that.. 14530 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 73 # cas 14540 65 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 e, the default c 14550 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 onnection flags 14560 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 will be used... 14570 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 14580 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 14590 20 24 76 61 6c 75 65 5d 20 3d 3d 20 30 20 7c 7c$value] == 0 ||
145a0 20 24 76 61 6c 75 65 20 6e 65 20 22 44 65 66 61   $value ne "Defa 145b0 75 6c 74 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ult"} then {.. 145c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 145d0 20 23 20 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 # WARNING: This 145e0 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 74 72 returns the str 145f0 69 6e 67 20 76 61 6c 75 65 20 6f 66 20 74 68 65 ing value of the 14600 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73 2c combined flags, 14610 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 not.. # 14620 20 20 20 20 20 20 20 20 20 74 68 65 20 65 6e 75 the enu 14630 6d 65 72 61 74 65 64 20 76 61 6c 75 65 2e 20 20 merated value. 14640 54 68 69 73 20 69 73 20 62 79 20 64 65 73 69 67 This is by desig 14650 6e 20 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 n and should not 14660 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 14670 20 20 20 20 20 62 65 20 63 68 61 6e 67 65 64 20 be changed 14680 77 69 74 68 6f 75 74 20 63 61 72 65 66 75 6c 20 without careful 14690 63 6f 6e 73 69 64 65 72 61 74 69 6f 6e 20 28 65 consideration (e 146a0 2e 67 2e 20 69 74 20 77 6f 75 6c 64 0d 0a 20 20 .g. it would.. 146b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 146c0 20 70 72 65 76 65 6e 74 20 74 68 65 20 53 51 4c prevent the SQL 146d0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6c iteConnection cl 146e0 61 73 73 20 66 72 6f 6d 20 61 6c 6c 6f 77 69 6e ass from allowin 146f0 67 20 69 6e 76 61 6c 69 64 0d 0a 20 20 20 20 20 g invalid.. 14700 20 20 20 23 20 20 20 20 20 20 20 20 20 20 5b 22 # [" 14710 6d 61 67 69 63 61 6c 22 5d 20 6d 65 74 61 2d 66 magical"] meta-f 14720 6c 61 67 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 lags)... 14730 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 14740 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 46 n [appendArgs "F 14750 6c 61 67 73 3d 22 20 24 66 6c 61 67 73 20 5c 3b lags="$flags \;
14760 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
14770 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
14780 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
14790 63 20 65 6e 61 62 6c 65 53 68 61 72 65 64 43 61  c enableSharedCa
147a0 63 68 65 20 7b 20 63 68 61 6e 6e 65 6c 20 65 6e  che { channel en
147b0 61 62 6c 65 20 7b 71 75 69 65 74 20 66 61 6c 73  able {quiet fals
147c0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  e} } {..      if
147d0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
147e0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
147f0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
14800 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
14810 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
14820 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
14830 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20  veMethods \..
14840 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
14850 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
14860 61 63 68 65 20 5b 65 78 70 72 20 69 6e 74 28 24  ache [expr int($14870 65 6e 61 62 6c 65 29 5d 0d 0a 20 20 20 20 20 20 enable)].. 14880 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 } result] == 0} 14890 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 148a0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
148b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
148c0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 148d0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 148e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 148f0 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e call sqlite3_en 14900 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 able_shared_cach 14910 65 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 e("$enable \..
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 22 29 2e               ").
14930 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74  .. ok: " $result 14940 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 14950 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 14960 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
14970 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
14980 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 14990 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 149a0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 149b0 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 "---- call s 149c0 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 qlite3_enable_sh 149d0 61 72 65 64 5f 63 61 63 68 65 28 22 20 24 65 6e ared_cache("$en
149e0 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  able \..
149f0 20 20 20 20 20 20 22 29 2e 2e 2e 20 65 72 72 6f        ")... erro
14a00 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c  r: " \n\t $resul 14a10 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d t \n].. } 14a20 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 14a30 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 ..... proc se 14a40 74 75 70 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 tupDb {.. 14a50 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d fileName {m 14a60 6f 64 65 20 22 22 7d 20 7b 64 61 74 65 54 69 6d ode ""} {dateTim 14a70 65 46 6f 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 eFormat ""} {dat 14a80 65 54 69 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 eTimeKind ""} {f 14a90 6c 61 67 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 lags ""}.. 14aa0 20 20 20 20 20 20 7b 65 78 74 72 61 20 22 22 7d {extra ""} 14ab0 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d 20 {qualify true} 14ac0 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 {delete true} {u 14ad0 72 69 20 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 ri false}.. 14ae0 20 20 20 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 {temporar 14af0 79 20 74 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 y true} {varName 14b00 20 64 62 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 db} {quiet fals 14b10 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 14b20 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 14b30 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 irst, see if our 14b40 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 caller has requ 14b50 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f ested an in-memo 14b60 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 ry database... 14b70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 14b80 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d isMemory [isMem 14b90 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d oryDb$fileName]
14ba0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
14bb0 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e     # NOTE: For n
14bc0 6f 77 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74  ow, all test dat
14bd0 61 62 61 73 65 73 20 75 73 65 64 20 62 79 20 74  abases used by t
14be0 68 65 20 74 65 73 74 20 73 75 69 74 65 20 61 72  he test suite ar
14bf0 65 20 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 20  e placed..
14c00 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65  #       into the
14c10 20 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74   database direct
14c20 6f 72 79 2e 20 20 45 61 63 68 20 64 61 74 61 62  ory.  Each datab
14c30 61 73 65 20 61 6e 64 20 72 65 6c 61 74 65 64 20  ase and related
14c40 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20  files..      #
14c50 20 20 20 20 20 75 73 65 64 20 62 79 20 61 20 74       used by a t
14c60 65 73 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6c  est should be cl
14c70 65 61 6e 65 64 20 75 70 20 62 79 20 74 68 61 74  eaned up by that
14c80 20 74 65 73 74 20 75 73 69 6e 67 20 74 68 65 0d   test using the.
14c90 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22  .      #       "
14ca0 63 6c 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65  cleanupDb" proce
14cb0 64 75 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20  dure, below...
14cc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
14cd0 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24  {!$isMemory &&$
14ce0 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d  qualify} then {.
14cf0 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c  .        set fil
14d00 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  eName [file join
14d10 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
14d20 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61  ectory] [file ta
14d30 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  il $fileName]].. 14d40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 14d50 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 14d60 3a 20 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65 : By default, de 14d70 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 lete any pre-exi 14d80 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 sting database w 14d90 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c ith the same fil 14da0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 14db0 20 6e 61 6d 65 20 69 66 20 69 74 20 63 75 72 72 name if it curr 14dc0 65 6e 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 ently exists... 14dd0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 14de0 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 {!$isMemory &&
14df0 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65  $delete && [file 14e00 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
14e10 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
14e20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
14e30 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
14e40 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65  o delete any pre
14e50 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  -existing databa
14e60 73 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  se with the same
14e70 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23   file..        #
14e80 20 20 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20         name...
14e90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14ea0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c   if {[catch {fil
14eb0 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61  e delete $fileNa 14ec0 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e me} error]} then 14ed0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 14ee0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 14ef0 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 14f00 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 iled to delete t 14f10 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 he file, report 14f20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 why... 14f30 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if 14f40 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
14f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
14f60 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 14f70 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 14f80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14f90 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 14fa0 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 : failed to dele 14fb0 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 te database file 14fc0 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
14fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14fe0 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73 65 74    "\" during set
14ff0 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  up, error: " \n\
15000 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 15010 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 15020 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 15030 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 15040 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f # NOTE: Refer to 15050 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 the specified v 15060 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 ariable (e.g. "d 15070 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 b") in the conte 15080 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 xt of our.. 15090 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e # caller. 150a0 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 The handle to 150b0 74 68 65 20 6f 70 65 6e 65 64 20 64 61 74 61 62 the opened datab 150c0 61 73 65 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 ase will be stor 150d0 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 ed there... 150e0 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar 150f0 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
15100 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
15110 23 20 4e 4f 54 45 3a 20 53 74 61 72 74 20 62 75  # NOTE: Start bu
15120 69 6c 64 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65  ilding the conne
15130 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54  ction string.  T
15140 68 65 20 6f 6e 6c 79 20 72 65 71 75 69 72 65 64  he only required
15150 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20   portion..
15160 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63  #       of the c
15170 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
15180 20 69 73 20 74 68 65 20 64 61 74 61 20 73 6f 75   is the data sou
15190 72 63 65 2c 20 77 68 69 63 68 20 63 6f 6e 74 61  rce, which conta
151a0 69 6e 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23  ins the..      #
151b0 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20         database
151c0 66 69 6c 65 20 6e 61 6d 65 20 69 74 73 65 6c 66  file name itself
151d0 2e 20 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72  .  If our caller
151e0 20 77 61 6e 74 73 20 74 6f 20 75 73 65 20 61 20   wants to use a
151f0 55 52 49 20 61 73 0d 0a 20 20 20 20 20 20 23 20  URI as..      #
15200 20 20 20 20 20 20 74 68 65 20 64 61 74 61 20 73        the data s
15210 6f 75 72 63 65 2c 20 75 73 65 20 74 68 65 20 46  ource, use the F
15220 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f  ullUri connectio
15230 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74  n string propert
15240 79 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  y to..      #
15250 20 20 20 20 70 72 65 76 65 6e 74 20 74 68 65 20      prevent the
15260 64 61 74 61 20 73 6f 75 72 63 65 20 73 74 72 69  data source stri
15270 6e 67 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61  ng from being ma
15280 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  ngled...      #.
15290 0a 20 20 20 20 20 20 69 66 20 7b 24 75 72 69 7d  .      if {$uri} 152a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 152b0 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 set connection 152c0 7b 46 75 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e {FullUri=${fileN
152d0 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65  ame}}..      } e
152e0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  lse {..        s
152f0 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44  et connection {D
15300 61 74 61 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c  ata Source=${fil 15310 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d eName}}.. } 15320 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 15330 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 # NOTE: Since 15340 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 this procedure 15350 68 61 73 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b has no special k 15360 6e 6f 77 6c 65 64 67 65 20 6f 66 20 77 68 61 74 nowledge of what 15370 20 74 68 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 the default.. 15380 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 74 # sett 15390 69 6e 67 20 69 73 20 66 6f 72 20 74 68 65 20 54 ing is for the T 153a0 6f 46 75 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 oFullPath connec 153b0 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 tion string prop 153c0 65 72 79 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 ery, always.. 153d0 20 20 20 23 20 20 20 20 20 20 20 61 64 64 20 74 # add t 153e0 68 65 20 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 he value we know 153f0 20 61 62 6f 75 74 20 74 6f 20 74 68 65 20 63 6f about to the co 15400 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e nnection string. 15410 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 15420 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti 15430 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d on {;ToFullPath= 15440 24 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20${qualify}}....
15450 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
15460 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c  NOTE: If our cal
15470 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20  ler specified a
15480 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64  journal mode, ad
15490 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  d the necessary
154a0 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23  portion..      #
154b0 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f         of the co
154c0 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
154d0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  now...      #..
154e0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
154f0 20 6c 65 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e   length $mode] > 15500 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 15510 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 append conne 15520 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 ction {;Journal 15530 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 Mode=${mode}}..
15540 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
15550 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
15560 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73   If our caller s
15570 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54  pecified a DateT
15580 69 6d 65 20 66 6f 72 6d 61 74 2c 20 61 64 64 20  ime format, add
15590 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20  the necessary..
155a0 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 72       #       por
155b0 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e  tion of the conn
155c0 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f  ection string no
155d0 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
155e0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
155f0 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65 46  ength $dateTimeF 15600 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e ormat] > 0} then 15610 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 {.. appe 15620 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b nd connection {; 15630 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 DateTimeFormat=$
15640 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d  {dateTimeFormat}
15650 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
15660 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
15670 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c  OTE: If our call
15680 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44  er specified a D
15690 61 74 65 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64  ateTimeKind, add
156a0 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70   the necessary p
156b0 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  ortion..      #
156c0 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e        of the con
156d0 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e  nection string n
156e0 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ow...      #..
156f0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
15700 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65  length $dateTime 15710 4b 69 6e 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 Kind] > 0} then 15720 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e {.. appen 15730 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 d connection {;D 15740 61 74 65 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 ateTimeKind=${da
15750 74 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20  teTimeKind}}..
15760 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
15770 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
15780 46 69 67 75 72 65 20 6f 75 74 20 77 68 61 74 20  Figure out what
15790 74 68 65 20 66 69 6e 61 6c 20 66 6c 61 67 73 20  the final flags
157a0 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65 63 74  for this connect
157b0 69 6f 6e 20 6e 65 65 64 20 74 6f 20 62 65 2e 0d  ion need to be..
157c0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
157d0 73 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f  set flags [getCo
157e0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 24 66  nnectionFlags $f 157f0 69 6c 65 4e 61 6d 65 20 24 66 6c 61 67 73 20 24 ileName$flags $15800 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 quiet].... 15810 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 15820 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 If our caller s 15830 70 65 63 69 66 69 65 64 20 73 6f 6d 65 20 53 51 pecified some SQ 15840 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c LiteConnectionFl 15850 61 67 73 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 ags, add the.. 15860 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 63 65 # nece 15870 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 ssary portion of 15880 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection 15890 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 string now... 158a0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 158b0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
158c0 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e  flags] > 0} then
158d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65   {..        appe
158e0 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b  nd connection {;
158f0 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d  Flags=${flags}}. 15900 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 15910 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 15920 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 E: If our caller 15930 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 65 78 specified an ex 15940 74 72 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 tra payload to t 15950 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 he connection.. 15960 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74 72 # str 15970 69 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 20 6e ing, append it n 15980 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ow... #.. 15990 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 159a0 6c 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e length$extra] >
159b0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
159c0 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
159d0 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d  ction \; $extra. 159e0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 159f0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 15a00 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 E: Open the data 15a10 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 base connection 15a20 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 now, placing the 15a30 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76 opaque handle v 15a40 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20 alue.. # 15a50 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72 into the var 15a60 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 iable specified 15a70 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... 15a80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 15a90 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 et db [sql open 15aa0 2d 74 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75 -type SQLite [su 15ab0 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d bst$connection]
15ac0 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
15ad0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66      # NOTE: Conf
15ae0 69 67 75 72 65 20 74 68 65 20 74 65 6d 70 6f 72  igure the tempor
15af0 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 66 6f  ary directory fo
15b00 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e  r the newly open
15b10 65 64 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20  ed database..
15b20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65     #       conne
15b30 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73  ction now unless
15b40 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62   our caller forb
15b50 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23  ids it...      #
15b60 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 74 65 6d  ..      if {$tem 15b70 70 6f 72 61 72 79 20 26 26 20 21 5b 69 6e 66 6f porary && ![info 15b80 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 exists ::no(set 15b90 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f TemporaryDirecto 15ba0 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ry)]} then {.. 15bb0 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 sql execut 15bc0 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 e$db [appendArg
15bd0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
15be0 20 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74   "PRAGMA temp_st
15bf0 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ore_directory =
15c00 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 72  \"" [getTemporar
15c10 79 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b  yDirectory] \"\;
15c20 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
15c30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
15c40 4f 54 45 3a 20 50 65 72 66 6f 72 6d 20 61 6e 79  OTE: Perform any
15c50 20 65 78 74 72 61 20 70 65 72 2d 63 6f 6e 6e 65   extra per-conne
15c60 63 74 69 6f 6e 20 73 65 74 75 70 20 66 6f 72 20  ction setup for
15c70 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64  the newly opened
15c80 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
15c90 64 61 74 61 62 61 73 65 20 6e 6f 77 20 75 6e 6c  database now unl
15ca0 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66  ess our caller f
15cb0 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20  orbids it...
15cc0 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 65    #..      set e
15cd0 78 65 63 75 74 65 4f 6e 53 65 74 75 70 20 5b 67  xecuteOnSetup [g
15ce0 65 74 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70  etExecuteOnSetup
15cf0 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
15d00 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65  string length $e 15d10 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 20 3e xecuteOnSetup] > 15d20 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 0 && \.. 15d30 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 ![info exists 15d40 20 3a 3a 6e 6f 28 65 78 65 63 75 74 65 4f 6e 53 ::no(executeOnS 15d50 65 74 75 70 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a etup)]} then {.. 15d60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 15d70 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 15d80 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 72 61 69 73 command may rais 15d90 65 20 61 6e 20 65 72 72 6f 72 3b 20 69 66 20 73 e an error; if s 15da0 6f 2c 20 74 68 61 74 20 69 73 20 66 69 6e 65 2c o, that is fine, 15db0 20 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 as.. # 15dc0 20 20 20 20 20 74 68 65 20 65 6e 63 6c 6f 73 69 the enclosi 15dd0 6e 67 20 74 65 73 74 20 77 69 6c 6c 20 74 68 65 ng test will the 15de0 6e 20 66 61 69 6c 2e 20 20 54 68 65 20 5b 73 75 n fail. The [su 15df0 62 73 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 0d bst] command is. 15e00 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 15e10 20 75 73 65 64 20 6f 6e 20 74 68 65 20 53 51 4c used on the SQL 15e20 20 69 6e 20 63 61 73 65 20 69 74 20 6e 65 65 64 in case it need 15e30 73 20 74 6f 20 72 65 66 65 72 20 74 6f 20 73 74 s to refer to st 15e40 61 74 65 20 69 6e 20 6f 75 72 0d 0a 20 20 20 20 ate in our.. 15e50 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 # cont 15e60 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ext... #. 15e70 0a 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 . sql exe 15e80 63 75 74 65 20 24 64 62 20 5b 73 75 62 73 74 20 cute$db [subst
15e90 24 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d  $executeOnSetup] 15ea0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 15eb0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 15ec0 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74 75 72 TE: Always retur 15ed0 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e n the connection 15ee0 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75 63 handle upon suc 15ef0 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a cess... #.. 15f00 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 62 return$db
15f10 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
15f20 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 63  proc getDbConnec
15f30 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20  tion { {varName
15f40 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  db} } {..      #
15f50 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
15f60 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65  Refer to the spe
15f70 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20  cified variable
15f80 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74  (e.g. "db") in t
15f90 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75  he context of ou
15fa0 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
15fb0 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61   caller.  The ha
15fc0 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61  ndle to the data
15fd0 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20  base previously
15fe0 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a  opened via the..
15ff0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73        #       [s
16000 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72  etupDb] procedur
16010 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72  e should be stor
16020 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20  ed there...
16030 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20   #..      upvar
16040 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d  1 $varName db... 16050 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 16060 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 74 # NOTE: This ret 16070 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45 54 urns the ADO.NET 16080 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f IDbConnection o 16090 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 66 bject instance f 160a0 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 or the.. # 160b0 20 20 20 20 20 20 73 70 65 63 69 66 69 65 64 20 specified 160c0 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65 2e 20 databse handle. 160d0 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67 20 74 Since getting t 160e0 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c 69 65 his object relie 160f0 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23 20 s upon.. # 16100 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e 74 65 Eagle inte 16110 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 61 72 rnals, great car 16120 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 e should be take 16130 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73 70 6f n to avoid dispo 16140 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20 23 sing of.. # 16150 20 20 20 20 20 20 20 74 68 69 73 20 6f 62 6a 65 this obje 16160 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73 65 20 ct or otherwise 16170 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74 6f 20 putting it into 16180 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 74 65 an invalid state 16190 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 161a0 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 161b0 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a ts db]} then {.. 161c0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 161d0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 161e0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 161f0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 16200 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f -objectflags +No 16210 44 69 73 70 6f 73 65 20 2d 61 6c 69 61 73 20 5c Dispose -alias \ 16220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16230 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 16240 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e ctive.connection 16250 73 20 49 74 65 6d 20 24 64 62 0d 0a 20 20 20 20 s Item$db..
16260 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d      } result] ==
16270 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
16280 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
16290 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65     # NOTE: Succe
162a0 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 6f  ss, return the o
162b0 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
162c0 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  dle...
162d0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  #..          ret
162e0 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20  urn $result.. 162f0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 16300 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 16310 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 # NOTE: Fa 16320 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20 77 68 ilure, report wh 16330 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d y... #. 16340 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 16350 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
16360 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
16370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
16380 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
16390 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e 6e 65  led to get conne
163a0 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 6f 72  ction handle for
163b0 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c 0d   database \"" \.
163c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24  .              $163d0 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 db "\", error: " 163e0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
163f0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
16400 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
16410 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
16420 46 61 69 6c 75 72 65 2c 20 72 65 74 75 72 6e 20  Failure, return
16430 61 6e 20 6f 62 76 69 6f 75 73 6c 79 20 69 6e 76  an obviously inv
16440 61 6c 69 64 20 6f 70 61 71 75 65 20 6f 62 6a 65  alid opaque obje
16450 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  ct handle...
16460 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
16470 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  n ""..    }.....
16480 20 20 20 20 70 72 6f 63 20 66 72 65 65 44 62 43      proc freeDbC
16490 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72  onnection { {var
164a0 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d  Name connection}
164b0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
164c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66       # NOTE: Ref
164d0 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  er to the specif
164e0 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e  ied variable (e.
164f0 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29  g. "connection")
16500 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23   in the..      #
16510 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f         context o
16520 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54  f our caller.  T
16530 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74  he opaque object
16540 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 20 41   handle for an A
16550 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 20 23 20  DO.NET..      #
16560 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
16570 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 74 75   previously retu
16580 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 43 6f  rned by [getDbCo
16590 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f 75 6c 64  nnection] should
165a0 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
165b0 20 20 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e     stored there.
165c0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
165d0 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 165e0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a e connection.... 165f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 16600 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 16610 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 6f 70 61 o remove the opa 16620 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c que object handl 16630 65 20 66 72 6f 6d 20 74 68 65 20 69 6e 74 65 72 e from the inter 16640 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 23 20 preter.. # 16650 20 20 20 20 20 20 6e 6f 77 2e 20 20 54 68 69 73 now. This 16660 20 5b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 [object dispose 16670 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 ] call will not 16680 61 63 74 75 61 6c 6c 79 20 64 69 73 70 6f 73 65 actually dispose 16690 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 of the.. # 166a0 20 20 20 20 20 20 20 75 6e 64 65 72 6c 79 69 6e underlyin 166b0 67 20 6f 62 6a 65 63 74 20 62 65 63 61 75 73 65 g object because 166c0 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f 73 65 20 the +NoDispose 166d0 66 6c 61 67 20 77 61 73 20 73 65 74 20 6f 6e 20 flag was set on 166e0 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 it.. # 166f0 20 20 64 75 72 69 6e 67 20 63 72 65 61 74 69 6f during creatio 16700 6e 20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 20 n of the opaque 16710 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a object handle... 16720 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 16730 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 16740 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20 5c connection] && \ 16750 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63 61 74 .. [cat 16760 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f ch {object dispo 16770 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 se$connection}
16780 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
16790 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
167a0 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f     # NOTE: We so
167b0 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20  mehow failed to
167c0 72 65 6d 6f 76 65 20 74 68 65 20 68 61 6e 64 6c  remove the handl
167d0 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a  e, report why...
167e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
167f0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 16800 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 16810 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 16820 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 16830 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d G: failed to rem 16840 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 ove connection h 16850 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f 6e 6e 65 andle \""$conne
16860 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20  ction \..
16870 20 20 20 20 20 22 5c 22 2c 20 65 72 72 6f 72 3a       "\", error:
16880 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ 16890 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. 168a0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 168b0 61 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 addDbConnection 168c0 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 { connection {va 168d0 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 rName db} } {.. 168e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 168f0 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 16900 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 16910 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" 16920 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context 16930 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # 16940 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a caller... 16950 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 #.. u 16960 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
16970 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  db....      #..
16980 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65       # NOTE: Cre
16990 61 74 65 20 61 20 63 6f 72 72 65 63 74 6c 79 20  ate a correctly
169a0 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d 65 20 66  formatted name f
169b0 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database
169c0 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a 20  connection to..
169d0 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
169e0 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73  added to the lis
169f0 74 20 6d 61 6e 61 67 65 64 20 62 79 20 74 68 65  t managed by the
16a00 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74   Eagle interpret
16a10 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
16a20 20 20 20 20 73 65 74 20 64 62 20 5b 6f 62 6a 65      set db [obje
16a30 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
16a40 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
16a50 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 2e 5f           Eagle._
16a60 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76 61  Components.Priva
16a70 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 44 61 74  te.FormatOps Dat
16a80 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 6d 65 20  abaseObjectName
16a90 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20  $connection \.. 16aa0 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 SQLiteC 16ab0 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 onnection [objec 16ac0 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 t invoke Interpr 16ad0 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e eter.GetActive N 16ae0 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 extId]].... 16af0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 16b00 3a 20 41 64 64 20 74 68 65 20 64 61 74 61 62 61 : Add the databa 16b10 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 se connection pr 16b20 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 ovided by our ca 16b30 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 ller to the list 16b40 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 16b50 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 of those known t 16b60 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 o the Eagle inte 16b70 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 rpreter... 16b80 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 #.. object 16b90 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 16ba0 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 onPublic Interpr 16bb0 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 eter.GetActive.c 16bc0 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64 64 20 5c onnections Add \ 16bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64 62 20 ..$db
16be0 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20  $connection.. 16bf0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 16c00 67 65 74 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 getRowsFromDataT 16c10 61 62 6c 65 20 7b 20 64 61 74 61 54 61 62 6c 65 able { dataTable 16c20 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set 16c30 72 6f 77 73 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 rows [list].. 16c40 20 20 20 73 65 74 20 63 6f 75 6e 74 20 5b 24 64 set count [$d
16c50 61 74 61 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 73  ataTable Columns
16c60 2e 43 6f 75 6e 74 5d 0d 0a 0d 0a 20 20 20 20 20  .Count]....
16c70 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20   for {set index
16c80 30 7d 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f  0} {$index <$co
16c90 75 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78  unt} {incr index
16ca0 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  } {..        set
16cb0 20 64 61 74 61 43 6f 6c 75 6d 6e 20 5b 24 64 61   dataColumn [$da 16cc0 74 61 54 61 62 6c 65 20 2d 61 6c 69 61 73 20 43 taTable -alias C 16cd0 6f 6c 75 6d 6e 73 2e 67 65 74 5f 49 74 65 6d 20 olumns.get_Item 16ce0 24 69 6e 64 65 78 5d 0d 0a 20 20 20 20 20 20 20$index]..
16cf0 20 73 65 74 20 6e 61 6d 65 73 28 24 69 6e 64 65   set names($inde 16d00 78 29 20 5b 24 64 61 74 61 43 6f 6c 75 6d 6e 20 x) [$dataColumn
16d10 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 0d 0a 20 20 20  ColumnName]..
16d20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62     }....      ob
16d30 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c  ject foreach -al
16d40 69 61 73 20 64 61 74 61 52 6f 77 20 5b 73 65 74  ias dataRow [set
16d50 20 64 61 74 61 52 6f 77 73 20 5b 24 64 61 74 61   dataRows [$data 16d60 54 61 62 6c 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a Table Rows]] {.. 16d70 20 20 20 20 20 20 20 20 73 65 74 20 72 6f 77 20 set row 16d80 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 [list].... 16d90 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 for {set index 16da0 20 30 7d 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 0} {$index < $c 16db0 6f 75 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 ount} {incr inde 16dc0 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 x} {.. 16dd0 73 65 74 20 76 61 6c 75 65 20 5b 24 64 61 74 61 set value [$data
16de0 52 6f 77 20 2d 63 72 65 61 74 65 20 2d 61 6c 69  Row -create -ali
16df0 61 73 20 67 65 74 5f 49 74 65 6d 20 24 69 6e 64  as get_Item $ind 16e00 65 78 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ex].... 16e10 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 16e20 67 74 68 20 24 76 61 6c 75 65 5d 20 3e 20 30 20 gth$value] > 0
16e30 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
16e40 20 20 20 20 21 5b 6f 62 6a 65 63 74 20 69 6e 76      ![object inv
16e50 6f 6b 65 20 43 6f 6e 76 65 72 74 20 49 73 44 42  oke Convert IsDB
16e60 4e 75 6c 6c 20 24 76 61 6c 75 65 5d 7d 20 74 68  Null $value]} th 16e70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16e80 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c lappend row [l 16e90 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 ist$names($inde 16ea0 78 29 20 5b 24 76 61 6c 75 65 20 54 6f 53 74 72 x) [$value ToStr
16eb0 69 6e 67 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing]]..
16ec0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
16ed0 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72         lappend r
16ee0 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28  ow [list $names( 16ef0 24 69 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20 20$index)]..
16f00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
16f10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70  ....        lapp
16f20 65 6e 64 20 72 6f 77 73 20 24 72 6f 77 0d 0a 20  end rows $row.. 16f30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 16f40 72 65 74 75 72 6e 20 24 72 6f 77 73 0d 0a 20 20 return$rows..
16f50 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
16f60 20 64 75 6d 70 52 6f 77 73 46 72 6f 6d 44 61 74   dumpRowsFromDat
16f70 61 54 61 62 6c 65 20 7b 20 63 68 61 6e 6e 65 6c  aTable { channel
16f80 20 72 6f 77 73 20 7d 20 7b 0d 0a 20 20 20 20 20   rows } {..
16f90 20 73 65 74 20 73 65 71 75 65 6e 63 65 20 31 0d   set sequence 1.
16fa0 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  ...      foreach
16fb0 20 72 6f 77 20 24 72 6f 77 73 20 7b 0d 0a 20 20   row $rows {.. 16fc0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
16fd0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
16fe0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
16ff0 5b 65 78 70 72 20 7b 24 73 65 71 75 65 6e 63 65  [expr {$sequence 17000 20 3e 20 31 20 3f 20 22 5c 6e 22 20 3a 20 22 22 > 1 ? "\n" : "" 17010 7d 5d 20 22 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 }] "---- ROW #" 17020 24 73 65 71 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a$sequence :\n]..
17030 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
17040 68 20 70 61 69 72 20 24 72 6f 77 20 7b 0d 0a 20  h pair $row {.. 17050 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c if {[ll 17060 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3e 3d 20 ength$pair] >=
17070 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  2} then {..
17080 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 17090 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 170a0 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 s \t \.. 170b0 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c [list [l 170c0 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d 20 index$pair 0]]
170d0 22 3a 20 22 20 5b 6c 69 73 74 20 5b 6c 69 6e 64  ": " [list [lind
170e0 65 78 20 24 70 61 69 72 20 31 5d 5d 20 5c 6e 5d  ex $pair 1]] \n] 170f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 17100 73 65 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 seif {[llength$
17110 70 61 69 72 5d 20 3d 3d 20 31 7d 20 74 68 65 6e  pair] == 1} then
17120 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
17130 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 17140 61 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d appendArgs \t \. 17150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 17160 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 [list [lindex$
17170 70 61 69 72 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c  pair 0]] ": <nul
17180 6c 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  l>\n"]..
17190 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
171a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 171b0 68 61 6e 6e 65 6c 20 5c 74 3c 65 6d 70 74 79 3e hannel \t<empty> 171c0 5c 6e 3b 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 \n; # NOTE: No d 171d0 61 74 61 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 ata?.. 171e0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 171f0 20 20 20 20 20 20 20 20 69 6e 63 72 20 73 65 71 incr seq 17200 75 65 6e 63 65 0d 0a 20 20 20 20 20 20 7d 0d 0a uence.. }.. 17210 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 17220 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 66 oc cleanupDb { f 17230 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 ileName {varName 17240 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 db} {collect tr 17250 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 ue} {qualify tru 17260 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e}.. 17270 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74 65 {delete 17280 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 17290 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 172a0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f E: Attempt to fo 172b0 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 rce all pending 172c0 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 "garbage" object 172d0 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 s to be collecte 172e0 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 d,.. # 172f0 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 including SQLi 17300 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e te statements an 17310 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 d backup objects 17320 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c ; this should al 17330 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 low.. # 17340 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e the underlyin 17350 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 g database file 17360 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a to be deleted... 17370 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 17380 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 f {$collect} the
17390 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c  n {..        col
173a0 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74  lectGarbage $::t 173b0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 est_channel.. 173c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 173d0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 173e0 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec 173f0 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( 17400 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 e.g. "db") in th 17410 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 e context of our 17420 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 17430 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e caller. The han 17440 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 dle to the datab 17450 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f ase previously o 17460 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 pened via the.. 17470 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 # [se 17480 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 tupDb] procedure 17490 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 should be store 174a0 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 d there... 174b0 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 174c0 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a$varName db....
174d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
174e0 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 65   NOTE: Close the
174f0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74   connection to t
17500 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f 77 2e  he database now.
17510 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61 6c    This should al
17520 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 20 23 20  low us..      #
17530 20 20 20 20 20 20 74 6f 20 64 65 6c 65 74 65 20        to delete
17540 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
17550 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20  atabase file...
17560 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
17570 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64   {[info exists d
17580 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 73 71  b] && [catch {sq
17590 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72  l close $db} err 175a0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 175b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 175c0 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 # NOTE: We someh 175d0 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f ow failed to clo 175e0 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 2c se the database, 175f0 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 report why... 17600 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 17610 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
17620 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
17630 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
17640 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
17650 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65   failed to close
17660 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 64   database \"" $d 17670 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 b "\", error: " 17680 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c \.. \ 17690 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
176a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
176b0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
176c0 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20  : First, see if
176d0 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72  our caller has r
176e0 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d  equested an in-m
176f0 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d  emory database..
17700 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17710 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73  set isMemory [is
17720 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61  MemoryDb $fileNa 17730 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a me].... #.. 17740 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 17750 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70 61 74 ild the full pat 17760 68 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 h to the databas 17770 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f e file name. Fo 17780 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d r now, all test. 17790 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 177a0 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 atabase files ar 177b0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 e stored in the 177c0 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 177d0 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ory... #.. 177e0 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d if {!$isMem
177f0 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d  ory && $qualify} 17800 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 17810 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 set fileName [f 17820 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 ile join [getDat 17830 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 abaseDirectory] 17840 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
17850 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d  Name]]..      }.
17860 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
17870 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
17880 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c  if the file stil
17890 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20  l exists...
178a0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24   #..      if {!$178b0 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c isMemory &&$del
178c0 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69  ete && [file exi
178d0 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 178e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 178f0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 17900 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 E: Skip deleting 17910 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 database files 17920 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 if somebody sets 17930 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 the global.. 17940 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 # var 17950 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65 6e 74 iable to prevent 17960 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 17970 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i 17980 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 17990 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 29 5d 7d cleanupDbFile)]} 179a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 179b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 179c0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 179d0 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 to delete the te 179e0 73 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 st database file 179f0 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 now... 17a00 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 17a10 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 {[set code [cat 17a20 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 ch {file delete 17a30 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72$fileName} error
17a40 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
17a50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
17a60 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57         # NOTE: W
17a70 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64  e somehow failed
17a80 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66   to delete the f
17a90 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e  ile, report why.
17aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
17ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
17ac0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 17ad0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 17ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17af0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 17b00 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 17b10 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 e database file 17b20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d \""$fileName \.
17b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
17b40 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61   "\" during clea
17b50 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  nup, error: " \n
17b60 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. 17b70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 17b80 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 17b90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17ba0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho 17bb0 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 w that we skippe 17bc0 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 d deleting the f 17bd0 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ile... 17be0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 #.. set 17bf0 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 code 0.... 17c00 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
17c10 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
17c20 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
17c30 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
17c40 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64  RNING: skipped d
17c50 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65  eleting database
17c60 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN 17c70 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 17c80 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 "\" during 17c90 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 cleanup\n"].. 17ca0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } 17cb0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 17cc0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 17cd0 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 E: The file does 17ce0 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 not exist, succ 17cf0 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d ess!.. #. 17d00 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 . set cod 17d10 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a e 0.. }.... 17d20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f return$co
17d30 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  de..    }.....
17d40 20 20 70 72 6f 63 20 73 61 76 65 45 6e 76 69 72    proc saveEnvir
17d50 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20  onmentVariables
17d60 7b 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65  { names {varName
17d70 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
17d80 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
17d90 20 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c 20   For each name,
17da0 64 6f 65 73 20 74 68 65 20 6c 69 76 65 20 65 6e  does the live en
17db0 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
17dc0 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d 0a 20  le exist?  If..
17dd0 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c       #       so,
17de0 20 73 61 76 65 20 74 68 65 20 76 61 6c 75 65 20   save the value
17df0 66 6f 72 20 6c 61 74 65 72 3b 20 6f 74 68 65 72  for later; other
17e00 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  wise, make sure
17e10 74 68 65 20 73 61 76 65 64 0d 0a 20 20 20 20 20  the saved..
17e20 20 23 20 20 20 20 20 20 20 76 61 6c 75 65 20 64   #       value d
17e30 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 65 69  oes not exist ei
17e40 74 68 65 72 2e 20 20 54 68 65 20 6c 69 76 65 20  ther.  The live
17e50 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69  environment vari
17e60 61 62 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20  ables..      #
17e70 20 20 20 20 20 41 52 45 20 4e 4f 54 20 63 68 61       ARE NOT cha
17e80 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 72 6f  nged by this pro
17e90 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 23  cedure...      #
17ea0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
17eb0 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e  ing length $varN 17ec0 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ame] == 0} then 17ed0 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 {.. set v 17ee0 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d arName savedEnv. 17ef0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 17f00 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
17f10 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20  me savedEnv....
17f20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d       foreach nam
17f30 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  e $names {.. 17f40 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 17f50 69 73 74 73 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 ists ::env($name
17f60 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
17f70 20 20 20 20 20 20 73 65 74 20 73 61 76 65 64 45        set savedE
17f80 6e 76 28 24 6e 61 6d 65 29 20 24 3a 3a 65 6e 76  nv($name)$::env
17f90 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  ($name).. 17fa0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 17fb0 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f unset -noco 17fc0 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76 28 mplain savedEnv( 17fd0 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20$name)..
17fe0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
17ff0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
18000 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73 65 6c  OTE: This is sel
18010 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20  f-cleaning.  If
18020 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e  no saved environ
18030 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 6e  ment variables n
18040 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ow..      #
18050 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 20    exist, remove
18060 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 20  the array...
18070 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
18080 61 72 72 61 79 20 73 69 7a 65 20 73 61 76 65 64  array size saved
18090 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  Env] == 0} then
180a0 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74  {..        unset
180b0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76   -nocomplain sav
180c0 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a  edEnv..      }..
180d0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
180e0 6f 63 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f  oc restoreEnviro
180f0 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 7b  nmentVariables {
18100 20 6e 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20   names {varName
18110 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ""} } {..      #
18120 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
18130 46 6f 72 20 65 61 63 68 20 6e 61 6d 65 2c 20 64  For each name, d
18140 6f 65 73 20 74 68 65 20 73 61 76 65 64 20 65 6e  oes the saved en
18150 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
18160 6c 65 20 65 78 69 73 74 3f 20 20 49 66 0d 0a 20  le exist?  If..
18170 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c       #       so,
18180 20 72 65 73 74 6f 72 65 20 74 68 65 20 73 61 76   restore the sav
18190 65 64 20 76 61 6c 75 65 20 61 6e 64 20 75 6e 73  ed value and uns
181a0 65 74 20 69 74 3b 20 6f 74 68 65 72 77 69 73 65  et it; otherwise
181b0 2c 20 6d 61 6b 65 20 73 75 72 65 0d 0a 20 20 20  , make sure..
181c0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6c     #       the l
181d0 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  ive environment
181e0 76 61 72 69 61 62 6c 65 20 64 6f 65 73 20 6e 6f  variable does no
181f0 74 20 65 78 69 73 74 20 65 69 74 68 65 72 20 28  t exist either (
18200 69 2e 65 2e 20 69 74 0d 0a 20 20 20 20 20 20 23  i.e. it..      #
18210 20 20 20 20 20 20 20 77 61 73 20 6e 6f 74 20 73         was not s
18220 65 74 20 74 6f 20 62 65 67 69 6e 20 77 69 74 68  et to begin with
18230 29 2e 20 20 42 6f 74 68 20 73 61 76 65 64 20 61  ).  Both saved a
18240 6e 64 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d  nd live environm
18250 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ent..      #
18260 20 20 20 76 61 72 69 61 62 6c 65 73 20 41 52 45     variables ARE
18270 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73   changed by this
18280 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20   procedure...
18290 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
182a0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $182b0 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 varName] == 0} t 182c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 hen {.. s 182d0 65 74 20 76 61 72 4e 61 6d 65 20 73 61 76 65 64 et varName saved 182e0 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a Env.. }.... 182f0 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
18300 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d  arName savedEnv.
18310 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  ...      foreach
18320 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a   name $names {.. 18330 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 if {[inf 18340 6f 20 65 78 69 73 74 73 20 73 61 76 65 64 45 6e o exists savedEn 18350 76 28 24 6e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 v($name)]} then
18360 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
18370 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 20 24 73   ::env($name)$s
18380 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a  avedEnv($name).. 18390 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 unset 183a0 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 -nocomplain save 183b0 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 dEnv($name)..
183c0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
183d0 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d           unset -
183e0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76  nocomplain ::env
183f0 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  ($name).. 18400 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 18410 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 18420 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 73 65 NOTE: This is se 18430 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 lf-cleaning. If 18440 20 6e 6f 20 73 61 76 65 64 20 65 6e 76 69 72 6f no saved enviro 18450 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 nment variables 18460 6e 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 now.. # 18470 20 20 20 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 exist, remove 18480 20 74 68 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 the array... 18490 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 184a0 5b 61 72 72 61 79 20 73 69 7a 65 20 73 61 76 65 [array size save 184b0 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e dEnv] == 0} then 184c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 {.. unse 184d0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 t -nocomplain sa 184e0 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d vedEnv.. }. 184f0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 18500 72 6f 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f roc saveSQLiteCo 18510 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d nnectionEnvironm 18520 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ent {} {.. 18530 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 upvar 1 savedEnv 18540 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 savedEnv.... 18550 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 saveEnvironme 18560 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 ntVariables [lis 18570 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 t \.. D 18580 65 66 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 efaultFlags_SQLi 18590 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f teConnection No_ 185a0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 185b0 4e 65 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20 NewParser] \.. 185c0 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 savedEnv 185d0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 185e0 70 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c 69 proc restoreSQLi 185f0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 teConnectionEnvi 18600 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 ronment {} {.. 18610 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 upvar 1 save 18620 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d dEnv savedEnv... 18630 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e . restoreEn 18640 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c vironmentVariabl 18650 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 es [list \.. 18660 20 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61 DefaultFla 18670 67 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 gs_SQLiteConnect 18680 69 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e ion No_SQLiteCon 18690 6e 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 nectionNewParser 186a0 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 ] \.. s 186b0 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a avedEnv.. }.. 186c0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 ... proc save 186d0 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e 76 SQLiteConvertEnv 186e0 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 ironment {} {.. 186f0 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 upvar 1 sav 18700 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a edEnv savedEnv.. 18710 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 .. saveEnvi 18720 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 ronmentVariables 18730 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. 18740 20 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 6f Use_SQLiteCo 18750 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 54 nvert_DefaultDbT 18760 79 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 6f ype Use_SQLiteCo 18770 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 70 nvert_DefaultTyp 18780 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20 eName] \.. 18790 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 savedEnv.. 187a0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 187b0 20 72 65 73 74 6f 72 65 53 51 4c 69 74 65 43 6f restoreSQLiteCo 187c0 6e 76 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 nvertEnvironment 187d0 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 {} {.. upv 187e0 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 ar 1 savedEnv sa 187f0 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 vedEnv.... 18800 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 restoreEnvironme 18810 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 ntVariables [lis 18820 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 55 t \.. U 18830 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 se_SQLiteConvert 18840 5f 44 65 66 61 75 6c 74 44 62 54 79 70 65 20 55 _DefaultDbType U 18850 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 se_SQLiteConvert 18860 5f 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 _DefaultTypeName 18870 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 ] \.. s 18880 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a avedEnv.. }.. 18890 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 ... proc setu 188a0 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c pDbInterruptCall 188b0 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c back { channel l 188c0 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 og } {.. tp 188d0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d uts$channel "--
188e0 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64 65  -- setting up de
188f0 62 75 67 67 65 72 20 69 6e 74 65 72 72 75 70 74  bugger interrupt
18900 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a   callback... "..
18910 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
18920 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 61  ch {..        sa
18930 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72  veEnvironmentVar
18940 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  iables [list \..
18950 20 20 20 20 20 20 20 20 20 20 20 20 71 75 69 65              quie
18960 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65 72  tFindInterpreter
18970 54 65 73 74 50 61 74 68 20 71 75 69 65 74 53 65  TestPath quietSe
18980 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 54 65  tupInterpreterTe
18990 73 74 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20 20  stPath]....
189a0 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20     try {..
189b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
189c0 20 23 20 4e 4f 54 45 3a 20 50 72 65 76 65 6e 74   # NOTE: Prevent
189d0 20 74 68 65 20 76 65 6e 64 6f 72 20 73 63 72 69   the vendor scri
189e0 70 74 20 66 72 6f 6d 20 62 65 69 6e 67 20 6e 6f  pt from being no
189f0 69 73 79 20 77 68 65 6e 20 63 72 65 61 74 69 6e  isy when creatin
18a00 67 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  g..          #
18a10 20 20 20 20 20 74 68 65 20 69 73 6f 6c 61 74 65       the isolate
18a20 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  d interpreter...
18a30 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
18a40 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e 76         set ::env
18a50 28 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70  (quietFindInterp
18a60 72 65 74 65 72 54 65 73 74 50 61 74 68 29 20 31  reterTestPath) 1
18a70 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
18a80 3a 3a 65 6e 76 28 71 75 69 65 74 53 65 74 75 70  ::env(quietSetup
18a90 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50  InterpreterTestP
18aa0 61 74 68 29 20 31 0d 0a 0d 0a 20 20 20 20 20 20  ath) 1....
18ab0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
18ac0 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75   # NOTE: Make su
18ad0 72 65 20 74 68 65 20 73 63 72 69 70 74 20 64 65  re the script de
18ae0 62 75 67 67 65 72 20 61 6e 64 20 74 68 65 20 69  bugger and the i
18af0 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65  solated interpre
18b00 74 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ter..          #
18b10 20 20 20 20 20 20 20 61 72 65 20 73 65 74 75 70         are setup
18b20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75   and ready for u
18b30 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  se...          #
18b40 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75  ..          debu
18b50 67 20 73 65 74 75 70 20 74 72 75 65 20 74 72 75  g setup true tru
18b60 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  e....          #
18b70 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
18b80 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63  TE: Load the nec
18b90 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20  essary packages
18ba0 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65  into the isolate
18bb0 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  d interpreter...
18bc0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
18bd0 20 20 20 20 20 20 20 64 65 62 75 67 20 65 76 61         debug eva
18be0 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l {..
18bf0 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65   package require
18c00 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20   Eagle..
18c10 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75      package requ
18c20 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61 72  ire Eagle.Librar
18c30 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  y..            p
18c40 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45  ackage require E
18c50 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20  agle.Test..
18c60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
18c70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
18c80 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68   # NOTE: Copy th
18c90 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69  e necessary vari
18ca0 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69  ables into the i
18cb0 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65  solated interpre
18cc0 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ter...
18cd0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62  #..          deb
18ce0 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20  ug invoke 0 set
18cf0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24  ::test_channel $18d00 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a channel; # NOTE: 18d10 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 For [tputs]... 18d20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 debug i 18d30 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 nvoke 0 set ::te 18d40 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e st_log$log; # N
18d50 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e  OTE: For [tlog].
18d60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
18d70 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
18d80 45 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63  E: Install the c
18d90 61 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74  allback script t
18da0 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 69  o be evaluated i
18db0 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a  n the isolated..
18dc0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
18dd0 20 20 69 6e 74 65 72 70 72 65 74 65 72 20 77 68    interpreter wh
18de0 65 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65  en this interpre
18df0 74 65 72 20 69 73 20 69 6e 74 65 72 72 75 70 74  ter is interrupt
18e00 65 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20 20  ed by script..
18e10 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
18e20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74  cancellation, et
18e30 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  c...          #.
18e40 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67  .          debug
18e50 20 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20   callback apply
18e60 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20  {{sender e} {..
18e70 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
18e80 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
18e90 3a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73 20  : Check if this
18ea0 64 65 62 75 67 67 65 72 20 63 61 6c 6c 62 61 63  debugger callbac
18eb0 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65  k is one that we
18ec0 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20   care about...
18ed0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
18ee0 20 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 74           set int
18ef0 65 72 72 75 70 74 54 79 70 65 73 20 5b 73 70 6c  erruptTypes [spl
18f00 69 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70 74  it [$e Interrupt 18f10 54 79 70 65 5d 20 22 2c 20 22 5d 0d 0a 0d 0a 20 Type] ", "].... 18f20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 if {" 18f30 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 24 69 6e Canceled" in$in
18f40 74 65 72 72 75 70 74 54 79 70 65 73 20 7c 7c 20  terruptTypes ||
18f50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
18f60 20 20 20 22 55 6e 77 6f 75 6e 64 22 20 69 6e 20     "Unwound" in
18f70 24 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 7d  $interruptTypes} 18f80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 18f90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18fa0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 18fb0 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 5b 6f Make sure the [o 18fc0 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 bject] command i 18fd0 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 69 s available. Si 18fe0 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 nce.. 18ff0 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20 # this 19000 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 69 is an isolated i 19010 6e 74 65 72 70 72 65 74 65 72 2c 20 63 68 65 63 nterpreter, chec 19020 6b 20 66 6f 72 20 69 74 20 74 68 65 20 68 61 72 k for it the har 19030 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 d.. 19040 20 23 20 20 20 20 20 20 20 77 61 79 2e 0d 0a 20 # way... 19050 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 19060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 19070 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f {[llength [info 19080 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 commands object 19090 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ]] > 0} then {.. 190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 190b0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 190c0 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 # NOTE: Itera 190d0 74 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 te through all d 190e0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 atabase connecti 190f0 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 ons known to the 19100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19110 20 20 23 20 20 20 20 20 20 20 70 61 72 65 6e 74 # parent 19120 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 interpreter... 19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 # 19140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19150 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 object foreach 19160 20 2d 61 6c 69 61 73 20 70 61 69 72 20 5b 6f 62 -alias pair [ob 19170 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 19180 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 19190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 191a0 20 20 20 20 20 24 65 20 49 6e 74 65 72 70 72 65$e Interpre
191b0 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d  ter.connections]
191c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
191d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
191e0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
191f0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61  E: Attempt to ca
19200 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65  ncel any SQL que
19210 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ries in progress
19220 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   on..
19230 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
19240 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e  his database con
19250 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  nection...
19260 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19280 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61   if {[catch {$pa 19290 69 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d ir Value.Cancel} 192a0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. 192b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 192c0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
192d0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
192e0 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20  ndArgs \n \..
192f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19300 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
19310 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61  NG: failed to ca
19320 6e 63 65 6c 20 71 75 65 72 79 20 66 6f 72 20 22  ncel query for "
19330 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
19340 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e              "con
19350 6e 65 63 74 69 6f 6e 20 5c 22 22 20 5b 24 70 61  nection \"" [$pa 19360 69 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 ir Key] "\", err 19370 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 or: " \n\t \.. 19380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19390 20 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d$error \n]
193a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
193b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
193c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
193d0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
193e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
193f0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 19400 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 19410 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 rgs \n \.. 19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 19430 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 6e === WARNING: can 19440 6e 6f 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 71 not cancel any q 19450 75 65 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 20 ueries: " \.. 19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19470 20 22 74 68 65 20 5c 22 6f 62 6a 65 63 74 5c 22 "the \"object\" 19480 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 command is not 19490 61 76 61 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20 available\n"].. 194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 194b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 194c0 20 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 }}.. 194d0 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b } finally { 194e0 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 74 .. rest 194f0 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 oreEnvironmentVa 19500 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d riables [list \. 19510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 71 . q 19520 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65 uietFindInterpre 19530 74 65 72 54 65 73 74 50 61 74 68 20 71 75 69 65 terTestPath quie 19540 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65 tSetupInterprete 19550 72 54 65 73 74 50 61 74 68 5d 0d 0a 20 20 20 20 rTestPath].. 19560 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 19570 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e rror] == 0} then 19580 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 {.. addC 19590 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72 onstraint interr 195a0 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 uptCallback.sqli 195b0 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 te3.... t 195c0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 puts$channel ye
195d0 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  s\n..      } els
195e0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
195f0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 19600 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 endArgs "no, err 19610 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
19620 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  r \n]..      }..
19630 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
19640 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b  oc cleanupFile {
19650 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65   fileName {colle
19660 63 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20  ct true} {force
19670 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
19680 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
19690 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f  E: Attempt to fo
196a0 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20  rce all pending
196b0 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74  "garbage" object
196c0 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65  s to be collecte
196d0 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  d,..      #
196e0 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69    including SQLi
196f0 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e  te statements an
19700 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73  d backup objects
19710 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c  ; this should al
19720 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20  low..      #
19730 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e     the underlyin
19740 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  g database file
19750 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a  to be deleted...
19760 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
19770 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65  f {$collect} the 19780 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c n {.. col 19790 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 lectGarbage$::t
197a0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  est_channel..
197b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
197c0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
197d0 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65  heck if the file
197e0 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a   still exists...
197f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
19800 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
19810 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 19820 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 19830 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 19840 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73 kip deleting tes 19850 74 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 t files if someb 19860 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f ody sets the glo 19870 62 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 bal variable.. 19880 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f # to 19890 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 prevent it... 198a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 198b0 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 if {$force || !
198c0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
198d0 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d  o(cleanupFile)]}
198e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
198f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
19900 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
19910 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65  to delete the te
19920 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20  st file now...
19930 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
19940 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f       if {[set co
19950 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20  de [catch {file
19960 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65  delete $fileName 19970 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 } error]]} then 19980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {.. # 19990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 199a0 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 NOTE: We somehow 199b0 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 199c0 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f e the file, repo 199d0 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... 199e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 199f0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
19a00 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
19a10 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
19a20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
19a30 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
19a40 6f 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69  o delete test fi
19a50 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName 19a60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19a70 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c 19a80 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 leanup, error: " 19a90 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
19aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
19ab0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
19ac0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
19ad0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
19ae0 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69  Show that we ski
19af0 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68  pped deleting th
19b00 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  e file...
19b10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
19b20 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20  set code 0....
19b30 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 19b40 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 19b50 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 19b60 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 19b70 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 WARNING: skippe 19b80 64 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 d deleting test 19b90 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 file \""$fileNa
19ba0 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
19bb0 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63      "\" during c
19bc0 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20  leanup\n"]..
19bd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
19be0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
19bf0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
19c00 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20  : The file does
19c10 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65  not exist, succe
19c20 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ss!..        #..
19c30 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65          set code
19c40 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   0..      }....
19c50 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64       return $cod 19c60 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... 19c70 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 4d 65 6d proc cleanupMem 19c80 6f 72 79 20 7b 20 76 61 72 4e 61 6d 65 20 7b 71 ory { varName {q 19c90 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d uiet false} } {. 19ca0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 . if {[have 19cb0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d SQLiteObjectComm 19cc0 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 and] && \.. 19cd0 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 19ce0 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 gth$varName] >
19cf0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
19d00 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
19d10 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
19d20 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
19d30 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e  iable (e.g. "con
19d40 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65  nection") in the
19d50 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
19d60 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72    context of our
19d70 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70   caller.  The op
19d80 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64  aque object hand
19d90 6c 65 20 66 6f 72 20 61 6e 0d 0a 20 20 20 20 20  le for an..
19da0 20 20 20 23 20 20 20 20 20 20 20 41 44 4f 2e 4e     #       ADO.N
19db0 45 54 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72  ET connection pr
19dc0 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65  eviously returne
19dd0 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65  d by [getDbConne
19de0 63 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ction]..
19df0 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  #       should b
19e00 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d  e stored there..
19e10 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
19e20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 19e30 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d Name connection. 19e40 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 19e50 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 19e60 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 19e70 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 6c$connection Rel
19e80 65 61 73 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20  easeMemory..
19e90 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74      } result]} t
19ea0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19eb0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 19ec0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19ed0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
19ee0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
19ef0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
19f00 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
19f10 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
19f20 72 65 6c 65 61 73 65 20 64 61 74 61 62 61 73 65  release database
19f30 20 6d 65 6d 6f 72 79 2c 20 65 72 72 6f 72 3a 20   memory, error:
19f40 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
19f50 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c       \n\t $resul 19f60 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 19f70 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 19f80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 19f90 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e if {[llength [in 19fa0 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 fo commands debu 19fb0 67 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d g]] > 0} then {. 19fc0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 19fd0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 19fe0 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 19ff0 20 64 65 62 75 67 20 70 75 72 67 65 5d 0d 0a 20 debug purge].. 1a000 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d } result] 1a010 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a020 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1a030 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1a040 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1a050 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1a060 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1a070 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 1a080 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 1a090 74 6f 20 70 75 72 67 65 20 63 61 6c 6c 20 66 72 to purge call fr 1a0a0 61 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d ame, error: " \. 1a0b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1a0c0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
1a0d0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
1a0e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1a0f0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1a100 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c  {..          upl
1a110 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62  evel 1 [list deb
1a120 75 67 20 63 6c 65 61 6e 75 70 5d 0d 0a 20 20 20  ug cleanup]..
1a130 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20       } result]}
1a140 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1a150 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1a160 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1a170 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1a180 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1a190 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1a1a0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
1a1b0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
1a1c0 20 63 6c 65 61 6e 75 70 20 69 6e 74 65 72 70 72   cleanup interpr
1a1d0 65 74 65 72 2c 20 65 72 72 6f 72 3a 20 22 20 5c  eter, error: " \
1a1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1a1f0 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c    \n\t $result \ 1a200 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 1a210 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 1a220 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 1a230 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 {.. up 1a240 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 level 1 [list de 1a250 62 75 67 20 63 6f 6c 6c 65 63 74 5d 0d 0a 20 20 bug collect].. 1a260 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d } result]} 1a270 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1a280 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1a290 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1a2a0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1a2b0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1a2c0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1a2d0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1a2e0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1a2f0 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 o collect garbag 1a300 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 e, error: " \.. 1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c \ 1a320 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
1a330 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1a340 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
1a350 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
1a360 70 72 6f 63 20 73 65 74 75 70 4d 65 6d 6f 72 79  proc setupMemory
1a370 43 6f 75 6e 74 65 72 73 20 7b 20 76 61 72 4e 61  Counters { varNa
1a380 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  me } {..      if
1a390 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
1a3a0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65  ectCommand]} the
1a3b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76  n {..        upv
1a3c0 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f  ar 1 $varName co 1a3d0 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 unter.... 1a3e0 20 73 65 74 20 63 6f 75 6e 74 65 72 28 31 29 20 set counter(1) 1a3f0 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d [object create - 1a400 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 alias \.. 1a410 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 System.Diag 1a420 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61 nostics.Performa 1a430 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65 nceCounter Proce 1a440 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ss \.. 1a450 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 22 20 "Working Set" 1a460 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b [file rootname [ 1a470 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e file tail$::bin
1a480 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20  _file]]]....
1a490 20 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28      set counter(
1a4a0 32 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74  2) [object creat
1a4b0 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20  e -alias \..
1a4c0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
1a4d0 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f  iagnostics.Perfo
1a4e0 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72  rmanceCounter Pr
1a4f0 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20  ocess \..
1a500 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 65       "Working Se
1a510 74 20 50 65 61 6b 22 20 5b 66 69 6c 65 20 72 6f  t Peak" [file ro
1a520 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69  otname [file tai
1a530 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d  l $::bin_file]]] 1a540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 1a550 63 6f 75 6e 74 65 72 28 33 29 20 5b 6f 62 6a 65 counter(3) [obje 1a560 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 ct create -alias 1a570 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1a580 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 System.Diagnosti 1a590 63 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f cs.PerformanceCo 1a5a0 75 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d unter Process \. 1a5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72 . "Pr 1a5c0 69 76 61 74 65 20 42 79 74 65 73 22 20 5b 66 69 ivate Bytes" [fi 1a5d0 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c le rootname [fil 1a5e0 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 e tail$::bin_fi
1a5f0 6c 65 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  le]]]..      }..
1a600 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22  ..      return "
1a610 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  "..    }.....
1a620 20 70 72 6f 63 20 72 65 70 6f 72 74 4d 65 6d 6f   proc reportMemo
1a630 72 79 43 6f 75 6e 74 65 72 73 20 7b 20 63 68 61  ryCounters { cha
1a640 6e 6e 65 6c 20 76 61 72 4e 61 6d 65 20 70 72 65  nnel varName pre
1a650 66 69 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69  fix } {..      i
1a660 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
1a670 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68  jectCommand]} th
1a680 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70  en {..        up
1a690 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63  var 1 $varName c 1a6a0 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 ounter.... 1a6b0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1a6c0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1a6d0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
1a6e0 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f  - " $prefix " co 1a6f0 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 unter \"" \.. 1a700 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 [object 1a710 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 invoke$counter
1a720 28 31 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d  (1) CounterName]
1a730 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20   "\" value is "
1a740 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
1a750 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63  object invoke $c 1a760 6f 75 6e 74 65 72 28 31 29 20 52 61 77 56 61 6c ounter(1) RawVal 1a770 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 ue] \n].... 1a780 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1a790 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1a7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
1a7b0 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63  -- " $prefix " c 1a7c0 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 ounter \"" \.. 1a7d0 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 [objec 1a7e0 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 t invoke$counte
1a7f0 72 28 32 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65  r(2) CounterName
1a800 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22  ] "\" value is "
1a810 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1a820 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $1a830 63 6f 75 6e 74 65 72 28 32 29 20 52 61 77 56 61 counter(2) RawVa 1a840 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 lue] \n].... 1a850 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1a860 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1a870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
1a880 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20  --- " $prefix " 1a890 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 counter \"" \.. 1a8a0 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 [obje 1a8b0 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 ct invoke$count
1a8c0 65 72 28 33 29 20 43 6f 75 6e 74 65 72 4e 61 6d  er(3) CounterNam
1a8d0 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20  e] "\" value is
1a8e0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1a8f0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
1a900 24 63 6f 75 6e 74 65 72 28 33 29 20 52 61 77 56  $counter(3) RawV 1a910 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 alue] \n].. 1a920 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 1a930 20 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 proc collectGa 1a940 72 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 rbage { channel 1a950 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 {milliseconds 10 1a960 30 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d 00} {quiet true} 1a970 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b } {.. if { 1a980 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 1a990 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 tCommand]} then 1a9a0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 1a9b0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1a9c0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 1a9d0 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f GC GetTotalMemo 1a9e0 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 ry false.. 1a9f0 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 } result] == 0 1aa00 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1aa10 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1aa20 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1aa30 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1aa40 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1aa50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1aa60 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 "---- memory 1aa70 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c in use by the CL 1aa80 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74 R before collect 1aa90 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 ion... " \.. 1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73$res
1aab0 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ult " bytes\n"].
1aac0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1aad0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1aae0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1aaf0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1ab00 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1ab10 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 1ab20 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 ING: failed to g 1ab30 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 et CLR memory us 1ab40 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d age, error: " \. 1ab50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c . \ 1ab60 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
1ab70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
1ab80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23    }....      ###
1ab90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1abb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1abc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1abd0 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20  ######....
1abe0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
1abf0 20 52 65 70 65 61 74 65 64 6c 79 20 61 74 74 65   Repeatedly atte
1ac00 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67  mpt to collect g
1ac10 61 72 62 61 67 65 20 75 6e 74 69 6c 20 74 68 65  arbage until the
1ac20 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62 65 72   allotted number
1ac30 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1ac40 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  of milliseconds
1ac50 68 61 73 20 65 6c 61 70 73 65 64 2e 20 20 41 6c  has elapsed.  Al
1ac60 77 61 79 73 20 61 74 74 65 6d 70 74 20 74 6f 20  ways attempt to
1ac70 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 0d  collect garbage.
1ac80 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
1ac90 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d 0a 20  t least once...
1aca0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
1acb0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
1acc0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65  ectCommand]} the
1acd0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  n {..        set
1ace0 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20 73 65   start [clock se
1acf0 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20 20  conds]..
1ad00 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72 20 7b  set stop [expr {
1ad10 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c 6c 69  $start + ($milli
1ad20 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 29 7d  seconds / 1000)}
1ad30 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64 6f 20  ]....        do
1ad40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
1ad50 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
1ad60 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72  : Attempt to for
1ad70 63 65 20 61 20 66 75 6c 6c 20 67 61 72 62 61 67  ce a full garbag
1ad80 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77  e collection now
1ad90 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a 20  .  Report any..
1ada0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1adb0 20 65 72 72 6f 72 20 74 68 61 74 20 69 73 20 65   error that is e
1adc0 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 20 77 65  ncountered if we
1add0 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20   fail...
1ade0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
1adf0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
1ae00 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
1ae10 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74  invoke GC GetTot
1ae20 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 0d 0a 20  alMemory true..
1ae30 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72           } error
1ae40 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1ae50 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1ae60 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1ae70 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1ae80 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 1ae90 4e 47 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 NG: failed full 1aea0 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 garbage collecti 1aeb0 6f 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a on, error: " \.. 1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1aed0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
1aee0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
1aef0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f            set no
1af00 77 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73  w [clock seconds
1af10 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69  ]..        } whi
1af20 6c 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e  le {$start <=$n
1af30 6f 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74  ow && $now <$st
1af40 6f 70 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  op}..      }....
1af50 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23        ##########
1af60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1af70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1af80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1af90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
1afa0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  ...      if {[ha
1afb0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
1afc0 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  mmand]} then {..
1afd0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1afe0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1aff0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43  object invoke GC
1b000 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20   GetTotalMemory
1b010 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d  false..        }
1b020 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
1b030 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1b040 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1b050 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1b060 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1b070 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b090 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20  "---- memory in
1b0a0 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 61  use by the CLR a
1b0b0 66 74 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e  fter collection.
1b0c0 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
1b0d0 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20          $result 1b0e0 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 " bytes\n"].. 1b0f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1b100 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1b110 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1b120 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1b130 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b140 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
1b150 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43   failed to get C
1b160 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c  LR memory usage,
1b170 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20   error: " \..
1b180 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
1b190 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 1b1a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 1b1b0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 1b1c0 72 6f 63 20 67 65 74 53 51 4c 69 74 65 48 61 6e roc getSQLiteHan 1b1d0 64 6c 65 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e dleCounts { chan 1b1e0 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 nel {quiet false 1b1f0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set 1b200 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a result [list].. 1b210 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 1b220 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 1b230 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 mand] && \.. 1b240 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 [haveSQLit 1b250 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 eDefineConstant 1b260 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 COUNT_HANDLE]} t 1b270 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 1b280 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1b290 3a 20 41 64 64 20 65 61 63 68 20 63 72 69 74 69 : Add each criti 1b2a0 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 cal handle count 1b2b0 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e to the resultin 1b2c0 67 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 g list... 1b2d0 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 #.. fore 1b2e0 61 63 68 20 6e 61 6d 65 20 5b 6c 69 73 74 20 63 ach name [list c 1b2f0 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75 6e 74 20 73 onnectionCount s 1b300 74 61 74 65 6d 65 6e 74 43 6f 75 6e 74 20 62 61 tatementCount ba 1b310 63 6b 75 70 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 ckupCount] {.. 1b320 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 1b330 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1b340 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 1b350 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 1b360 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 1b370 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 1b380 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 .SQLite.DebugDat 1b390 61 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 a$name..
1b3a0 20 20 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30     } value] == 0
1b3b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1b3c0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1b3d0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1b3e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1b3f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1b400 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1b410 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
1b420 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63  ritical handle c
1b430 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 22  ount \"" $name " 1b440 5c 22 20 69 73 20 22 20 24 76 61 6c 75 65 20 5c \" is "$value \
1b450 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
1b460 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
1b470 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result
1b480 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20  $value.. 1b490 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1b4a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1b4b0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1b4c0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1b4d0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1b4e0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67  ING: failed to g
1b4f0 65 74 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64  et critical hand
1b500 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20 5c 0d 0a  le count \"" \..
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b520 24 6e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72  $name "\", error 1b530 3a 20 22 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 : " \n\t$value
1b540 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1b550 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1b560 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 24 71     } elseif {!$q 1b570 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1b580 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1b590 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 # NOTE: The act 1b5a0 75 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 ual handle count 1b5b0 73 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 s are not availa 1b5c0 62 6c 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 ble; therefore, 1b5d0 6a 75 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 just.. # 1b5e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 6e 20 return an 1b5f0 65 6d 70 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 empty list... 1b600 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1b610 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
1b620 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61  ---- critical ha
1b630 6e 64 6c 65 20 63 6f 75 6e 74 73 20 75 6e 61 76  ndle counts unav
1b640 61 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20  ailable\n"..
1b650 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
1b660 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20  urn $result.. 1b670 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1b680 73 68 75 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b shutdownSQLite { 1b690 20 63 68 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 channel {force 1b6a0 66 61 6c 73 65 7d 20 7b 71 75 69 65 74 20 66 61 false} {quiet fa 1b6b0 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 1b6c0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 1b6d0 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 Make sure that 1b6e0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 1b6f0 61 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c ary is completel 1b700 79 20 73 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 y shutdown. Thi 1b710 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 1b720 20 69 73 20 75 73 65 64 20 62 79 20 74 65 73 74 is used by test 1b730 73 20 74 68 61 74 20 63 68 61 6e 67 65 20 63 6f s that change co 1b740 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 nfiguration opti 1b750 6f 6e 73 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 ons and/or those 1b760 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1b770 74 68 61 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b that need to mak 1b780 65 20 73 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 e sure logging i 1b790 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 s initialized (i 1b7a0 2e 65 2e 20 6a 75 73 74 20 69 6e 20 63 61 73 65 .e. just in case 1b7b0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1b7c0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 the SQLite core 1b7d0 6c 69 62 72 61 72 79 20 77 61 73 20 69 6e 69 74 library was init 1b7e0 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 70 ialized in the p 1b7f0 72 6f 63 65 73 73 20 70 72 69 6f 72 20 74 6f 0d rocess prior to. 1b800 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 1b810 68 65 20 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 he SQLiteLog cla 1b820 73 73 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f ss being able to 1b830 20 73 65 74 75 70 20 69 74 73 20 6c 6f 67 67 69 setup its loggi 1b840 6e 67 20 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 ng callback)... 1b850 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 72 # Nor 1b860 6d 61 6c 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 mally, this shou 1b870 6c 64 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f ld only be perfo 1b880 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 rmed if SQLite i 1b890 73 20 6c 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 s loaded and.. 1b8a0 20 20 20 20 23 20 20 20 20 20 20 20 72 65 61 64 # read 1b8b0 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 y for use by the 1b8c0 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 1b8d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 1b8e0 7b 24 66 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 {$force || [isSQ
1b8f0 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e  LiteReady]} then
1b900 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
1b910 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a         # BUGFIX:
1b920 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   Make sure that
1b930 61 6e 79 20 22 6c 65 61 6b 65 64 22 20 74 72 61  any "leaked" tra
1b940 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72  nsactions and/or
1b950 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20   connections..
1b960 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
1b970 61 72 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62  are cleaned up b
1b980 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68  efore calling th
1b990 65 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77  e native shutdow
1b9a0 6e 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20  n function...
1b9b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1b9c0 66 6f 72 65 61 63 68 20 74 72 61 6e 73 61 63 74  foreach transact
1b9d0 69 6f 6e 20 5b 69 6e 66 6f 20 74 72 61 6e 73 61  ion [info transa
1b9e0 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20  ctions] {..
1b9f0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
1ba00 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20   match \..
1ba10 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 23 44          System#D
1ba20 61 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69 74  ata#SQLite#SQLit
1ba30 65 54 72 61 6e 73 61 63 74 69 6f 6e 23 2a 20 24  eTransaction#* $1ba40 74 72 61 6e 73 61 63 74 69 6f 6e 5d 7d 20 74 68 transaction]} th 1ba50 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1ba60 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 sq 1ba80 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f l transaction ro 1ba90 6c 6c 62 61 63 6b 20 24 74 72 61 6e 73 61 63 74 llback$transact
1baa0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..
1bab0 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20   } error] == 0}
1bac0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1bad0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1bae0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1baf0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1bb00 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1bb10 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1bb30 2d 2d 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6c  -- rolled back l
1bb40 65 61 6b 65 64 20 74 72 61 6e 73 61 63 74 69 6f  eaked transactio
1bb50 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  n \"" \..
1bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72               $tr 1bb70 61 6e 73 61 63 74 69 6f 6e 20 5c 22 5c 6e 5d 0d ansaction \"\n]. 1bb80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 1bb90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 1bba0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1bbb0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1bbc0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1bbd0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1bbe0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1bbf0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 1bc10 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 1bc20 65 64 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 6c ed to rollback l 1bc30 65 61 6b 65 64 20 74 72 61 6e 73 61 63 74 69 6f eaked transactio 1bc40 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 n \"" \.. 1bc50 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72$tr
1bc60 61 6e 73 61 63 74 69 6f 6e 20 22 5c 22 2c 20 65  ansaction "\", e
1bc70 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 1bc80 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 1bc90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1bca0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1bcb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 1bcc0 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 ... forea 1bcd0 63 68 20 64 62 20 5b 69 6e 66 6f 20 63 6f 6e 6e ch db [info conn 1bce0 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 ections] {.. 1bcf0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 1bd00 67 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 g match \.. 1bd10 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 23 System# 1bd20 44 61 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69 Data#SQLite#SQLi 1bd30 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 23 2a 20 24 teConnection#*$
1bd40 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  db]} then {..
1bd50 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
1bd60 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24  tch {sql close $1bd70 64 62 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d db} error] == 0} 1bd80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1bd90 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1bda0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1bdc0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1bdd0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 1bdf0 2d 2d 2d 20 63 6c 6f 73 65 64 20 6c 65 61 6b 65 --- closed leake 1be00 64 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 d database \""$
1be10 64 62 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  db \"\n]..
1be20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1be30 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1be40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1be50 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1be60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1be70 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1be80 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1be90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1bea0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1beb0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63  ING: failed to c
1bec0 6c 6f 73 65 20 6c 65 61 6b 65 64 20 64 61 74 61  lose leaked data
1bed0 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20  base \"" \..
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bef0 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20  $db "\", error: 1bf00 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e " \n\t$error \n
1bf10 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..
1bf20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
1bf30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
1bf40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1bf50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1bf60 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65  # BUGFIX: Before
1bf70 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74   calling the nat
1bf80 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e  ive shutdown fun
1bf90 63 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75 72 65  ction, make sure
1bfa0 20 62 6f 74 68 0d 0a 20 20 20 20 20 20 20 20 23   both..        #
1bfb0 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the
1bfc0 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64  PRAGMA related d
1bfd0 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61  irectory names a
1bfe0 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20  re freed...
1bff0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
1c000 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65  eckForSQLiteDire
1c010 63 74 6f 72 69 65 73 20 24 63 68 61 6e 6e 65 6c  ctories $channel 1c020 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 true.... 1c030 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1c040 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 1c050 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 1c060 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 1c070 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1c080 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 .Data.SQLite.Uns 1c090 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 afeNativeMethods 1c0a0 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 sqlite3_shutdow 1c0b0 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 n.. } res 1c0c0 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then 1c0d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 1c0e0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
1c0f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
1c100 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1c110 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1c120 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1c130 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 - call sqlite3_s 1c140 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a hutdown()... ok: 1c150 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a "$result \n]..
1c160 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1c170 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1c180 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1c190 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1c1a0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1c1b0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1c1c0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1c1d0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61          "---- ca
1c1e0 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64  ll sqlite3_shutd
1c1f0 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20  own()... error:
1c200 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c  " \n\t $result \ 1c210 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 1c220 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 1c230 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 1c240 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53 51 proc reportSQ 1c250 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b 0d LiteResources {. 1c260 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 . cha 1c270 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 nnel {quiet fals 1c280 65 7d 20 7b 72 65 73 65 74 20 74 72 75 65 7d 20 e} {reset true} 1c290 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d {collect true} } 1c2a0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 1c2b0 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 # NOTE: If av 1c2c0 61 69 6c 61 62 6c 65 2c 20 72 65 70 6f 72 74 20 ailable, report 1c2d0 6f 6e 20 28 61 6e 64 20 70 6f 73 73 69 62 6c 79 on (and possibly 1c2e0 20 72 65 73 65 74 29 20 74 68 65 20 72 75 6e 74 reset) the runt 1c2f0 69 6d 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ime.. # 1c300 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e configuration 1c310 20 73 74 61 74 69 73 74 69 63 73 2e 0d 0a 20 20 statistics... 1c320 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 1c330 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 1c340 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d ctCommand] && \. 1c350 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 . [have 1c360 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 Constraint build 1c370 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 Configuration.De 1c380 62 75 67 5d 20 26 26 20 5b 63 61 74 63 68 20 7b bug] && [catch { 1c390 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 .. object 1c3a0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 1c3b0 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 NonPublic -alias 1c3c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c3d0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1c3e0 74 65 2e 44 65 62 75 67 44 61 74 61 20 73 65 74 te.DebugData set 1c3f0 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 0d 0a tingReadCounts.. 1c400 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52 } settingR 1c410 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d eadCounts] == 0} 1c420 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1c430 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b set nameCount [ 1c440 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e$settingReadCoun
1c450 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20  ts Count]..
1c460 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f 75 6e     set valueCoun
1c470 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f  t 0....        o
1c480 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61  bject foreach -a
1c490 6c 69 61 73 20 70 61 69 72 20 24 73 65 74 74 69  lias pair $setti 1c4a0 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a ngReadCounts {.. 1c4b0 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 incr v 1c4c0 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 alueCount [$pair
1c4d0 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20   Value]....
1c4e0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1c4f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1c500 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1c510 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1c520 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1c530 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e      "---- settin
1c540 67 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79  g \"" [$pair Key 1c550 5d 20 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 ] "\" was read " 1c560 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c570 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 [$pair Value
1c580 5d 20 22 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20  ] " times\n"]..
1c590 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1c5a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1c5b0 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65   if {$reset} the 1c5c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 1c5d0 66 20 7b 5b 63 61 74 63 68 20 7b 24 73 65 74 74 f {[catch {$sett
1c5e0 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6c  ingReadCounts Cl
1c5f0 65 61 72 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30  ear} error] == 0
1c600 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1c610 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 1c620 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 1c630 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1c640 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1c650 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1c660 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72           "---- r
1c670 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61  eset setting sta
1c680 74 69 73 74 69 63 73 20 66 6f 72 20 74 68 65 20  tistics for the
1c690 70 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20  previous " \..
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c6b0 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d  $nameCount " nam 1c6c0 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 es and "$valueC
1c6d0 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 20 72 65  ount " values re
1c6e0 61 64 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  ad\n"]..
1c6f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1c700 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1c710 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1c720 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1c730 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1c740 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 1c750 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 NG: failed to re 1c760 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 set setting stat 1c770 69 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a istics for " \.. 1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c790 22 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 "the previous " 1c7a0 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d$nameCount " nam
1c7b0 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43  es and " $valueC 1c7c0 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 ount \.. 1c7d0 20 20 20 20 20 20 20 20 22 20 76 61 6c 75 65 73 " values 1c7e0 20 72 65 61 64 2c 20 65 72 72 6f 72 3a 20 22 20 read, error: " 1c7f0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
1c800 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1c810 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
1c820 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68  ....      if {[h
1c830 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  aveSQLiteObjectC
1c840 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20  ommand] && \..
1c850 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c          [haveSQL
1c860 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  iteDefineConstan
1c870 74 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  t INTEROP_VIRTUA
1c880 4c 5f 54 41 42 4c 45 5d 20 26 26 20 5c 0d 0a 20  L_TABLE] && \..
1c890 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 51           [haveSQ
1c8a0 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61  LiteDefineConsta
1c8b0 6e 74 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f  nt TRACK_MEMORY_
1c8c0 42 59 54 45 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a  BYTES]} then {..
1c8d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1c8e0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1c8f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1c900 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72  annel "---- curr
1c910 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73  ent memory in us
1c920 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72  e by SQLiteMemor
1c930 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 20  y... "..
1c940 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
1c950 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
1c960 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
1c970 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
1c980 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
1c990 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
1c9a0 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d  a.SQLite.SQLiteM
1c9b0 65 6d 6f 72 79 20 62 79 74 65 73 41 6c 6c 6f 63  emory bytesAlloc
1c9c0 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20  ated..        }
1c9d0 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68  memory] == 0} th
1c9e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1c9f0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1ca00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1ca10 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1ca20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 1ca30 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d ory " bytes\n"]. 1ca40 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1ca50 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1ca60 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 set me 1ca70 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a mory unknown.... 1ca80 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1ca90 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1caa0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1cab0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1cac0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e dArgs$memory \n
1cad0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
1cae0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1caf0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1cb00 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1cb10 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1cb20 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d  el "---- maximum
1cb30 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62   memory in use b
1cb40 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e  y SQLiteMemory..
1cb50 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  . "..        }..
1cb60 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
1cb70 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1cb80 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
1cb90 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
1cba0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
1cbb0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
1cbc0 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f  QLite.SQLiteMemo
1cbd0 72 79 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41  ry maximumBytesA
1cbe0 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 20  llocated..
1cbf0 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30    } memory] == 0
1cc00 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1cc10 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 1cc20 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1cc30 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1cc40 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1cc50 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c  $memory " bytes\ 1cc60 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n"].. } 1cc70 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 1cc80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 1cc90 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e t memory unknown 1cca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 1ccb0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1ccc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1ccd0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1cce0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
1ccf0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  y \n]..
1cd00 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
1cd10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1cd20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1cd30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu 1cd40 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
1cd50 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79  - current memory
1cd60 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74   in use by SQLit
1cd70 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d  e... "..      }.
1cd80 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  ...      if {[ha
1cd90 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
1cda0 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  mmand]} then {..
1cdb0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1cdc0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1cdd0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
1cde0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
1cdf0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1ce00 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1ce10 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65  ite.UnsafeNative
1ce20 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f  Methods sqlite3_
1ce30 6d 65 6d 6f 72 79 5f 75 73 65 64 0d 0a 20 20 20  memory_used..
1ce40 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d       } memory] =
1ce50 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
1ce60 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1ce70 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1ce80 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1ce90 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1cea0 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74  gs $memory " byt 1ceb0 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 es\n"].. 1cec0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 1ced0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 1cee0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 1cef0 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 NOTE: Maybe the 1cf00 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 1cf10 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 ary is unavailab 1cf20 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 23 le?.. # 1cf30 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 1cf40 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a memory unknown.. 1cf50 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1cf60 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1cf70 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1cf80 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1cf90 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
1cfa0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1cfb0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1cfc0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1cfd0 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20       set memory
1cfe0 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20  unavailable....
1cff0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1d000 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1d010 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1d020 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1d030 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20   $memory \n].. 1d040 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 1d050 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 .... set re 1d060 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 23 20 sult$memory; #
1d070 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d 65 6d  NOTE: Return mem
1d080 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f 20 6f 75  ory in-use to ou
1d090 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20  r caller.....
1d0a0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1d0b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d0c0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
1d0d0 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d  ---- maximum mem
1d0e0 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51  ory in use by SQ
1d0f0 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20  Lite... "..
1d100 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
1d110 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
1d120 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
1d130 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
1d140 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1d150 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1d160 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
1d170 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
1d180 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
1d190 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74  SQLite.UnsafeNat
1d1a0 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20  iveMethods \..
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
1d1c0 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
1d1d0 61 74 65 72 20 30 0d 0a 20 20 20 20 20 20 20 20  ater 0..
1d1e0 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20  } memory] == 0}
1d1f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1d200 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1d210 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1d220 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1d230 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 1d240 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 emory " bytes\n" 1d250 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 1d260 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1d270 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 1d280 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1d290 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 Maybe the SQLit 1d2a0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 e core library i 1d2b0 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a s unavailable?.. 1d2c0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1d2d0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 1d2e0 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 y unknown.... 1d2f0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1d300 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1d310 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1d320 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1d330 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
1d340 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1d350 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
1d360 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1d370 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61  set memory unava
1d380 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20  ilable....
1d390 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1d3a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1d3b0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1d3c0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 1d3d0 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 1d3e0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 1d3f0 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 if {$collec
1d400 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1d410 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67     collectGarbag
1d420 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20  e $channel.. 1d430 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 1d440 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
1d450 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
1d460 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  $channel "---- c 1d470 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e urrent memory in 1d480 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 2e use by the CLR. 1d490 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d .. ".. }... 1d4a0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 . if {[have 1d4b0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d SQLiteObjectComm 1d4c0 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 and]} then {.. 1d4d0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 1d4e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 1d4f0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 ject invoke GC G 1d500 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 etTotalMemory fa 1d510 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d lse.. } m 1d520 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 emory] == 0} the 1d530 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 1d540 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 6e f {[string is in 1d550 74 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 6d teger -strict$m
1d560 65 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  emory]} then {..
1d570 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1d580 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1d590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 1d5a0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1d5b0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 1d5c0 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 y " bytes\n"].. 1d5d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1d5e0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1d5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 1d600 74 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 t memory invalid 1d610 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 1d620 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1d630 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1d640 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1d650 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
1d660 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
1d670 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1d680 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1d690 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1d6a0 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e     set memory un
1d6b0 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  known....
1d6c0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1d6d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d6e0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1d6f0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $1d700 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. 1d710 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1d720 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 1d730 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 1d740 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 memory unavailab 1d750 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 le.... if 1d760 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1d770 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
1d780 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1d790 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
1d7a0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
1d7b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1d7c0 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d   return $result. 1d7d0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 1d7e0 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 roc checkForSQLi 1d7f0 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 7b 20 teDirectories { 1d800 63 68 61 6e 6e 65 6c 20 7b 72 65 73 65 74 20 66 channel {reset f 1d810 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 1d820 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 1d830 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 73 : Check if the s 1d840 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 1d850 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 _directory funct 1d860 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 ion is available 1d870 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1d880 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1d890 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d   \..          "-
1d8a0 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
1d8b0 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   function sqlite
1d8c0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
1d8d0 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  ctory... "....
1d8e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
1d8f0 4f 54 45 3a 20 54 68 69 73 20 63 61 6c 6c 20 74  OTE: This call t
1d900 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69  o the sqlite3_wi
1d910 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
1d920 79 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20  y function uses
1d930 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
1d940 20 20 20 69 6e 76 61 6c 69 64 20 76 61 6c 75 65     invalid value
1d950 20 30 20 66 6f 72 20 74 68 65 20 66 69 72 73 74   0 for the first
1d960 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 69 73   argument.  This
1d970 20 63 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65   code is designe
1d980 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
1d990 20 74 6f 20 63 68 65 63 6b 20 69 66 20 63 61 6c   to check if cal
1d9a0 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f  ling the functio
1d9b0 6e 20 77 69 6c 6c 20 72 61 69 73 65 20 61 6e 20  n will raise an
1d9c0 65 78 63 65 70 74 69 6f 6e 20 28 69 2e 65 2e 0d  exception (i.e..
1d9d0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
1d9e0 68 65 20 61 63 74 75 61 6c 20 72 65 73 75 6c 74  he actual result
1d9f0 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
1da00 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72   does not matter
1da10 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a   as long as no..
1da20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69        #       di
1da30 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67  rectory is chang
1da40 65 64 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ed)...      #..
1da50 20 20 20 20 20 69 66 20 7b 5b 69 73 57 69 6e 64       if {[isWind
1da60 6f 77 73 5d 20 26 26 20 5b 63 61 74 63 68 20 7b  ows] && [catch {
1da70 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
1da80 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
1da90 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
1daa0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1dab0 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
1dac0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
1dad0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  \..            s
1dae0 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
1daf0 5f 64 69 72 65 63 74 6f 72 79 20 30 20 6e 75 6c  _directory 0 nul
1db00 6c 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30  l..      }] == 0
1db10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1db20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1db30 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65  OTE: Calling the
1db40 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
1db50 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e  et_directory fun
1db60 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a  ction does not..
1db70 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1db80 63 61 75 73 65 20 61 6e 20 65 78 63 65 70 74 69  cause an excepti
1db90 6f 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69  on; therefore, i
1dba0 74 20 6d 75 73 74 20 62 65 20 61 76 61 69 6c 61  t must be availa
1dbb0 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20  ble (i.e...
1dbc0 20 20 20 23 20 20 20 20 20 20 20 65 76 65 6e 20     #       even
1dbd0 74 68 6f 75 67 68 20 69 74 20 73 68 6f 75 6c 64  though it should
1dbe0 20 72 65 74 75 72 6e 20 61 20 66 61 69 6c 75 72   return a failur
1dbf0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 69 6e  e return code in
1dc00 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23   this..        #
1dc10 20 20 20 20 20 20 20 63 61 73 65 29 2e 0d 0a 20         case)...
1dc20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1dc30 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
1dc40 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
1dc50 74 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20  t_directory....
1dc60 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1dc70 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 annel yes\n.... 1dc80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1dc90 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f # NOTE: Does o 1dca0 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 ur caller want t 1dcb0 6f 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 o reset the dire 1dcc0 63 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20 20 20 ctories?.. 1dcd0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 1dce0 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d {$reset} then {.
1dcf0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1dd00 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1dd10 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68  Now make sure th
1dd20 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  e database and t
1dd30 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
1dd40 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20  ries are..
1dd50 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65      #       rese
1dd60 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20  t their default
1dd70 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68  values, which sh
1dd80 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72  ould be null for
1dd90 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20   both...
1dda0 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20    #       Since
1ddb0 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33  the sqlite3_win3
1ddc0 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20  2_set_directory
1ddd0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69  function is avai
1dde0 6c 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20  lable,..
1ddf0 20 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74    #       use it
1de00 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
1de10 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73            for {s
1de20 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e  et index 1} {$in 1de30 64 65 78 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69 dex < 3} {incr i 1de40 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 ndex} {.. 1de50 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1de60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1de70 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 1de80 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 1de90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1dea0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 1deb0 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 1dec0 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a ativeMethods \.. 1ded0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1dee0 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f sqlite3_win32_ 1def0 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 24 69 set_directory$i
1df00 6e 64 65 78 20 6e 75 6c 6c 0d 0a 20 20 20 20 20  ndex null..
1df10 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d         } result]
1df20 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
1df30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1df40 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1df50 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1df70 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f -- call sqlite3_ 1df80 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 1df90 6f 72 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a ory("$index \..
1dfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dfb0 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b    ", null)... ok
1dfc0 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  : " $result \n]. 1dfd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e 1dfe0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 1dff0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1e000 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1e010 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1e020 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20       "---- call
1e030 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
1e040 74 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69  t_directory(" $i 1e050 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 ndex \.. 1e060 20 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c ", nul 1e070 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c l)... error: " \ 1e080 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
1e090 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1e0a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1e0b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
1e0c0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1e0d0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n 1e0e0 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 o\n.... # 1e0f0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1e100 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 : Does our calle 1e110 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 r want to reset 1e120 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f the directories? 1e130 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d This can only. 1e140 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1e150 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 be performed if 1e160 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 SQLite is loade 1e170 64 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 d and ready for 1e180 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 0d use by the test. 1e190 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1e1a0 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 suite... 1e1b0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 1e1c0 24 72 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c$reset && [isSQL
1e1d0 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20  iteReady]} then
1e1e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
1e1f0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
1e200 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20  : Now make sure
1e210 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64  the database and
1e220 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
1e230 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20  tories are..
1e240 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
1e250 73 65 74 20 74 68 65 69 72 20 64 65 66 61 75 6c  set their defaul
1e260 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20  t values, which
1e270 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66  should be null f
1e280 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20  or both...
1e290 20 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63      #       Sinc
1e2a0 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69  e the sqlite3_wi
1e2b0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
1e2c0 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20  y function does
1e2d0 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23  not..          #
1e2e0 20 20 20 20 20 20 20 61 70 70 65 61 72 20 74 6f         appear to
1e2f0 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75   be available, u
1e300 73 65 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  se the associate
1e310 64 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64  d PRAGMA command
1e320 73 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  s..          #
1e330 20 20 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20       instead...
1e340 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1e350 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69        foreach di
1e360 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61  rectory [list da
1e370 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
1e380 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  ry temp_store_di
1e390 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20  rectory] {..
1e3a0 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20          set sql
1e3b0 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41  [appendArgs "PRA
1e3c0 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79  GMA " $directory 1e3d0 20 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a " = \"\";"].... 1e3e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1e3f0 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 [catch {executeS 1e400 71 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d ql$sql} result]
1e410 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1e430 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1e440 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1e450 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1e460 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41 47 4d -- execute PRAGM 1e470 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 A "$directory "
1e480 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20  ... ok: \"" \..
1e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e4a0 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a   $result \"\n].. 1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 1e4c0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 1e4d0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1e4e0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1e4f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1e500 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74      "---- execut
1e510 65 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65  e PRAGMA " $dire 1e520 63 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 ctory "... error 1e530 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 1e540 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 \n\t$r
1e550 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
1e560 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1e570 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1e580 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
1e590 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1e5a0 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f  TE: Finally, sho
1e5b0 77 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  w the current va
1e5c0 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
1e5d0 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72  ase and temporar
1e5e0 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
1e5f0 20 64 69 72 65 63 74 6f 72 69 65 73 2e 20 20 54   directories.  T
1e600 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20  his can only be
1e610 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c  performed if SQL
1e620 69 74 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20  ite is loaded..
1e630 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64       #       and
1e640 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62   ready for use b
1e650 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  y the test suite
1e660 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1e670 20 20 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 52    if {[isSQLiteR
1e680 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  eady]} then {..
1e690 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64         foreach d
1e6a0 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64  irectory [list d
1e6b0 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
1e6c0 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  ory temp_store_d
1e6d0 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20  irectory] {..
1e6e0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1e6f0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1e700 73 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 s "---- checking 1e710 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e "$directory ".
1e720 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .. "]....
1e730 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65     set sql [appe
1e740 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41 20 22  ndArgs "PRAGMA "
1e750 20 24 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d   $directory \;]. 1e760 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 1e770 7b 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 {[catch {execute 1e780 53 71 6c 20 24 73 71 6c 20 73 63 61 6c 61 72 7d Sql$sql scalar}
1e790 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
1e7a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1e7b0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1e7c0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6f l [appendArgs "o 1e7d0 6b 3a 20 5c 22 22 20 24 72 65 73 75 6c 74 20 5c k: \""$result \
1e7e0 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
1e7f0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
1e800 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1e810 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1e820 20 22 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 "error: " \n\t 1e830 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
1e840 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1e850 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
1e860 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1e870 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53   loadSQLiteTestS
1e880 65 74 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65  ettings { channe
1e890 6c 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7b 71  l {suffix ""} {q
1e8a0 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
1e8b0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1e8c0 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61  # NOTE: Skip loa
1e8d0 64 69 6e 67 20 74 68 65 20 73 65 74 74 69 6e 67  ding the setting
1e8e0 73 20 69 66 20 74 68 65 69 72 20 75 73 61 67 65  s if their usage
1e8f0 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c   has been disabl
1e900 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
1e910 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
1e920 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74  xists ::no(sqlit
1e930 65 54 65 73 74 53 65 74 74 69 6e 67 73 29 5d 7d  eTestSettings)]}
1e940 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1e950 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1e960 54 45 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20  TE: Load custom
1e970 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20  per-user and/or
1e980 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65  per-host test se
1e990 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20  ttings now...
1e9a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1e9b0 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
1e9c0 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   ::tcl_platform(
1e9d0 75 73 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  user)]} then {..
1e9e0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 75 73            set us
1e9f0 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  erSettingsFileNa
1ea00 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67  me [file join [g
1ea10 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72  etCommonDirector
1ea20 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  y] \..
1ea30 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20      [appendArgs
1ea40 73 65 74 74 69 6e 67 73 20 24 73 75 66 66 69 78  settings $suffix 1ea50 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f .$::tcl_platfo
1ea60 72 6d 28 75 73 65 72 29 20 2e 65 61 67 6c 65 5d  rm(user) .eagle]
1ea70 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ]....          i
1ea80 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
1ea90 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c  $userSettingsFil 1eaa0 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 1eab0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1eac0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1ead0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
1eae0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1eaf0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1eb10 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 ---- loading per 1eb20 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 74 69 -user test setti 1eb30 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a ngs file \"" \.. 1eb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1eb50 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46$userSettingsF
1eb60 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d  ileName \"...\n]
1eb70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1eb80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1eb90 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
1eba0 20 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 76             uplev
1ebb0 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63  el 1 [list sourc
1ebc0 65 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46  e $userSettingsF 1ebd0 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 ileName].. 1ebe0 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 } error]} 1ebf0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1ec00 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1ec10 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1ec20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1ec30 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1ec40 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 1ec60 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 1ec70 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 75 ed to load per-u 1ec80 73 65 72 20 73 65 74 74 69 6e 67 73 20 66 69 6c ser settings fil 1ec90 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. 1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73$us
1ecb0 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  erSettingsFileNa
1ecc0 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22  me "\", error: "
1ecd0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 1ece0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1ecf0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 1ed00 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 1ed10 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 1ed20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1ed30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1ed40 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1ed50 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1ed60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ed70 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 "---- skipp 1ed80 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 ed loading per-u 1ed90 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 ser test setting 1eda0 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 s file \"" \.. 1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1edc0 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c$userSettingsFil
1edd0 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f  eName "\", it do
1ede0 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d  es not exist\n"]
1edf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1ee00 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1ee10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1ee20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
1ee30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ee40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ee50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1ee60 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20  ##########....
1ee70 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
1ee80 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61  exists ::tcl_pla
1ee90 74 66 6f 72 6d 28 68 6f 73 74 29 5d 7d 20 74 68  tform(host)]} th
1eea0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1eeb0 73 65 74 20 68 6f 73 74 53 65 74 74 69 6e 67 73  set hostSettings
1eec0 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a  FileName [file j
1eed0 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69  oin [getCommonDi
1eee0 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20  rectory] \..
1eef0 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e            [appen
1ef00 64 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 24  dArgs settings $1ef10 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f suffix .$::tcl_
1ef20 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 20 2e  platform(host) .
1ef30 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eagle]]....
1ef40 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
1ef50 78 69 73 74 73 20 24 68 6f 73 74 53 65 74 74 69  xists $hostSetti 1ef60 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 ngsFileName]} th 1ef70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1ef80 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1ef90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1efa0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1efb0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1efc0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1efd0 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 "---- loadi 1efe0 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 ng per-host test 1eff0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c settings file \ 1f000 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 1f010 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74$hostSet
1f020 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22  tingsFileName \"
1f030 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ...\n]..
1f040 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1f050 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1f060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1f070 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74   uplevel 1 [list
1f080 20 73 6f 75 72 63 65 20 24 68 6f 73 74 53 65 74   source $hostSet 1f090 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a tingsFileName].. 1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 } er 1f0b0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. 1f0c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1f0d0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1f0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1f0f0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 1f100 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f120 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 1f130 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 : failed to load 1f140 20 70 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e per-host settin 1f150 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 gs file \"" \.. 1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f170 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73$hostSettings
1f180 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72  FileName "\", er
1f190 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 1f1a0 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 1f1b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1f1c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1f1d0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1f1e0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1f1f0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1f200 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1f210 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1f220 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1f230 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1f240 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 skipped loading 1f250 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 per-host test s 1f260 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 ettings file \"" 1f270 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f280 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69$hostSetti
1f290 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c  ngsFileName "\",
1f2a0 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
1f2b0 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
1f2c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1f2d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
1f2e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
1f2f0 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51  ..    proc runSQ
1f300 4c 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65  LiteTestPrologue
1f310 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
1f320 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
1f330 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63  ip running our c
1f340 75 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69  ustom prologue i
1f350 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68  f the main one h
1f360 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23  as been..      #
1f370 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d         skipped..
1f380 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1f390 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
1f3a0 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e  s ::no(prologue.
1f3b0 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  eagle)]} then {.
1f3c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1f3d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64      # NOTE: Load
1f3e0 20 74 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e   the "before-con
1f3f0 73 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d  straints" custom
1f400 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72   per-user and/or
1f410 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20   per-host..
1f420 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20     #       test
1f430 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20  settings now...
1f440 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1f450 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73    uplevel 1 [lis
1f460 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74  t loadSQLiteTest
1f470 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74  Settings $::test 1f480 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 _channel .before 1f490 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 1f4a0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1f4b0 43 68 65 63 6b 20 69 66 20 74 68 65 20 5b 6f 62 Check if the [ob 1f4c0 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 ject] command is 1f4d0 20 61 76 61 69 6c 61 62 6c 65 3b 20 69 66 20 6e available; if n 1f4e0 6f 74 2c 20 61 64 64 20 73 6f 6d 65 0d 0a 20 20 ot, add some.. 1f4f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 # sh 1f500 69 6d 73 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 ims to make the 1f510 74 65 73 74 20 73 75 69 74 65 20 72 75 6e 20 73 test suite run s 1f520 6d 6f 6f 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 moother... 1f530 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 1f540 63 6b 46 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 ckForSQLiteObjec 1f550 74 43 6f 6d 6d 61 6e 64 20 24 3a 3a 74 65 73 74 tCommand$::test
1f560 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
1f570 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1f580 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e 65   NOTE: Determine
1f590 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68   the names of th
1f5a0 65 20 6e 61 74 69 76 65 20 70 6c 61 74 66 6f 72  e native platfor
1f5b0 6d 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 75  m and architectu
1f5c0 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  re...        #..
1f5d0 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74          set plat
1f5e0 66 6f 72 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c  form [getBuildPl
1f5f0 61 74 66 6f 72 6d 20 74 72 75 65 5d 0d 0a 20 20  atform true]..
1f600 20 20 20 20 20 20 73 65 74 20 61 72 63 68 69 74        set archit
1f610 65 63 74 75 72 65 20 5b 61 72 63 68 69 74 65 63  ecture [architec
1f620 74 75 72 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20  tureForPlatform
1f630 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20  $platform].... 1f640 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1f650 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 # NOTE: Show th 1f660 65 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 e platform and a 1f670 72 63 68 69 74 65 63 74 75 72 65 20 75 73 65 64 rchitecture used 1f680 20 74 6f 20 68 65 6c 70 20 6c 6f 63 61 74 65 20 to help locate 1f690 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 1f6a0 20 20 20 20 20 6e 61 74 69 76 65 20 62 75 69 6c native buil 1f6b0 64 20 66 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 d files... 1f6c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 1f6d0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1f6e0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1f6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
1f700 2d 2d 2d 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72  --- platform for
1f710 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 65   locating native
1f720 20 62 75 69 6c 64 20 66 69 6c 65 73 20 69 73 20   build files is
1f730 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
1f740 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c 22 5c     $platform \"\ 1f750 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 n].... tp 1f760 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
1f770 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1f780 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
1f790 2d 2d 2d 2d 20 61 72 63 68 69 74 65 63 74 75 72  ---- architectur
1f7a0 65 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e  e for locating n
1f7b0 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65  ative build file
1f7c0 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20  s is \"" \..
1f7d0 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65          $archite 1f7e0 63 74 75 72 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 cture \"\n].... 1f7f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1f800 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 1f810 61 20 6c 69 73 74 20 6f 66 20 63 6f 6e 66 69 67 a list of config 1f820 75 72 61 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 uration files th 1f830 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 at we handle... 1f840 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1f850 20 20 73 65 74 20 63 6f 6e 66 69 67 46 69 6c 65 set configFile 1f860 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 Names [list \.. 1f870 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 1f880 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl 1f890 6c 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 l.config].... 1f8a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1f8b0 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 # NOTE: Build a 1f8c0 6c 69 73 74 20 6f 66 20 61 75 78 69 6c 69 61 72 list of auxiliar 1f8d0 79 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 y Managed Debugg 1f8e0 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 ing Assistants ( 1f8f0 4d 44 41 29 0d 0a 20 20 20 20 20 20 20 20 23 20 MDA).. # 1f900 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 configurat 1f910 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77 ion files that w 1f920 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 e handle... 1f930 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se 1f940 74 20 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e t mdaConfigFileN 1f950 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 ames [list \.. 1f960 20 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 53 EagleS 1f970 68 65 6c 6c 33 32 2e 65 78 65 2e 6d 64 61 2e 63 hell32.exe.mda.c 1f980 6f 6e 66 69 67 20 49 6e 73 74 61 6c 6c 65 72 2e onfig Installer. 1f990 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c exe.mda.config \ 1f9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 .. te 1f9b0 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 st.exe.mda.confi 1f9c0 67 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d g testlinq.exe.m 1f9d0 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 da.config \.. 1f9e0 20 20 20 20 20 20 20 20 20 74 65 73 74 65 66 36 testef6 1f9f0 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d .exe.mda.config] 1fa00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 1fa10 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 # NOTE: B 1fa20 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 uild the list of 1fa30 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 external files 1fa40 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 that we handle. 1fa50 20 53 6f 6d 65 20 6f 66 0d 0a 20 20 20 20 20 20 Some of.. 1fa60 20 20 23 20 20 20 20 20 20 20 74 68 65 73 65 20 # these 1fa70 66 69 6c 65 73 20 6d 61 79 20 62 65 20 6e 61 74 files may be nat 1fa80 69 76 65 20 61 6e 64 2f 6f 72 20 6d 61 6e 61 67 ive and/or manag 1fa90 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 74 68 ed assemblies th 1faa0 61 74 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 at are.. 1fab0 23 20 20 20 20 20 20 20 72 65 71 75 69 72 65 64 # required 1fac0 20 74 6f 20 70 65 72 66 6f 72 6d 20 76 61 72 69 to perform vari 1fad0 6f 75 73 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 ous tests... 1fae0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 1faf0 65 74 20 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e et externalFileN 1fb00 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 ames [list \.. 1fb10 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 1fb20 6a 6f 69 6e 20 45 6e 74 69 74 79 46 72 61 6d 65 join EntityFrame 1fb30 77 6f 72 6b 20 6c 69 62 20 5b 73 74 72 69 6e 67 work lib [string 1fb40 20 6d 61 70 20 5b 6c 69 73 74 20 46 78 20 22 22 map [list Fx "" 1fb50 5d 20 5b 73 74 72 69 6e 67 20 5c 0d 0a 20 20 20 ] [string \.. 1fb60 20 20 20 20 20 20 20 20 20 6d 61 70 20 5b 6c 69 map [li 1fb70 73 74 20 6e 65 74 46 78 34 35 31 20 6e 65 74 46 st netFx451 netF 1fb80 78 34 35 20 6e 65 74 46 78 34 35 32 20 6e 65 74 x45 netFx452 net 1fb90 46 78 34 35 20 6e 65 74 46 78 34 36 20 6e 65 74 Fx45 netFx46 net 1fba0 46 78 34 35 20 5c 0d 0a 20 20 20 20 20 20 20 20 Fx45 \.. 1fbb0 20 20 20 20 6e 65 74 46 78 34 36 31 20 6e 65 74 netFx461 net 1fbc0 46 78 34 35 5d 20 5b 67 65 74 42 75 69 6c 64 4e Fx45] [getBuildN 1fbd0 65 74 46 78 5d 5d 5d 20 45 6e 74 69 74 79 46 72 etFx]]] EntityFr 1fbe0 61 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d amework.dll]]... 1fbf0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1fc00 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 1fc10 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 d the list of na 1fc20 74 69 76 65 20 61 73 73 65 6d 62 6c 79 20 66 69 tive assembly fi 1fc30 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 les that we hand 1fc40 6c 65 2e 20 20 54 68 65 0d 0a 20 20 20 20 20 20 le. The.. 1fc50 20 20 23 20 20 20 20 20 20 20 72 65 61 73 6f 6e # reason 1fc60 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61 74 the "System.Dat 1fc70 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 20 66 69 a.SQLite.dll" fi 1fc80 6c 65 20 69 73 20 69 6e 63 6c 75 64 65 64 20 68 le is included h 1fc90 65 72 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 ere is.. 1fca0 23 20 20 20 20 20 20 20 62 65 63 61 75 73 65 20 # because 1fcb0 69 74 20 63 6f 75 6c 64 20 62 65 20 74 68 65 20 it could be the 1fcc0 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d mixed-mode assem 1fcd0 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d bly... #. 1fce0 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 . set nat 1fcf0 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 iveFileNames [li 1fd00 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 st].... e 1fd10 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 val lappend nati 1fd20 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 veFileNames [get 1fd30 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c NativeLibraryFil 1fd40 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 eNamesOnly].. 1fd50 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e eval lappen 1fd60 64 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 d nativeFileName 1fd70 73 20 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 s [getInteropAss 1fd80 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e emblyFileNamesOn 1fd90 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c ly].... l 1fda0 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46 69 6c append nativeFil 1fdb0 65 4e 61 6d 65 73 20 53 79 73 74 65 6d 2e 44 61 eNames System.Da 1fdc0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 0d ta.SQLite.dll... 1fdd0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1fde0 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 1fdf0 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 d the list of ma 1fe00 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 naged assembly f 1fe10 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e iles that we han 1fe20 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d dle... #. 1fe30 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 6e . set man 1fe40 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c agedFileNames [l 1fe50 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 1fe60 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 1fe70 51 4c 69 74 65 2e 64 6c 6c 20 53 79 73 74 65 6d QLite.dll System 1fe80 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e .Data.SQLite.Lin 1fe90 71 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 q.dll \.. 1fea0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 1feb0 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d .SQLite.EF6.dll] 1fec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 1fed0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 # NOTE: R 1fee0 65 6d 6f 76 65 20 61 6e 79 20 74 65 73 74 20 63 emove any test c 1fef0 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61 74 20 onstraints that 1ff00 72 65 66 65 72 20 74 6f 20 74 68 65 20 6e 61 74 refer to the nat 1ff10 69 76 65 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 ive and/or.. 1ff20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 # mana 1ff30 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c ged assembly fil 1ff40 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c es that we handl 1ff50 65 20 75 6e 6c 65 73 73 20 66 6f 72 62 69 64 64 e unless forbidd 1ff60 65 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 en from.. 1ff70 20 23 20 20 20 20 20 20 20 64 6f 69 6e 67 20 73 # doing s 1ff80 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 o... #.. 1ff90 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 1ffa0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 o exists ::no(sq 1ffb0 6c 69 74 65 52 65 6d 6f 76 65 43 6f 6e 73 74 72 liteRemoveConstr 1ffc0 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d aints)]} then {. 1ffd0 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 . forea 1ffe0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e ch fileName$con
1fff0 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  figFileNames {..
20000 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f              remo
20010 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
20020 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24  pendArgs file_ $20030 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 fileName].. 20040 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 20050 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 20060 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 Name$mdaConfigF
20070 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
20080 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f          removeCo
20090 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
200a0 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65  Args file_ $file 200b0 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 Name].. 200c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 200d0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 200e0 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61$externalFileNa
200f0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
20100 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61     removeConstra
20110 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
20120 66 69 6c 65 5f 20 5b 66 69 6c 65 20 74 61 69 6c  file_ [file tail
20130 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20   $fileName]].. 20140 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 20150 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 20160 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
20170 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
20180 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f          removeCo
20190 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
201a0 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65  Args file_ $file 201b0 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 Name].. 201c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 201d0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 201e0 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d$managedFileNam
201f0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
20200 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69    removeConstrai
20210 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
20220 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ile_ $fileName]. 20230 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 20240 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 20250 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 20260 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53 NOTE: Skip all S 20270 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 20280 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65 20 68 e related file h 20290 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e andling (deletin 202a0 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 g,.. # 202b0 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64 copying, and 202c0 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69 6e 73 loading) if ins 202d0 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 tructed... 202e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 202f0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 20300 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 73 29 :no(sqliteFiles) 20310 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 20320 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 20330 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 # NOTE: Skip t 20340 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 rying to delete 20350 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 any files if ins 20360 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 tructed... 20370 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 20380 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 20390 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 ts ::no(deleteSq 203a0 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 liteFiles)]} the 203b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 203c0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 203d0 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 ts ::no(deleteSq 203e0 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 liteConfigFiles) 203f0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 20400 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 20410 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 fileName$confi
20420 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  gFileNames {..
20430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
20440 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c  yDeleteBinaryFil
20450 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  e $fileName.. 20460 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 20470 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 20480 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 20490 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 204a0 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 45 78 o(deleteSqliteEx 204b0 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 ternalFiles)]} t 204c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 204d0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 204e0 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 eName$mdaConfig
204f0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
20510 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20  DeleteBuildFile
20520 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 20530 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 20540 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 20550 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 ach fileName$ex
20560 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20  ternalFileNames
20570 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
20580 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61     tryDeleteBina
20590 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  ryFile $fileName 205a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 205b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 205c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 205d0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 205e0 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c s ::no(deleteSql 205f0 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d iteNativeFiles)] 20600 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 20610 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 20620 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 20630 65 6c 65 74 65 53 71 6c 69 74 65 49 6d 70 6c 69 eleteSqliteImpli 20640 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e citFiles)]} then 20650 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 20660 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 20670 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 Name$nativeFile
20680 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
20690 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
206a0 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69  leteAssembly $fi 206b0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 206c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 206d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 206e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 206f0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 20700 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e no(deleteSqliteN 20710 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 onImplicitFiles) 20720 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 20730 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 20740 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 20750 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c o(deleteSqlitePl 20760 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 atformFiles)] && 20770 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20780 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 20790 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d length$platform
207a0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
207b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
207c0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
207d0 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  e $nativeFileNam 207e0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 207f0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 20800 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c eteAssembly$fil
20810 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d  eName $platform. 20820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 20830 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 20840 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 20850 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 20860 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 20870 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 41 72 o(deleteSqliteAr 20880 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 chitectureFiles) 20890 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 208a0 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 208b0 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 ing length$arch
208c0 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74  itecture] > 0} t
208d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
208e0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
208f0 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76   fileName $nativ 20900 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 eFileNames {.. 20910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20920 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d tryDeleteAssem 20930 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 bly$fileName $a 20940 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 rchitecture.. 20950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 20960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 20970 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 20980 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 20990 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 209a0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 209b0 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 209c0 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 6c SqliteManagedFil 209d0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 209e0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 209f0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 ach fileName$ma
20a00 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b  nagedFileNames {
20a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20a20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d    tryDeleteAssem
20a30 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  bly $fileName.. 20a40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 20a50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 20a60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 20a70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 20a80 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 20a90 63 6b 20 66 6f 72 20 74 68 65 20 22 61 75 74 6f ck for the "auto 20aa0 53 65 6c 65 63 74 22 20 72 75 6e 74 69 6d 65 20 Select" runtime 20ab0 6f 70 74 69 6f 6e 2e 20 20 49 66 20 70 72 65 73 option. If pres 20ac0 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 ent,.. 20ad0 23 20 20 20 20 20 20 20 61 74 74 65 6d 70 74 20 # attempt 20ae0 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 to automatically 20af0 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 select the firs 20b00 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 t available.. 20b10 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 20b20 75 69 6c 64 20 28 6f 72 20 22 72 65 6c 65 61 73 uild (or "releas 20b30 65 22 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e e") of SQLite an 20b40 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 d System.Data.SQ 20b50 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Lite.. 20b60 23 20 20 20 20 20 20 20 66 6f 72 20 75 73 65 20 # for use 20b70 77 69 74 68 20 74 68 65 20 74 65 73 74 20 73 75 with the test su 20b80 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ite... 20b90 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if 20ba0 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 {[hasRuntimeOpti 20bb0 6f 6e 20 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 on autoSelect]} 20bc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 20bd0 20 20 20 20 69 66 20 7b 21 5b 63 68 65 63 6b 46 if {![checkF 20be0 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 orSQLiteBuilds$
20bf0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74  ::test_channel t
20c00 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  rue]} then {..
20c10 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63              chec
20c20 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73  kForSQLiteReleas
20c30 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  es $::test_chann 20c40 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 el true.. 20c50 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 20c60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 20c70 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 20c80 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e NOTE: Skip tryin 20c90 67 20 74 6f 20 76 65 72 69 66 79 20 74 68 65 20 g to verify the 20ca0 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 build directory 20cb0 69 66 20 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a if instructed;.. 20cc0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 20cd0 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b otherwise, mak 20ce0 65 20 73 75 72 65 20 69 74 20 61 63 74 75 61 6c e sure it actual 20cf0 6c 79 20 65 78 69 73 74 73 20 6f 72 20 68 61 6c ly exists or hal 20d00 74 20 74 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 t the entire.. 20d10 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 20d20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 testing process 20d30 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 if it does not e 20d40 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 xist... 20d50 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 20d60 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 20d70 3a 3a 6e 6f 28 76 65 72 69 66 79 42 75 69 6c 64 ::no(verifyBuild 20d80 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 Directory)]} the 20d90 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 20da0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 20db0 23 20 4e 4f 54 45 3a 20 41 74 20 74 68 69 73 20 # NOTE: At this 20dc0 70 6f 69 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 point, the build 20dd0 20 64 69 72 65 63 74 6f 72 79 20 4d 55 53 54 20 directory MUST 20de0 65 78 69 73 74 20 61 73 20 61 0d 0a 20 20 20 20 exist as a.. 20df0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 20e00 76 61 6c 69 64 20 64 69 72 65 63 74 6f 72 79 20 valid directory 20e10 66 6f 72 20 74 68 65 20 74 65 73 74 69 6e 67 20 for the testing 20e20 70 72 6f 63 65 73 73 20 74 6f 20 63 6f 6e 74 69 process to conti 20e30 6e 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 nue... 20e40 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 20e50 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b set directory [ 20e60 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 getBuildDirector 20e70 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 y].... 20e80 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi 20e90 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d 20 sts$directory]
20ea0 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  || \..
20eb0 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 64        ![file isd
20ec0 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74  irectory $direct 20ed0 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ory]} then {.. 20ee0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 20ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 20f00 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72 20 OTE: Just prior 20f10 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c 74 to actually halt 20f20 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 ing the testing 20f30 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20 20 process,.. 20f40 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 20f50 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 add an error to 20f60 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c the test log fil 20f70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e... 20f80 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 20f90 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
20fa0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
20fb0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
20fc0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
20fd0 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79  could not verify
20fe0 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
20ff0 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 20   \"" $directory 21000 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21010 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 "\", all te 21020 73 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e 22 5d sting halted\n"] 21030 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 21040 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 21050 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 73 69 # NOTE: Raisi 21060 6e 67 20 61 20 73 63 72 69 70 74 20 65 72 72 6f ng a script erro 21070 72 20 66 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e r from this poin 21080 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d 0a 20 t should halt.. 21090 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 210a0 20 20 20 20 20 74 68 65 20 74 65 73 74 69 6e 67 the testing 210b0 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 process... 210c0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 210d0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error 210e0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21100 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 "could not veri 21110 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f fy build directo 21120 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 ry \""$director
21130 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y \..
21140 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20         "\", all
21150 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 5d  testing halted"]
21160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21170 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
21180 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
21190 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
211a0 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f  kip trying to co
211b0 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20  py any files if
211c0 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20  instructed...
211d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
211e0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
211f0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
21200 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68  qliteFiles)]} th
21210 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
21220 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
21230 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
21240 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d  iteConfigFiles)]
21250 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
21260 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
21270 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67  fileName $config 21280 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 21290 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 212a0 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24 66 CopyBuildFile$f
212b0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
212c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
212d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
212e0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
212f0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f  o exists ::no(co
21300 70 79 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c  pySqliteExternal
21310 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
21320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
21330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21340 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65  # NOTE: Copy the
21350 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 69   Managed Debuggi
21360 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d  ng Assistants (M
21370 44 41 29 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  DA) configuratio
21380 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..
21390 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 66 6f   #       file fo
213a0 72 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c  r the Eagle shel
213b0 6c 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 6f  l to the build o
213c0 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c  utput directory,
213d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
213e0 23 20 20 20 20 20 20 20 77 68 69 6c 65 20 75 73  #       while us
213f0 69 6e 67 20 65 61 63 68 20 6f 66 20 74 68 65 20  ing each of the
21400 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 76 61 72  names of the var
21410 69 6f 75 73 20 6c 65 67 61 63 79 20 74 65 73 74  ious legacy test
21420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21430 23 20 20 20 20 20 20 20 65 78 65 63 75 74 61 62  #       executab
21440 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  les.  This will
21450 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 72  help to make sur
21460 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a  e that all the..
21470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
21480 20 20 20 20 20 20 6c 65 67 61 63 79 20 74 65 73        legacy tes
21490 74 73 20 72 75 6e 20 77 69 74 68 20 65 78 61 63  ts run with exac
214a0 74 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65 74  tly the same set
214b0 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20   of Managed..
214c0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
214d0 20 20 20 44 65 62 75 67 67 69 6e 67 20 41 73 73     Debugging Ass
214e0 69 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 72  istants configur
214f0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...
21500 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
21510 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
21520 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46  Name $mdaConfigF 21530 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 21540 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 tryC 21550 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20 45 61 opyBinaryFile Ea 21560 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 gleShell.exe.mda 21570 2e 63 6f 6e 66 69 67 20 22 22 20 24 66 69 6c 65 .config ""$file
21580 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
21590 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
215a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
215b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
215c0 43 6f 70 79 20 74 68 65 20 65 78 74 65 72 6e 61  Copy the externa
215d0 6c 20 62 69 6e 61 72 69 65 73 2c 20 69 66 20 61  l binaries, if a
215e0 6e 79 2c 20 74 6f 20 74 68 65 20 64 69 72 65 63  ny, to the direc
215f0 74 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 20 20  tory that..
21600 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
21610 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 45 61   contains the Ea
21620 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 69 73  gle shell.  This
21630 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75 73   is typically us
21640 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 20  ed to make..
21650 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
21660 20 20 73 75 72 65 20 61 73 73 65 6d 62 6c 69 65    sure assemblie
21670 73 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  s referenced by
21680 74 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 20 74  the ones being t
21690 65 73 74 65 64 20 61 72 65 0d 0a 20 20 20 20 20  ested are..
216a0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
216b0 20 61 76 61 69 6c 61 62 6c 65 20 64 75 72 69 6e   available durin
216c0 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72  g the testing pr
216d0 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ocess...
216e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
216f0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
21700 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61  ileName $externa 21710 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 lFileNames {.. 21720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 21730 79 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c yCopyExternalFil 21740 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 e$fileName..
21750 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
21760 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
21770 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
21780 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
21790 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 69  o(copySqliteNati
217a0 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  veFiles)]} then
217b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
217c0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
217d0 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
217e0 20 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 20 69   test platform i
217f0 73 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65 66  s likely the def
21800 61 75 6c 74 20 66 6f 72 20 74 68 69 73 0d 0a 20  ault for this..
21810 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
21820 20 20 20 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c       machine, al
21830 73 6f 20 74 72 79 20 74 6f 20 63 6f 70 79 20 74  so try to copy t
21840 68 65 20 6e 61 74 69 76 65 20 66 69 6c 65 73 20  he native files
21850 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..
21860 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 69        #       bi
21870 6e 61 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a  nary location...
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
21890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
218a0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
218b0 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
218c0 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 20  ImplicitFiles)]
218d0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
218e0 20 20 20 20 20 20 20 20 5b 69 73 44 65 66 61 75          [isDefau
218f0 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20  ltBuildPlatform
21900 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  true]} then {..
21910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
21920 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
21930 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73  $nativeFileNames 21940 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21950 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 tryCopyAss 21960 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d embly$fileName.
21970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21980 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
21990 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
219a0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
219b0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79  exists ::no(copy
219c0 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69  SqliteNonImplici
219d0 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  tFiles)]} then {
219e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
219f0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
21a00 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
21a10 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73  itePlatformFiles
21a20 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  )] && \..
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
21a40 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61  ring length $pla 21a50 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e tform] > 0} then 21a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21a70 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 21a80 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 leName$nativeFi
21a90 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
21aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21ab0 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24  ryCopyAssembly $21ac0 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
21ad0 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rm..
21ae0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
21af0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
21b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
21b10 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
21b20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 41  ::no(copySqliteA
21b30 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73  rchitectureFiles
21b40 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  )] && \..
21b50 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
21b60 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63  ring length $arc 21b70 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 hitecture] > 0} 21b80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 21b90 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 21ba0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 h fileName$nati
21bb0 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
21bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21bd0 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62     tryCopyAssemb
21be0 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72  ly $fileName$ar
21bf0 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20  chitecture..
21c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
21c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21c20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
21c30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
21c40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
21c50 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
21c60 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
21c70 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29  iteManagedFiles)
21c80 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
21c90 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
21ca0 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67   fileName $manag 21cb0 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 21cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 21cd0 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 ryCopyAssembly$
21ce0 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..
21cf0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
21d00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
21d10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
21d20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
21d30 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79  # NOTE: Skip try
21d40 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79 20  ing to load any
21d50 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63  files if instruc
21d60 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ted...
21d70 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  #..          if
21d80 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
21d90 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 69  :no(loadSqliteFi
21da0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
21db0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
21dc0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
21dd0 6f 28 6c 6f 61 64 53 71 6c 69 74 65 49 6d 70 6c  o(loadSqliteImpl
21de0 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65  icitFiles)]} the
21df0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
21e00 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62     tryLoadAssemb
21e10 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ly System.Data.S
21e20 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20  QLite.dll..
21e30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
21e40 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
21e50 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c  fo exists ::no(l
21e60 6f 61 64 53 71 6c 69 74 65 4c 69 6e 71 46 69 6c  oadSqliteLinqFil
21e70 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
21e80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c              tryL
21e90 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74  oadAssembly Syst
21ea0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c  em.Data.SQLite.L
21eb0 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  inq.dll..
21ec0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
21ed0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
21ee0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61   exists ::no(loa
21ef0 64 53 71 6c 69 74 65 45 66 36 46 69 6c 65 73 29  dSqliteEf6Files)
21f00 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
21f10 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64           tryLoad
21f20 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
21f30 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e  Data.SQLite.EF6.
21f40 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dll..
21f50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
21f60 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
21f70 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c  sts ::no(loadSql
21f80 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69  iteNonImplicitFi
21f90 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
21fb0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
21fc0 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 50 6c  :no(loadSqlitePl
21fd0 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26  atformFiles)] &&
21fe0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
21ff0 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
22000 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20  ngth $platform] 22010 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 22020 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 22030 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 LoadAssembly Sys 22040 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 22050 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 dll$platform..
22060 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22080 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
22090 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74  s ::no(loadSqlit
220a0 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c  eArchitectureFil
220b0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
220c0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
220d0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63  ring length $arc 220e0 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 hitecture] > 0} 220f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 22100 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 tryLoadA 22110 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 ssembly System.D 22120 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 ata.SQLite.dll$
22130 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20  architecture..
22140 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
22150 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
22160 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
22170 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
22180 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
22190 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c  Only [getNativeL
221a0 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f  ibraryFileNamesO
221b0 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  nly] {..
221c0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
221d0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 221e0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 221f0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 22200 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 22210 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 22220 66 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 4f f \""$fileNameO
22230 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5c  nly "\"... \"" \
22240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22250 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20    [file version
22260 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
22270 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  me $fileNameOnly 22280 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 ]] \"\n].. 22290 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 222a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 .... fore 222b0 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 ach fileNameOnly 222c0 20 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 [getInteropAsse 222d0 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c mblyFileNamesOnl 222e0 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 y] {.. 222f0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 22300 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
22310 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
22320 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
22330 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
22340 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  file version of
22350 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c  \"" $fileNameOnl 22360 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5c 0d 0a y "\"... \"" \.. 22370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22380 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 [file version [g 22390 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 223a0 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d$fileNameOnly]]
223b0 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20   \"\n]..
223c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
223d0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch
223e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
223f0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 22400 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 22410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22420 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 22430 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 on of \"System.D 22440 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 ata.SQLite.dll\" 22450 2e 2e 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ... \"" \.. 22460 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 [file v 22470 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 ersion [getBinar 22480 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d yFileName System 22490 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 224a0 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 ]] \"\n].. 224b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 }.... c 224c0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 224d0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
224e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
224f0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
22500 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
22510 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73  version of \"Sys
22520 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
22530 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22  Linq.dll\"... \"
22540 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
22550 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e     [file version
22560 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
22570 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ame System.Data.
22580 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d  SQLite.Linq.dll]
22590 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..
225a0 20 20 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20     \"\n]..
225b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
225c0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
225d0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 225e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 225f0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 22600 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 22610 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 version of \"Sys 22620 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 22630 45 46 36 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22 EF6.dll\"... \"" 22640 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22650 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 [file version 22660 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 22670 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 me System.Data.S 22680 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 5d 20 QLite.EF6.dll]] 22690 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 226a0 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 \"\n].. 226b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 226c0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 226d0 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20$platform] > 0}
226e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
226f0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
22700 6d 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76  meOnly [getNativ
22710 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65  eLibraryFileName
22720 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20  sOnly] {..
22730 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
22750 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 22760 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 22770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22780 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 "---- file v 22790 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 ersion of \""$p
227a0 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20  latform \..
227b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24               / $227c0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 fileNameOnly "\" 227d0 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 ... \"" [file ve 227e0 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 rsion \.. 227f0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 [getB 22800 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 inaryFileName$f
22810 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 70 6c 61  ileNameOnly $pla 22820 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 tform]] \"\n].. 22830 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 22840 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 22850 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 22860 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 ileNameOnly [get 22870 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79 46 InteropAssemblyF 22880 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d ileNamesOnly] {. 22890 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 . cat 228a0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 228b0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
228c0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
228d0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
228e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
228f0 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
22900 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c   \"" $platform \ 22910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22920 20 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f /$fileNameO
22930 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b  nly "\"... \"" [
22940 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a  file version \..
22950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22960 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65    [getBinaryFile
22970 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  Name $fileNameOn 22980 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c ly$platform]] \
22990 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
229a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
229b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61  ....          ca
229c0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
229d0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 229e0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 229f0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 22a00 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 22a10 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 22a20 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 "$platform \..
22a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22a40 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  /System.Data.SQL
22a50 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22  ite.dll\"... \""
22a60 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c   [file version \
22a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22a80 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65    [getBinaryFile
22a90 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Name System.Data
22aa0 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61  .SQLite.dll $pla 22ab0 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 tform]] \"\n].. 22ac0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 22ad0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 22ae0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 22af0 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 gth$architectur
22b00 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
22b10 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
22b20 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b  h fileNameOnly [
22b30 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79  getNativeLibrary
22b40 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b  FileNamesOnly] {
22b50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
22b60 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
22b70 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 22b80 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 22b90 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 22ba0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 22bb0 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 22bc0 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 f \""$architect
22bd0 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ure \..
22be0 20 20 20 20 20 20 20 20 20 2f 20 24 66 69 6c 65           / $file 22bf0 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 NameOnly "\"... 22c00 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f \"" [file versio 22c10 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 22c20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 [getBinar 22c30 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e yFileName$fileN
22c40 61 6d 65 4f 6e 6c 79 20 24 61 72 63 68 69 74 65  ameOnly $archite 22c50 63 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 cture]] \"\n].. 22c60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 22c70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 22c80 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 22c90 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 22ca0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
22cb0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
22cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
22cd0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
22ce0 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68  ion of \"" $arch 22cf0 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 itecture \.. 22d00 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 66 /$f
22d10 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e  ileNameOnly "\".
22d20 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72  .. \"" [file ver
22d30 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  sion \..
22d40 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61          [getBina
22d50 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file 22d60 4e 61 6d 65 4f 6e 6c 79 20 24 61 72 63 68 69 74 NameOnly$archit
22d70 65 63 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a  ecture]] \"\n]..
22d80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
22d90 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b           catch {
22da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
22db0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 22dc0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 22dd0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22de0 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 "---- file ve 22df0 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 rsion of \""$ar
22e00 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20  chitecture \..
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f                "/
22e20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
22e30 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 5c 22 22 20  te.dll\"... \""
22e40 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d  [file version \.
22e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
22e60 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
22e70 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ame System.Data.
22e80 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 68  SQLite.dll $arch 22e90 69 74 65 63 74 75 72 65 5d 5d 20 5c 0d 0a 20 20 itecture]] \.. 22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 22 \" 22eb0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 22ec0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 22ed0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 22ee0 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 # NOTE: Grab t 22ef0 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 he list of manag 22f00 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 66 6f ed assemblies fo 22f10 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 r the current pr 22f20 6f 63 65 73 73 0d 0a 20 20 20 20 20 20 20 20 23 ocess.. # 22f30 20 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 and repor 22f40 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e t on the System. 22f50 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 Data.SQLite rela 22f60 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 ted ones... 22f70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 22f80 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 22f90 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 22fa0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 22fb0 65 74 20 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f et assemblies [o 22fc0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 bject invoke App 22fd0 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f Domain.CurrentDo 22fe0 6d 61 69 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 main GetAssembli 22ff0 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 es].... 23000 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 object foreach 23010 61 73 73 65 6d 62 6c 79 20 24 61 73 73 65 6d 62 assembly$assemb
23020 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  lies {..
23030 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
23040 6d 61 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44  match \{System.D
23050 61 74 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 73  ata.SQLite* $ass 23060 65 6d 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a embly]} then {.. 23070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 23080 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
23090 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
230a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
230b0 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64       "---- found
230c0 20 6c 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 79   loaded assembly
230d0 3a 20 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e  : " $assembly \n 230e0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 230f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 23100 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 23110 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 23120 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
23130 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
23140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
23150 2d 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74  --- define const
23160 61 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65  ants for \"Syste
23170 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e  m.Data.SQLite\".
23180 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .. "....
23190 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
231a0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
231b0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
231c0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
231d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
231e0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
231f0 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65  e.SQLite3 Define
23200 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20  Constants..
23210 20 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e       } defineCon
23220 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68  stants] == 0} th
23230 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
23240 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 23250 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 23260 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 rgs [formatList 23270 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 [lsort \.. 23280 20 20 20 20 20 20 20 20 20 20 24 64 65 66 69 6e$defin
23290 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e  eConstants] <non
232a0 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  e>] \n]..
232b0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
232c0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $232d0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 ::test_channel u 232e0 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 nknown\n.. 232f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 23300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 .... catc 23310 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 h {.. t 23320 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
23330 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
23340 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72        "---- sour
23350 63 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  ce version of \"
23360 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
23370 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d  te.dll\"... "...
23380 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
23390 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
233a0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
233b0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
233c0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
233d0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
233e0 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
233f0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76  eConnection Prov
23400 69 64 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20  iderVersion..
23410 20 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e         } version
23420 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
23430 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
23440 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $23450 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 version] == 0} t 23460 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 23470 20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e set version 23480 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 null.. 23490 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 234a0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
234b0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
234c0 72 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d  rgs $version \n] 234d0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 234e0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 234f0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
23500 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c  channel unknown\
23510 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  n..          }..
23520 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
23530 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
23540 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 23550 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 23560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 23570 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 ---- source chec 23580 6b 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d kout of \"System 23590 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 235a0 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 \"... ".... 235b0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 235c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f {.. o 235d0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 235e0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 235f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23600 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 23610 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 Lite.SQLiteConne 23620 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f ction ProviderSo 23630 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 urceId.. 23640 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d } sourceId] == 23650 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 23660 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 23670 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 ing length$sour
23680 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ceId] == 0} then
23690 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
236a0 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e    set sourceId n
236b0 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ull..
236c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
236d0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 236e0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 236f0 73 20 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d s$sourceId \n].
23700 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
23710 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
23720 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 23730 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e hannel unknown\n 23740 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 23750 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 23760 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 23770 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 NOTE: Check the 23780 20 61 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 available build 23790 73 20 28 61 6e 64 20 22 72 65 6c 65 61 73 65 73 s (and "releases 237a0 22 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 ") of SQLite and 237b0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 237c0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 237d0 4c 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 Lite... # 237e0 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 237f0 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 orSQLiteBuilds$
23800 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
23810 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
23820 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24  SQLiteReleases $23830 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 23840 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 23850 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 # NOTE: Now 23860 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f , we need to kno 23870 77 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 w if the SQLite 23880 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 core library is 23890 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 available.. 238a0 20 20 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e # (i.e. 238b0 20 62 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e because the man 238c0 61 67 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d aged-only System 238d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73 .Data.SQLite ass 238e0 65 6d 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 embly can.. 238f0 20 20 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20 # load 23900 77 69 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 without it; howe 23910 76 65 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 ver, it cannot d 23920 6f 20 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 o anything usefu 23930 6c 20 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 l without.. 23940 20 20 20 23 20 20 20 20 20 20 20 69 74 29 2e 20 # it). 23950 20 49 66 20 77 65 20 61 72 65 20 75 73 69 6e 67 If we are using 23960 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 the mixed-mode 23970 61 73 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 assembly and we 23980 61 6c 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 already.. 23990 20 23 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69 # found i 239a0 74 20 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20 t (above), this 239b0 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75 should always su 239c0 63 63 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 cceed... 239d0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 239e0 46 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 ForSQLiteLibrary 239f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
23a00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
23a10 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
23a20 68 65 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69  heck if the SQLi
23a30 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  te interop assem
23a40 62 6c 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65  bly is available
23a50 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
23a60 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
23a70 4c 69 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74  LiteInterop $::t 23a80 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 23a90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 23aa0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 23ab0 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 the SQLite datab 23ac0 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 ase and temporar 23ad0 79 20 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a y directories... 23ae0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 23af0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 23b00 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a eDirectories$::
23b10 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a  test_channel....
23b20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
23b30 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
23b40 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  pt to determine
23b50 69 66 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69  if various compi
23b60 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options
23b70 6e 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20  needed for..
23b80 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74      #       test
23b90 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72   constraints wer
23ba0 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68  e enabled for th
23bb0 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  e managed assemb
23bc0 6c 79 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 20  ly.  There..
23bd0 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20      #       are
23be0 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  some compile-tim
23bf0 65 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 6d  e options that m
23c00 75 73 74 20 61 6c 73 6f 20 68 61 76 65 20 62 65  ust also have be
23c10 65 6e 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20  en enabled..
23c20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20      #       for
23c30 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65  the interop asse
23c40 6d 62 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  mbly in order to
23c50 20 62 65 20 65 66 66 65 63 74 69 76 65 2e 20 20   be effective.
23c60 46 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20  For those..
23c70 20 20 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f     #       optio
23c80 6e 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 61  ns, it will be a
23c90 73 73 75 6d 65 64 20 74 68 61 74 20 69 74 20 77  ssumed that it w
23ca0 61 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74  as enabled for t
23cb0 68 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20  he interop..
23cc0 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65      #       asse
23cd0 6d 62 6c 79 20 69 66 20 69 74 20 77 61 73 20 65  mbly if it was e
23ce0 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d  nabled for the m
23cf0 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e  anaged assembly.
23d00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
23d10 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 65 66       foreach def
23d20 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73  ineConstant [lis
23d30 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
23d40 20 43 48 45 43 4b 5f 53 54 41 54 45 20 43 4f 55   CHECK_STATE COU
23d50 4e 54 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 20  NT_HANDLE DEBUG
23d60 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e  INTEROP_CODEC IN
23d70 54 45 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20  TEROP_DEBUG \..
23d80 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52             INTER
23d90 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e  OP_EXTENSION_FUN
23da0 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46  CTIONS INTEROP_F
23db0 54 53 35 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d  TS5_EXTENSION \.
23dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54  .            INT
23dd0 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52  EROP_INCLUDE_CER
23de0 4f 44 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55  OD INTEROP_INCLU
23df0 44 45 5f 45 58 54 52 41 20 49 4e 54 45 52 4f 50  DE_EXTRA INTEROP
23e00 5f 49 4e 43 4c 55 44 45 5f 53 45 45 20 5c 0d 0a  _INCLUDE_SEE \..
23e10 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45              INTE
23e20 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56  ROP_INCLUDE_ZIPV
23e30 46 53 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31  FS INTEROP_JSON1
23e40 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20  _EXTENSION \..
23e50 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f            INTERO
23e60 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20 49  P_LEGACY_CLOSE I
23e70 4e 54 45 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52  NTEROP_LOG INTER
23e80 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 58  OP_PERCENTILE_EX
23e90 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  TENSION \..
23ea0 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 52         INTEROP_R
23eb0 45 47 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20  EGEXP_EXTENSION
23ec0 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54  INTEROP_TEST_EXT
23ed0 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20  ENSION \..
23ee0 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f        INTEROP_TO
23ef0 54 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49  TYPE_EXTENSION I
23f00 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
23f10 41 42 4c 45 20 4e 45 54 5f 32 30 20 4e 45 54 5f  ABLE NET_20 NET_
23f20 33 35 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  35 \..
23f30 20 20 4e 45 54 5f 34 30 20 4e 45 54 5f 34 35 20    NET_40 NET_45
23f40 4e 45 54 5f 34 35 31 20 4e 45 54 5f 34 35 32 20  NET_451 NET_452
23f50 4e 45 54 5f 34 36 20 4e 45 54 5f 34 36 31 20 4e  NET_46 NET_461 N
23f60 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 5c 0d  ET_COMPACT_20 \.
23f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 4c 41  .            PLA
23f80 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
23f90 4d 45 57 4f 52 4b 20 50 52 45 4c 4f 41 44 5f 4e  MEWORK PRELOAD_N
23fa0 41 54 49 56 45 5f 4c 49 42 52 41 52 59 20 52 45  ATIVE_LIBRARY RE
23fb0 54 41 52 47 45 54 41 42 4c 45 20 5c 0d 0a 20 20  TARGETABLE \..
23fc0 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
23fd0 5f 53 54 41 4e 44 41 52 44 20 54 48 52 4f 57 5f  _STANDARD THROW_
23fe0 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54 52 41 43  ON_DISPOSED TRAC
23ff0 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  E TRACE_CONNECTI
24000 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ON \..
24010 20 20 54 52 41 43 45 5f 44 45 54 45 43 54 49 4f    TRACE_DETECTIO
24020 4e 20 54 52 41 43 45 5f 48 41 4e 44 4c 45 20 54  N TRACE_HANDLE T
24030 52 41 43 45 5f 50 52 45 4c 4f 41 44 20 54 52 41  RACE_PRELOAD TRA
24040 43 45 5f 53 48 41 52 45 44 20 5c 0d 0a 20 20 20  CE_SHARED \..
24050 20 20 20 20 20 20 20 20 20 54 52 41 43 45 5f 53           TRACE_S
24060 54 41 54 45 4d 45 4e 54 20 54 52 41 43 45 5f 57  TATEMENT TRACE_W
24070 41 52 4e 49 4e 47 20 54 52 41 43 4b 5f 4d 45 4d  ARNING TRACK_MEM
24080 4f 52 59 5f 42 59 54 45 53 20 5c 0d 0a 20 20 20  ORY_BYTES \..
24090 20 20 20 20 20 20 20 20 20 55 53 45 5f 45 4e 54           USE_ENT
240a0 49 54 59 5f 46 52 41 4d 45 57 4f 52 4b 5f 36 20  ITY_FRAMEWORK_6
240b0 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20  USE_INTEROP_DLL
240c0 55 53 45 5f 50 52 45 50 41 52 45 5f 56 32 20 57  USE_PREPARE_V2 W
240d0 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 20 20 20  INDOWS] {..
240e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
240f0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
24100 69 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74  if the compile-t
24110 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69  ime option is li
24120 73 74 65 64 20 69 6e 20 74 68 65 20 6c 69 73 74  sted in the list
24130 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 23   of..          #
24140 20 20 20 20 20 20 20 22 64 65 66 69 6e 65 20 63         "define c
24150 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70 74 20 74  onstants" kept t
24160 72 61 63 6b 20 6f 66 20 62 79 20 74 68 65 20 6d  rack of by the m
24170 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e  anaged assembly.
24180 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
24190 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
241a0 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e  rSQLiteDefineCon
241b0 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68  stant $::test_ch 241c0 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65 43 6f 6e annel$defineCon
241d0 73 74 61 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d  stant..        }
241e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
241f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
24200 68 65 63 6b 20 69 66 20 74 68 65 20 53 79 73 74  heck if the Syst
24210 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 70  em.Data.SQLite p
24220 72 6f 76 69 64 65 72 20 77 61 73 20 63 6f 6d 70  rovider was comp
24230 69 6c 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20  iled with..
24240 20 20 20 23 20 20 20 20 20 20 20 73 75 70 70 6f     #       suppo
24250 72 74 20 66 6f 72 20 61 6e 79 20 65 6e 63 72 79  rt for any encry
24260 70 74 65 64 20 64 61 74 61 62 61 73 65 73 2e 0d  pted databases..
24270 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
24280 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
24290 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  iteDefineConstan
242a0 74 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 5d  t INTEROP_CODEC]
242b0 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
242c0 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65     [haveSQLiteDe
242d0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54  fineConstant INT
242e0 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45  EROP_INCLUDE_SEE
242f0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
24300 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
24310 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 61    # NOTE: Yes, a
24320 64 64 20 67 65 6e 65 72 69 63 20 63 6f 6e 73 74  dd generic const
24330 72 61 69 6e 74 20 66 6f 72 20 75 73 65 20 62 79  raint for use by
24340 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e   the test suite.
24350 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
24360 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73           addCons
24370 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61  traint System.Da
24380 74 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79 70  ta.SQLite.Encryp
24390 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  tion..        }.
243a0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
243b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
243c0 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  eck the current
243d0 62 75 69 6c 64 20 79 65 61 72 2e 20 20 42 61 73  build year.  Bas
243e0 69 63 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 64  ically, this ind
243f0 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20  icates..
24400 23 20 20 20 20 20 20 20 77 68 69 63 68 20 76 65  #       which ve
24410 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64  rsion of MSBuild
24420 20 61 6e 64 2f 6f 72 20 56 69 73 75 61 6c 20 53   and/or Visual S
24430 74 75 64 69 6f 20 77 61 73 20 75 73 65 64 20 74  tudio was used t
24440 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  o..        #
24450 20 20 20 63 6f 6d 70 69 6c 65 20 74 68 65 20 61     compile the a
24460 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73  ssembly binaries
24470 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20   under test...
24480 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
24490 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 244a0 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 244b0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec 244c0 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. 244d0 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c Data.SQLite buil 244e0 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 d year... ".... 244f0 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20 set year 24500 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a [getBuildYear].. 24510 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 24520 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 24530 73 20 62 75 69 6c 64 59 65 61 72 2e 20 24 79 65 s buildYear.$ye
24540 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75  ar]..        tpu
24550 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 24560 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 24570 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d "$year \"\n]...
24580 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
24590 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
245a0 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75  k the current bu
245b0 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ild .NET Framewo
245c0 72 6b 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20  rk.  Basically,
245d0 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20  this..        #
245e0 20 20 20 20 20 20 69 6e 64 69 63 61 74 65 73 20        indicates
245f0 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66  which version of
24600 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77   the .NET Framew
24610 6f 72 6b 20 69 73 20 62 65 69 6e 67 0d 0a 20 20  ork is being..
24620 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73        #       us
24630 65 64 20 62 79 20 74 68 65 20 61 73 73 65 6d 62  ed by the assemb
24640 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65  ly binaries unde
24650 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 20  r test...
24660 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   #..        tput
24670 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 24680 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 24690 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking 246a0 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e for System.Data. 246b0 53 51 4c 69 74 65 20 62 75 69 6c 64 20 2e 4e 45 SQLite build .NE 246c0 54 20 46 72 61 6d 65 77 6f 72 6b 2e 2e 2e 20 22 T Framework... " 246d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 246e0 6e 65 74 46 78 20 5b 67 65 74 42 75 69 6c 64 4e netFx [getBuildN 246f0 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 61 etFx].. a 24700 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 ddConstraint [ap 24710 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 46 72 pendArgs buildFr 24720 61 6d 65 77 6f 72 6b 2e 20 24 6e 65 74 46 78 5d amework.$netFx]
24730 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
24740 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 24750 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
24760 6e 65 74 46 78 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20  netFx \"\n]....
24770 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
24780 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
24790 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c  the current buil
247a0 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  d configuration.
247b0 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 6e 6f    This should no
247c0 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  rmally..
247d0 23 20 20 20 20 20 20 20 62 65 20 65 69 74 68 65  #       be eithe
247e0 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65  r "Debug" or "Re
247f0 6c 65 61 73 65 22 2e 0d 0a 20 20 20 20 20 20 20  lease"...
24800 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   #..        tput
24810 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 24820 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 24830 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking 24840 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e for System.Data. 24850 53 51 4c 69 74 65 20 62 75 69 6c 64 20 63 6f 6e SQLite build con 24860 66 69 67 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 0d figuration... ". 24870 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 ... set c 24880 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 onfiguration [ge 24890 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 tBuildConfigurat 248a0 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 ion].. ad 248b0 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 dConstraint [app 248c0 65 6e 64 41 72 67 73 20 62 75 69 6c 64 43 6f 6e endArgs buildCon 248d0 66 69 67 75 72 61 74 69 6f 6e 2e 20 24 63 6f 6e figuration.$con
248e0 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20  figuration]..
248f0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 24900 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 24910 6e 64 41 72 67 73 20 5c 22 20 24 63 6f 6e 66 69 ndArgs \"$confi
24920 67 75 72 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a  guration \"\n]..
24930 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
24940 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 72 79       # NOTE: Try
24950 20 74 6f 20 73 65 74 75 70 20 61 6e 20 69 6e 74   to setup an int
24960 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 20  errupt callback
24970 75 73 69 6e 67 20 74 68 65 20 73 63 72 69 70 74  using the script
24980 20 64 65 62 75 67 67 65 72 0d 0a 20 20 20 20 20   debugger..
24990 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20     #       that
249a0 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61 6c 6c 20  will cancel all
249b0 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70  SQL queries in p
249c0 72 6f 67 72 65 73 73 20 66 6f 72 20 61 6c 6c 20  rogress for all
249d0 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..
249e0 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63    #       connec
249f0 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74  tions known to t
24a00 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 2e  his interpreter.
24a10 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
24a20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
24a30 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69  exists ::no(sqli
24a40 74 65 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62  teInterruptCallb
24a50 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ack)]} then {..
24a60 20 20 20 20 20 20 20 20 20 73 65 74 75 70 44 62           setupDb
24a70 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63  InterruptCallbac
24a80 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  k $::test_channe 24a90 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20 l$::test_log..
24aa0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
24ab0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
24ac0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72   NOTE: Check for
24ad0 20 74 68 65 20 6e 61 74 69 76 65 20 72 75 6e 74   the native runt
24ae0 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 68 69 63  ime option, whic
24af0 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20 77 65 20  h would mean we
24b00 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  are..        #
24b10 20 20 20 20 20 75 73 69 6e 67 20 74 68 65 20 6d       using the m
24b20 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
24b30 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ly...        #..
24b40 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
24b50 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a  RuntimeOption $: 24b60 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 61 :test_channel na 24b70 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 tive.... 24b80 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 24b90 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 E: Check if the 24ba0 74 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c test suite shoul 24bb0 64 20 63 6f 75 6e 74 20 74 68 65 20 6e 75 6d 62 d count the numb 24bc0 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e er of connection 24bd0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 24be0 20 20 20 22 6f 70 65 6e 65 64 22 20 61 6e 64 20 "opened" and 24bf0 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d 20 74 68 "closed" from th 24c00 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64 65 74 65 e pool when dete 24c10 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 74 65 73 rmining if a tes 24c20 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 24c30 20 20 20 70 61 73 73 65 64 2e 20 20 44 69 73 61 passed. Disa 24c40 62 6c 69 6e 67 20 74 68 69 73 20 62 65 68 61 76 bling this behav 24c50 69 6f 72 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 ior is sometimes 24c60 20 6e 65 63 65 73 73 61 72 79 20 28 65 2e 67 2e necessary (e.g. 24c70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 24c80 20 20 64 75 72 69 6e 67 20 74 68 65 20 72 65 6c during the rel 24c90 65 61 73 65 20 74 65 73 74 69 6e 67 20 70 72 6f ease testing pro 24ca0 63 65 73 73 29 20 62 65 63 61 75 73 65 20 74 68 cess) because th 24cb0 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 0d ere are several. 24cc0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 24cd0 20 74 65 73 74 73 20 74 68 61 74 20 72 65 6c 79 tests that rely 24ce0 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e 65 64 20 on the "opened 24cf0 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e 74 from pool" count 24d00 20 62 65 69 6e 67 20 67 72 65 61 74 65 72 0d 0a being greater.. 24d10 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 24d20 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54 68 65 73 than zero. Thes 24d30 65 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c e tests may fail 24d40 20 64 75 65 20 74 6f 20 74 68 65 20 6e 6f 6e 2d due to the non- 24d50 64 65 74 65 72 6d 69 6e 69 73 74 69 63 0d 0a 20 deterministic.. 24d60 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 24d70 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 43 ehavior of the C 24d80 4c 52 20 47 43 2c 20 65 76 65 6e 20 77 68 65 6e LR GC, even when 24d90 20 74 68 65 72 65 20 69 73 20 6e 6f 20 62 75 67 there is no bug 24da0 20 69 6e 20 74 68 65 20 63 6f 64 65 0d 0a 20 20 in the code.. 24db0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 # be 24dc0 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a 20 20 20 ing tested... 24dd0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 24de0 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f checkForRuntimeO 24df0 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 ption$::test_ch
24e00 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75 6e  annel noPoolCoun
24e10 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  ts....        #.
24e20 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
24e30 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 74 65   Check if the te
24e40 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c 64 20  st suite should
24e50 75 73 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  use shared-cache
24e60 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20   mode...
24e70 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  #..        check
24e80 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  ForRuntimeOption
24e90 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 24ea0 20 73 68 61 72 65 64 43 61 63 68 65 0d 0a 0d 0a sharedCache.... 24eb0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 24ec0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 # NOTE: Repor 24ed0 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 t the resource u 24ee0 73 61 67 65 20 70 72 69 6f 72 20 74 6f 20 72 75 sage prior to ru 24ef0 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73 74 73 2e nning any tests. 24f00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 24f10 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74 reportSQLit 24f20 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 eResources$::te
24f30 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
24f40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
24f50 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68   # NOTE: Grab th
24f60 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65  e list of native
24f70 20 6d 6f 64 75 6c 65 73 20 66 6f 72 20 74 68 65   modules for the
24f80 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
24f90 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20   and..        #
24fa0 20 20 20 20 20 20 72 65 70 6f 72 74 20 6f 6e 20        report on
24fb0 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
24fc0 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 6f  SQLite related o
24fd0 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  nes...        #.
24fe0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
24ff0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
25000 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  mmand]} then {..
25010 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 6f            set mo
25020 64 75 6c 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e  dules [object in
25030 76 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  voke \..
25040 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61        System.Dia
25050 67 6e 6f 73 74 69 63 73 2e 50 72 6f 63 65 73 73  gnostics.Process
25060 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65  .GetCurrentProce
25070 73 73 20 4d 6f 64 75 6c 65 73 5d 0d 0a 0d 0a 20  ss Modules]....
25080 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
25090 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 6d  foreach -alias m
250a0 6f 64 75 6c 65 20 24 6d 6f 64 75 6c 65 73 20 7b  odule $modules { 250b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 250c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 250d0 4f 54 45 3a 20 54 68 65 20 6d 6f 64 75 6c 65 20 OTE: The module 250e0 66 69 6c 65 20 6e 61 6d 65 20 68 65 72 65 20 6d file name here m 250f0 75 73 74 20 62 65 20 6e 6f 72 6d 61 6c 69 7a 65 ust be normalize 25100 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 d... 25110 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 #.. s 25120 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c et fileName [fil 25130 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 24 6d 6f e normalize [$mo
25140 64 75 6c 65 20 46 69 6c 65 4e 61 6d 65 5d 5d 0d  dule FileName]].
25150 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
25160 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 66   fileNameOnly [f
25170 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa 25180 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 me].... 25190 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 if {[lsearch 251a0 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 2d -exact -nocase - 251b0 2d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 - \.. 251c0 20 20 20 20 20 5b 67 65 74 4e 61 74 69 76 65 4c [getNativeL 251d0 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f ibraryFileNamesO 251e0 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e nly]$fileNameOn
251f0 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20  ly] != -1} then
25200 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
25210 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 25220 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 25230 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 25240 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f "---- fo 25250 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c 69 74 und loaded SQLit 25260 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library 25270 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 module: " \.. 25280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25290 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20$fileName \n]..
252a0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
252b0 65 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65  eif {[lsearch -e
252c0 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 2d 2d 20  xact -nocase --
252d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
252e0 20 20 20 5b 67 65 74 49 6e 74 65 72 6f 70 41 73     [getInteropAs
252f0 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f  semblyFileNamesO
25300 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  nly] $fileNameOn 25310 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 ly] != -1} then 25320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 25330 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
25340 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
25350 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
25360 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f          "---- fo
25370 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c 69 74  und loaded SQLit
25380 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
25390 6c 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a  ly module: " \..
253a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
253b0 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d    $fileName \n]. 253c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 253d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 253e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 253f0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 25400 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
25410 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
25420 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
25430 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  - compile-time o
25440 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74  ptions for SQLit
25450 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 2e  e core library..
25460 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  . "....
25470 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
25480 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
25490 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
254a0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
254b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
254c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
254d0 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 65 43  .SQLite3 SQLiteC
254e0 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20  ompileOptions..
254f0 20 20 20 20 20 20 20 20 20 7d 20 63 6f 6d 70 69           } compi
25500 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d  leOptions] == 0}
25510 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
25520 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 25530 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 25540 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 ndArgs [formatLi 25550 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 st [lsort \.. 25560 20 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f$co
25570 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e  mpileOptions] <n
25580 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  one>] \n]..
25590 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
255a0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
255b0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 255c0 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 unknown\n.. 255d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 255e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 }.... ca 255f0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 25600 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
25610 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
25620 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f          "---- co
25630 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
25640 6e 73 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e  ns for SQLite in
25650 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e  terop assembly..
25660 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  . "....
25670 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
25680 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
25690 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
256a0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
256b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
256c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
256d0 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 6f 70  .SQLite3 Interop
256e0 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a  CompileOptions..
256f0 20 20 20 20 20 20 20 20 20 20 7d 20 63 6f 6d 70            } comp
25700 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30  ileOptions] == 0
25710 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
25720 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 25730 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 25740 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c endArgs [formatL 25750 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 ist [lsort \.. 25760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 63$c
25770 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c  ompileOptions] <
25780 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20  none>] \n]..
25790 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
257a0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
257b0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 257c0 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 l unknown\n.. 257d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 257e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # 257f0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 25800 3a 20 53 68 6f 77 20 74 68 65 20 61 63 74 69 76 : Show the activ 25810 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e e test constrain 25820 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ts... #.. 25830 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
25840 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
25850 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20  ppendArgs "----
25860 63 6f 6e 73 74 72 61 69 6e 74 73 3a 20 22 20 5c  constraints: " \
25870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
25880 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74  ormatList [lsort
25890 20 5b 67 65 74 43 6f 6e 73 74 72 61 69 6e 74 73   [getConstraints
258a0 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a  ]] <none>] \n]..
258b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
258c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 61 76       # NOTE: Sav
258d0 65 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73 74  e the test const
258e0 72 61 69 6e 74 73 20 66 6f 72 20 75 73 65 20 62  raints for use b
258f0 79 20 74 68 72 65 61 64 73 20 63 72 65 61 74 65  y threads create
25900 64 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 20  d in this..
25910 20 20 20 23 20 20 20 20 20 20 20 61 70 70 6c 69     #       appli
25920 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2e 20 20  cation domain.
25930 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72  This is necessar
25940 79 20 62 65 63 61 75 73 65 20 61 6c 6c 20 74 68  y because all th
25950 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20  e Eagle..
25960 20 23 20 20 20 20 20 20 20 22 74 65 73 74 20 63   #       "test c
25970 6f 6e 74 65 78 74 22 20 69 6e 66 6f 72 6d 61 74  ontext" informat
25980 69 6f 6e 20 69 73 20 70 65 72 2d 74 68 72 65 61  ion is per-threa
25990 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #..
259a0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
259b0 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
259c0 63 6f 6e 73 74 72 61 69 6e 74 73 5d 7d 20 74 68  constraints]} th
259d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
259e0 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74  set ::test_const
259f0 72 61 69 6e 74 73 20 24 3a 3a 65 61 67 6c 65 5f  raints $::eagle_ 25a00 74 65 73 74 73 28 63 6f 6e 73 74 72 61 69 6e 74 tests(constraint 25a10 73 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d s).. }... 25a20 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 25a30 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 # NOTE: Load 25a40 20 74 68 65 20 22 61 66 74 65 72 2d 63 6f 6e 73 the "after-cons 25a50 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 traints" custom 25a60 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 per-user and/or 25a70 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 per-host.. 25a80 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 # test s 25a90 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 ettings now... 25aa0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 25ab0 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 25ac0 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 loadSQLiteTestS 25ad0 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f ettings$::test_
25ae0 63 68 61 6e 6e 65 6c 20 2e 61 66 74 65 72 5d 0d  channel .after].
25af0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
25b00 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
25b10 20 6e 65 63 65 73 73 61 72 79 2c 20 65 6e 61 62   necessary, enab
25b20 6c 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  le shared-cache
25b30 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  mode now...
25b40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
25b50 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74   {[hasRuntimeOpt
25b60 69 6f 6e 20 73 68 61 72 65 64 43 61 63 68 65 5d  ion sharedCache]
25b70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
25b80 20 20 20 20 65 6e 61 62 6c 65 53 68 61 72 65 64      enableShared
25b90 43 61 63 68 65 20 24 3a 3a 74 65 73 74 5f 63 68  Cache $::test_ch 25ba0 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 annel true.. 25bb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 25bc0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 25bd0 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 TE: Show when ou 25be0 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 r tests actually 25bf0 20 62 65 67 61 6e 20 28 6e 6f 77 29 2e 0d 0a 20 began (now)... 25c00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 25c10 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
25c20 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
25c30 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
25c40 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e     "---- System.
25c50 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74  Data.SQLite test
25c60 73 20 62 65 67 61 6e 20 61 74 20 22 20 5c 0d 0a  s began at " \..
25c70 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f              [clo
25c80 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b  ck format [clock
25c90 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a   seconds]] \n]..
25ca0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
25cb0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53  ...    proc runS
25cc0 51 4c 69 74 65 54 65 73 74 46 69 6c 65 73 50 72  QLiteTestFilesPr
25cd0 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20  ologue {} {..
25ce0 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a     uplevel 1 {..
25cf0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
25d00 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75 70     # NOTE: Setup
25d10 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 20 74   the variables t
25d20 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
25d30 20 76 61 72 69 6f 75 73 20 6e 6f 6e 2d 64 61 74   various non-dat
25d40 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 20  a files..
25d50 20 23 20 20 20 20 20 20 20 72 65 71 75 69 72 65   #       require
25d60 64 20 62 79 20 74 68 65 20 74 65 73 74 73 20 69  d by the tests i
25d70 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20  n this file...
25d80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
25d90 20 73 65 74 20 65 6e 74 69 74 79 46 72 61 6d 65   set entityFrame
25da0 77 6f 72 6b 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20  workDllFile \..
25db0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
25dc0 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 45 6e 74  uildFileName Ent
25dd0 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c  ityFramework.dll
25de0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
25df0 20 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c   installerExeFil
25e00 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  e [getBuildFileN
25e10 61 6d 65 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78  ame Installer.ex
25e20 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  e]..        set
25e30 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c  sqliteDesignerDl
25e40 6c 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46  lFile [getBuildF
25e50 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 44  ileName SQLite.D
25e60 65 73 69 67 6e 65 72 2e 64 6c 6c 5d 0d 0a 0d 0a  esigner.dll]....
25e70 20 20 20 20 20 20 20 20 73 65 74 20 73 79 73 74          set syst
25e80 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46  emDataSQLiteDllF
25e90 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ile \..
25ea0 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65     [getBuildFile
25eb0 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Name System.Data
25ec0 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a  .SQLite.dll]....
25ed0 20 20 20 20 20 20 20 20 73 65 74 20 73 79 73 74          set syst
25ee0 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71  emDataSQLiteLinq
25ef0 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  DllFile \..
25f00 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64         [getBuild
25f10 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e  FileName System.
25f20 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
25f30 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .dll]....
25f40 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61 53   set systemDataS
25f50 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 20  QLiteEf6DllFile
25f60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
25f70 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
25f80 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
25f90 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a  ite.EF6.dll]....
25fa0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
25fb0 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c  ExeFile [getBuil
25fc0 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 2e 65  dFileName test.e
25fd0 78 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74  xe]..        set
25fe0 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65   testLinqExeFile
25ff0 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
26000 6d 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 5d  me testlinq.exe]
26010 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
26020 73 74 45 66 36 45 78 65 46 69 6c 65 20 5b 67 65  stEf6ExeFile [ge
26030 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74  tBuildFileName t
26040 65 73 74 65 66 36 2e 65 78 65 5d 0d 0a 0d 0a 20  estef6.exe]....
26050 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
26060 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75 70 20    # NOTE: Setup
26070 74 68 65 20 76 61 72 69 61 62 6c 65 73 20 74 68  the variables th
26080 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  at refer to the
26090 76 61 72 69 6f 75 73 20 64 61 74 61 20 66 69 6c  various data fil
260a0 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  es..        #
260b0 20 20 20 20 72 65 71 75 69 72 65 64 20 62 79 20      required by
260c0 74 68 65 20 74 65 73 74 73 20 69 6e 20 74 68 69  the tests in thi
260d0 73 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  s file...
260e0 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
260f0 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20  testLinqOutFile
26100 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
26110 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
26120 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53             [getS
26130 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74  QLiteTestDataPat
26140 68 5d 20 74 65 73 74 6c 69 6e 71 2e 6f 75 74 5d  h] testlinq.out]
26150 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
26160 20 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69   northwindEfDbFi
26170 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
26180 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
26190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
261a0 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c  ile dirname [fil
261b0 65 20 64 69 72 6e 61 6d 65 20 5b 67 65 74 53 51  e dirname [getSQ
261c0 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
261d0 5d 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ]]] \..
261e0 20 20 20 74 65 73 74 6c 69 6e 71 20 6e 6f 72 74     testlinq nort
261f0 68 77 69 6e 64 45 46 2e 64 62 5d 5d 0d 0a 0d 0a  hwindEF.db]]....
26200 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 6e 57          set nonW
26210 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e  alDbFile [file n
26220 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
26230 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
26240 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
26250 73 74 44 61 74 61 50 61 74 68 5d 20 6e 6f 6e 57  stDataPath] nonW
26260 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20  al.db]]....
26270 20 20 20 73 65 74 20 77 61 6c 44 62 46 69 6c 65     set walDbFile
26280 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
26290 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
262a0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
262b0 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
262c0 74 68 5d 20 77 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a  th] wal.db]]....
262d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
262e0 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 76     # NOTE: The v
262f0 61 72 69 6f 75 73 20 69 6e 73 74 61 6c 6c 2f 75  arious install/u
26300 6e 69 6e 73 74 61 6c 6c 20 6c 6f 67 20 66 69 6c  ninstall log fil
26310 65 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20  es used to test
26320 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
26330 20 20 20 20 20 64 65 73 69 67 6e 2d 74 69 6d 65       design-time
26340 20 63 6f 6d 70 6f 6e 65 6e 74 20 69 6e 73 74 61   component insta
26350 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23  ller...        #
26360 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
26370 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c  stInstallVs2005L
26380 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
26390 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
263a0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
263b0 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
263c0 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c  DataPath] Instal
263d0 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30 35 2e  ler_Test_Vs2005.
263e0 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
263f0 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c   set testInstall
26400 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66  Vs2008LogFile [f
26410 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
26420 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
26430 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
26440 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
26450 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f   Installer_Test_
26460 56 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a  Vs2008.log]]....
26470 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
26480 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67  InstallVs2010Log
26490 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
264a0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
264b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
264c0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
264d0 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65  taPath] Installe
264e0 72 5f 54 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f  r_Test_Vs2010.lo
264f0 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  g]]....        s
26500 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  et testInstallVs
26510 32 30 31 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c  2012LogFile [fil
26520 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
26530 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
26540 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
26550 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49  eTestDataPath] I
26560 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
26570 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2012.log]]....
26580 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e        set testIn
26590 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69  stallVs2013LogFi
265a0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
265b0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
265c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
265d0 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
265e0 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f  Path] Installer_
265f0 54 65 73 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d  Test_Vs2013.log]
26600 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
26610 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
26620 31 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20  15LogFile [file
26630 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
26640 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
26650 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
26660 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73  estDataPath] Ins
26670 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30  taller_Test_Vs20
26680 31 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20  15.log]]....
26690 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e      set testUnin
266a0 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69  stallVs2005LogFi
266b0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
266c0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
266d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
266e0 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
266f0 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65  Path] Uninstalle
26700 72 5f 54 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f  r_Test_Vs2005.lo
26710 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  g]]....        s
26720 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c  et testUninstall
26730 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66  Vs2008LogFile [f
26740 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
26750 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
26760 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
26770 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
26780 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73   Uninstaller_Tes
26790 74 5f 56 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a  t_Vs2008.log]]..
267a0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
267b0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
267c0 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  0LogFile [file n
267d0 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
267e0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
267f0 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
26800 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e  stDataPath] Unin
26810 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
26820 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  010.log]]....
26830 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69       set testUni
26840 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46  nstallVs2012LogF
26850 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
26860 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
26870 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
26880 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
26890 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c  aPath] Uninstall
268a0 65 72 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c  er_Test_Vs2012.l
268b0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
268c0 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c  set testUninstal
268d0 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b  lVs2013LogFile [
268e0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
268f0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
26900 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51            [getSQ
26910 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
26920 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65  ] Uninstaller_Te
26930 73 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d  st_Vs2013.log]].
26940 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  ...        set t
26950 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
26960 31 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20  15LogFile [file
26970 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
26980 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
26990 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
269a0 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69  estDataPath] Uni
269b0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
269c0 32 30 31 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2015.log]]....
269d0 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23        ##########
269e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
269f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26a00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
26a10 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d  #############...
26a20 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
26a30 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
26a40 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
26a50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
26a60 66 69 6c 65 20 74 61 69 6c 20 24 65 6e 74 69 74  file tail $entit 26a70 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c yFrameworkDllFil 26a80 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 26a90 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 26aa0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
26ab0 65 6c 20 24 65 6e 74 69 74 79 46 72 61 6d 65 77  el $entityFramew 26ac0 6f 72 6b 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 orkDllFile.. 26ad0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 26ae0 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 if {![haveConst 26af0 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 26b00 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 s file_ \.. 26b10 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 [file tai 26b20 6c 20 24 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 l$installerExeF
26b30 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ile]]]} then {..
26b40 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
26b50 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 26b60 6e 6e 65 6c 20 24 69 6e 73 74 61 6c 6c 65 72 45 nnel$installerE
26b70 78 65 46 69 6c 65 20 49 6e 73 74 61 6c 6c 65 72  xeFile Installer
26b80 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  .exe..        }.
26b90 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
26ba0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
26bb0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
26bc0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
26bd0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 71 6c   [file tail $sql 26be0 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 iteDesignerDllFi 26bf0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 26c00 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 26c10 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
26c20 6e 65 6c 20 24 73 71 6c 69 74 65 44 65 73 69 67  nel $sqliteDesig 26c30 6e 65 72 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 nerDllFile.. 26c40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 26c50 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 if {![haveConst 26c60 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 26c70 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 s file_ \.. 26c80 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 [file tai 26c90 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c l$systemDataSQL
26ca0 69 74 65 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74  iteDllFile]]]} t
26cb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
26cc0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 26cd0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79 73 est_channel$sys
26ce0 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
26cf0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
26d00 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
26d10 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
26d20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
26d30 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
26d40 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 73   [file tail $sys 26d50 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e temDataSQLiteLin 26d60 71 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 qDllFile]]]} the 26d70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 26d80 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
26d90 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79 73 74 65  t_channel $syste 26da0 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 mDataSQLiteLinqD 26db0 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 llFile.. 26dc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 26dd0 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 26de0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 26df0 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 26e00 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 [file tail$s
26e10 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45  ystemDataSQLiteE
26e20 66 36 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68  f6DllFile]]]} th
26e30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
26e40 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 26e50 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 79 73 74 st_channel$syst
26e60 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44  emDataSQLiteEf6D
26e70 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  llFile..
26e80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
26e90 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
26ea0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
26eb0 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
26ec0 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74     [file tail $t 26ed0 65 73 74 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 estExeFile]]]} t 26ee0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 26ef0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
26f00 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 26f10 74 45 78 65 46 69 6c 65 20 74 65 73 74 2e 65 78 tExeFile test.ex 26f20 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 26f30 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 26f40 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 26f50 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 26f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 26f70 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 4c 69 ile tail$testLi
26f80 6e 71 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68  nqExeFile]]]} th
26f90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
26fa0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 26fb0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 st_channel$test
26fc0 4c 69 6e 71 45 78 65 46 69 6c 65 20 74 65 73 74  LinqExeFile test
26fd0 6c 69 6e 71 2e 65 78 65 0d 0a 20 20 20 20 20 20  linq.exe..
26fe0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
26ff0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
27000 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
27010 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
27020 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
27030 24 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 5d  $testEf6ExeFile] 27040 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 27050 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 27060 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
27070 20 24 74 65 73 74 45 66 36 45 78 65 46 69 6c 65   $testEf6ExeFile 27080 20 74 65 73 74 65 66 36 2e 65 78 65 0d 0a 20 20 testef6.exe.. 27090 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 270a0 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 270b0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 270c0 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 270d0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 270e0 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 4f 75 74 ail$testLinqOut
270f0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
27100 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
27110 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 27120 61 6e 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71 4f annel$testLinqO
27130 75 74 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  utFile..
27140 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
27150 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
27160 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
27170 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
27180 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e     [file tail $n 27190 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 orthwindEfDbFile 271a0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 271b0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 271c0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
271d0 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 62  l $northwindEfDb 271e0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 271f0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 27200 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 27210 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 27220 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 27230 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f 6e [file tail$non
27240 57 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68  WalDbFile]]]} th
27250 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
27260 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 27270 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 6e 57 st_channel$nonW
27280 61 6c 44 62 46 69 6c 65 0d 0a 20 20 20 20 20 20  alDbFile..
27290 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
272a0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
272b0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
272c0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
272d0 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
272e0 24 77 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d 20 74  $walDbFile]]]} t 272f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 27300 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
27310 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 77 61 6c  est_channel $wal 27320 44 62 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 DbFile.. 27330 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 27340 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 27350 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 27360 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 27370 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 [file tail$t
27380 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 35  estInstallVs2005
27390 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  LogFile]]]} then
273a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
273b0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 273c0 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e _channel$testIn
273d0 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69  stallVs2005LogFi
273e0 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  le..        }...
273f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
27400 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
27410 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
27420 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
27430 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49  file tail $testI 27440 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 nstallVs2008LogF 27450 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 27460 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 27470 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
27480 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  nnel $testInstal 27490 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 0d 0a lVs2008LogFile.. 274a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 274b0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 274c0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 274d0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 274e0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 274f0 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 tail$testInsta
27500 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d  llVs2010LogFile]
27510 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
27520 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
27530 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 27540 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
27550 30 31 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20  010LogFile..
27560 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
27570 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74   if {![haveConst
27580 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
27590 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20  s file_ \..
275a0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
275b0 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 275c0 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 2012LogFile]]]} 275d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 275e0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
275f0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te 27600 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c stInstallVs2012L 27610 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 ogFile.. 27620 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 27630 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 27640 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 27650 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 27660 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 [file tail$t
27670 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33  estInstallVs2013
27680 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  LogFile]]]} then
27690 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
276a0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 276b0 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e _channel$testIn
276c0 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69  stallVs2013LogFi
276d0 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  le..        }...
276e0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
276f0 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
27700 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
27710 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
27720 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49  file tail $testI 27730 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 nstallVs2015LogF 27740 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 27750 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 27760 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
27770 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  nnel $testInstal 27780 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 0d 0a lVs2015LogFile.. 27790 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 277a0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 277b0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 277c0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 277d0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 277e0 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 tail$testUnins
277f0 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c  tallVs2005LogFil
27800 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
27810 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
27820 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 27830 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c el$testUninstal
27840 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a  lVs2005LogFile..
27850 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
27860 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43       if {![haveC
27870 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
27880 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20  dArgs file_ \..
27890 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
278a0 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73   tail $testUnins 278b0 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c tallVs2008LogFil 278c0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 278d0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 278e0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
278f0 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  el $testUninstal 27900 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 0d 0a lVs2008LogFile.. 27910 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 27920 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 27930 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 27940 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 27950 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 27960 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 tail$testUnins
27970 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c  tallVs2010LogFil
27980 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
27990 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
279a0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 279b0 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c el$testUninstal
279c0 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 0d 0a  lVs2010LogFile..
279d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
279e0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43       if {![haveC
279f0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
27a00 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20  dArgs file_ \..
27a10 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
27a20 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73   tail $testUnins 27a30 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c tallVs2012LogFil 27a40 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 27a50 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 27a60 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
27a70 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  el $testUninstal 27a80 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a lVs2012LogFile.. 27a90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 27aa0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 27ab0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 27ac0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 27ad0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 27ae0 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 tail$testUnins
27af0 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c  tallVs2013LogFil
27b00 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
27b10 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
27b20 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 27b30 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c el$testUninstal
27b40 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a  lVs2013LogFile..
27b50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
27b60 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43       if {![haveC
27b70 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
27b80 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20  dArgs file_ \..
27b90 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
27ba0 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73   tail $testUnins 27bb0 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c tallVs2015LogFil 27bc0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 27bd0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 27be0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
27bf0 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  el $testUninstal 27c00 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 0d 0a lVs2015LogFile.. 27c10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 27c20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 27c30 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 proc runSQLite 27c40 54 65 73 74 46 69 6c 65 73 45 70 69 6c 6f 67 75 TestFilesEpilogu 27c50 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 e {} {.. up 27c60 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20 level 1 {.. 27c70 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 unset -nocomp 27c80 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 lain \.. 27c90 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c testUninstal 27ca0 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 74 lVs2015LogFile t 27cb0 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 27cc0 31 33 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 13LogFile \.. 27cd0 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 testUni 27ce0 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 nstallVs2012LogF 27cf0 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c ile testUninstal 27d00 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5c lVs2010LogFile \ 27d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 .. te 27d20 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 stUninstallVs200 27d30 38 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e 69 8LogFile testUni 27d40 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 nstallVs2005LogF 27d50 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 27d60 20 20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 testInstallVs 27d70 32 30 31 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 2015LogFile test 27d80 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 InstallVs2013Log 27d90 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 File \.. 27da0 20 20 20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 testInstallV 27db0 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 74 65 73 s2012LogFile tes 27dc0 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f tInstallVs2010Lo 27dd0 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 gFile \.. 27de0 20 20 20 20 20 74 65 73 74 49 6e 73 74 61 6c 6c testInstall 27df0 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 74 65 Vs2008LogFile te 27e00 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c stInstallVs2005L 27e10 6f 67 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 ogFile.... 27e20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c unset -nocompl 27e30 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ain \.. 27e40 20 20 20 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 northwindEfDb 27e50 46 69 6c 65 20 74 65 73 74 4c 69 6e 71 4f 75 74 File testLinqOut 27e60 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 File \.. 27e70 20 20 20 20 77 61 6c 44 62 46 69 6c 65 20 6e 6f walDbFile no 27e80 6e 57 61 6c 44 62 46 69 6c 65 0d 0a 0d 0a 20 20 nWalDbFile.... 27e90 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 unset -noc 27ea0 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 omplain \.. 27eb0 20 20 20 20 20 20 20 74 65 73 74 45 66 36 45 78 testEf6Ex 27ec0 65 46 69 6c 65 20 74 65 73 74 4c 69 6e 71 45 78 eFile testLinqEx 27ed0 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 eFile \.. 27ee0 20 20 20 20 20 74 65 73 74 45 78 65 46 69 6c 65 testExeFile 27ef0 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 systemDataSQLit 27f00 65 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 eEf6DllFile \.. 27f10 20 20 20 20 20 20 20 20 20 20 20 73 79 73 74 65 syste 27f20 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 44 mDataSQLiteLinqD 27f30 6c 6c 46 69 6c 65 20 73 79 73 74 65 6d 44 61 74 llFile systemDat 27f40 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 20 5c aSQLiteDllFile \ 27f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 .. sq 27f60 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 liteDesignerDllF 27f70 69 6c 65 20 69 6e 73 74 61 6c 6c 65 72 45 78 65 ile installerExe 27f80 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 File \.. 27f90 20 20 20 20 65 6e 74 69 74 79 46 72 61 6d 65 77 entityFramew 27fa0 6f 72 6b 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 orkDllFile.. 27fb0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 27fc0 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 proc runSQLit 27fd0 65 54 65 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d eTestEpilogue {} 27fe0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 27ff0 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 28000 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 running our cust 28010 6f 6d 20 65 70 69 6c 6f 67 75 65 20 69 66 20 74 om epilogue if t 28020 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 he main one has 28030 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 been.. # 28040 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 skipped... 28050 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 28060 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 28070 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65 61 67 :no(epilogue.eag 28080 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 le)]} then {.. 28090 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 280a0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 # NOTE: Show wh 280b0 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 en our tests act 280c0 75 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e 6f 77 ually ended (now 280d0 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 280e0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
280f0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
28100 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
28110 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79          "---- Sy
28120 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
28130 20 74 65 73 74 73 20 65 6e 64 65 64 20 61 74 20   tests ended at
28140 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
28150 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b   [clock format [
28160 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20  clock seconds]]
28170 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
28180 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
28190 3a 20 4c 6f 61 64 20 74 68 65 20 22 65 70 69 6c  : Load the "epil
281a0 6f 67 75 65 22 20 63 75 73 74 6f 6d 20 70 65 72  ogue" custom per
281b0 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72  -user and/or per
281c0 2d 68 6f 73 74 20 74 65 73 74 0d 0a 20 20 20 20  -host test..
281d0 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 74      #       sett
281e0 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
281f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70     #..        up
28200 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f  level 1 [list lo
28210 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74  adSQLiteTestSett
28220 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ings $::test_cha 28230 6e 6e 65 6c 20 2e 65 70 69 6c 6f 67 75 65 5d 0d nnel .epilogue]. 28240 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 28250 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 # BUGFIX: 28260 42 65 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 Before checking 28270 74 68 65 20 66 69 6e 61 6c 20 72 65 73 6f 75 72 the final resour 28280 63 65 73 20 69 6e 20 75 73 65 20 62 79 20 53 51 ces in use by SQ 28290 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 Lite, make.. 282a0 20 20 20 20 23 20 20 20 20 20 20 20 20 20 73 75 # su 282b0 72 65 20 62 6f 74 68 20 6f 66 20 74 68 65 20 50 re both of the P 282c0 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 RAGMA related di 282d0 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 rectory names ar 282e0 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 e freed... 282f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 28300 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 ckForSQLiteDirec 28310 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 tories$::test_c
28320 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20  hannel true....
28330 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
28340 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72    # NOTE: Also r
28350 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72  eport the resour
28360 63 65 20 75 73 61 67 65 20 61 66 74 65 72 20 72  ce usage after r
28370 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73  unning the tests
28380 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
28390 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69        reportSQLi
283a0 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74  teResources $::t 283b0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 283c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 283d0 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 # NOTE: Report 283e0 20 74 68 65 20 63 72 69 74 69 63 61 6c 20 68 61 the critical ha 283f0 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 66 74 65 ndle counts afte 28400 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 r running the te 28410 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d sts... #. 28420 0a 20 20 20 20 20 20 20 20 67 65 74 53 51 4c 69 . getSQLi 28430 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24 teHandleCounts$
28440 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
28450 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
28460 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
28470 6e 65 63 65 73 73 61 72 79 2c 20 64 69 73 61 62  necessary, disab
28480 6c 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  le shared-cache
28490 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  mode now...
284a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
284b0 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74   {[hasRuntimeOpt
284c0 69 6f 6e 20 73 68 61 72 65 64 43 61 63 68 65 5d  ion sharedCache]
284d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
284e0 20 20 20 20 65 6e 61 62 6c 65 53 68 61 72 65 64      enableShared
284f0 43 61 63 68 65 20 24 3a 3a 74 65 73 74 5f 63 68  Cache \$::test_ch
28500 61 6e 6e 65 6c 20 66 61 6c 73 65 0d 0a 20 20 20  annel false..
28510 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
28520 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23  .    }.....    #
28530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28540 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28570 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20  ##########..
28580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28590 23 23 23 23 23 23 23 23 23 23 23 23 23 20 45 4e  ############# EN
285a0 44 20 45 61 67 6c 65 20 4f 4e 4c 59 20 23 23 23  D Eagle ONLY ###
285b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
285c0 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20  ###########..
285d0 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
285e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
285f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28600 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
28610 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20  ############..
28620 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f  }....  #..  # NO
28630 54 45 3a 20 53 61 76 65 20 74 68 65 20 6e 61 6d  TE: Save the nam
28640 65 20 6f 66 20 74 68 65 20 64 69 72 65 63 74 6f  e of the directo
28650 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ry containing th
28660 69 73 20 66 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20  is file...  #..
28670 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
28680 74 73 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74  ts common_direct
28690 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
286a0 20 20 73 65 74 20 63 6f 6d 6d 6f 6e 5f 64 69 72    set common_dir
286b0 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72  ectory [file dir
286c0 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70  name [info scrip
286d0 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d  t]]..  }....  #.
286e0 0a 20 20 23 20 4e 4f 54 45 3a 20 50 72 6f 76 69  .  # NOTE: Provi
286f0 64 65 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  de the System.Da
28700 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 20 70  ta.SQLite test p
28710 61 63 6b 61 67 65 20 74 6f 20 74 68 65 20 69 6e  ackage to the in
28720 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 23 0d  terpreter...  #.
28730 0a 20 20 70 61 63 6b 61 67 65 20 70 72 6f 76 69  .  package provi
28740 64 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  de System.Data.S
28750 51 4c 69 74 65 2e 54 65 73 74 20 31 2e 30 0d 0a  QLite.Test 1.0..
28760 7d 0d 0a                                         }..