System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact a52b6472edb07d08ccc82481d1fa0eb53d601f82:

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 32 30 31 35 2c 20 6f 72 20 32 30 013, 2015, or 20 0760: 31 37 20 62 75 69 6c 64 20 73 79 73 74 65 6d 73 17 build systems 0770: 2e 20 20 54 6f 0d 0a 20 20 20 20 20 20 23 20 20 . To.. # 0780: 20 20 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 override th 0790: 69 73 20 76 61 6c 75 65 20 76 69 61 20 74 68 65 is value via the 07a0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 command line, e 07b0: 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73 nter a command s 07c0: 69 6d 69 6c 61 72 0d 0a 20 20 20 20 20 20 23 20 imilar.. # 07d0: 20 20 20 20 20 20 74 6f 20 6f 6e 65 20 6f 66 20 to one of 07e0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 the following (a 07f0: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a ll on one line): 0800: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 0810: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 # EagleSh 0820: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 ell.exe -anyInit 0830: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 ialize "set test 0840: 5f 79 65 61 72 20 32 30 30 35 22 0d 0a 20 20 20 _year 2005".. 0850: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 # -fi 0860: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 0870: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d .eagle.. #. 0880: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 0890: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 agleShell.exe -a 08a0: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 nyInitialize "se 08b0: 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 30 38 t test_year 2008 08c0: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ".. # 08d0: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c -file .\path\ 08e0: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 to\all.eagle.. 08f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 #.. # 0900: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e EagleShell. 0910: 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 exe -anyInitiali 0920: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 ze "set test_yea 0930: 72 20 32 30 31 30 22 0d 0a 20 20 20 20 20 20 23 r 2010".. # 0940: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e -file . 0950: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 \path\to\all.eag 0960: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 le.. #.. 0970: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 # Eagle 0980: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e Shell.exe -anyIn 0990: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 itialize "set te 09a0: 73 74 5f 79 65 61 72 20 32 30 31 32 22 0d 0a 20 st_year 2012".. 09b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d # - 09c0: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 file .\path\to\a 09d0: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 ll.eagle.. 09e0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 #.. # 09f0: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 EagleShell.exe 0a00: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 -anyInitialize " 0a10: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 set test_year 20 0a20: 31 33 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 13".. # 0a30: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 -file .\pat 0a40: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a h\to\all.eagle.. 0a50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 0a60: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c EagleShel 0a70: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 l.exe -anyInitia 0a80: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 lize "set test_y 0a90: 65 61 72 20 32 30 31 35 22 0d 0a 20 20 20 20 20 ear 2015".. 0aa0: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 # -file 0ab0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 .\path\to\all.e 0ac0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 agle.. #.. 0ad0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 0ae0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 leShell.exe -any 0af0: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 Initialize "set 0b00: 74 65 73 74 5f 79 65 61 72 20 32 30 31 37 22 0d test_year 2017". 0b10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 . # 0b20: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f -file .\path\to 0b30: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 \all.eagle.. 0b40: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 #.. # 0b50: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 EagleShell.ex 0b60: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 e -anyInitialize 0b70: 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c "unset -nocompl 0b80: 61 69 6e 20 74 65 73 74 5f 79 65 61 72 22 0d 0a ain test_year".. 0b90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 0ba0: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 0bb0: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 all.eagle.. 0bc0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 0bd0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 nfo exists ::tes 0be0: 74 5f 79 65 61 72 5d 20 26 26 20 5b 73 74 72 69 t_year] && [stri 0bf0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 ng length$::tes
0c00: 74 5f 79 65 61 72 5d 20 3e 20 30 7d 20 74 68 65  t_year] > 0} the
0c10: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
0c20: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
0c30: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65  Use the specifie
0c40: 64 20 74 65 73 74 20 79 65 61 72 2e 20 20 49 66  d test year.  If
0c50: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69   this variable i
0c60: 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 0d 0a  s not set, the..
0c70: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
0c80: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69  default value wi
0c90: 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e 20 77  ll be based on w
0ca0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 61  hether or not Ea
0cb0: 67 6c 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  gle has been..
0cc0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
0cd0: 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 74  mpiled against t
0ce0: 68 65 20 43 4c 52 20 76 32 2e 30 20 6f 72 20 43  he CLR v2.0 or C
0cf0: 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20  LR v4.0...
0d00: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
0d10: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 61 72  urn $::test_year 0d20: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 0d30: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 0d40: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 0d50: 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e 20 63 Eagle has been c 0d60: 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 ompiled against 0d70: 74 68 65 20 43 4c 52 20 76 34 2e 30 2c 20 75 73 the CLR v4.0, us 0d80: 65 20 22 32 30 31 30 22 20 62 79 0d 0a 20 20 20 e "2010" by.. 0d90: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 65 66 # def 0da0: 61 75 6c 74 20 28 77 65 20 63 6f 75 6c 64 20 75 ault (we could u 0db0: 73 65 20 22 32 30 31 32 22 2c 20 22 32 30 31 33 se "2012", "2013 0dc0: 22 2c 20 22 32 30 31 35 22 2c 20 6f 72 20 22 32 ", "2015", or "2 0dd0: 30 31 37 22 20 69 6e 20 74 68 61 74 0d 0a 20 20 017" in that.. 0de0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 # ca 0df0: 73 65 20 61 73 20 77 65 6c 6c 29 20 61 73 20 74 se as well) as t 0e00: 68 65 20 74 65 73 74 20 79 65 61 72 3b 20 6f 74 he test year; ot 0e10: 68 65 72 77 69 73 65 2c 20 75 73 65 20 22 32 30 herwise, use "20 0e20: 30 38 22 20 62 79 20 64 65 66 61 75 6c 74 0d 0a 08" by default.. 0e30: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 0e40: 28 77 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 (we could use "2 0e50: 30 30 35 22 20 69 6e 20 74 68 61 74 20 63 61 73 005" in that cas 0e60: 65 20 61 73 20 77 65 6c 6c 29 2e 20 20 49 66 20 e as well). If 0e70: 61 6e 6f 74 68 65 72 20 6d 61 6a 6f 72 0d 0a 20 another major.. 0e80: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b # [ 0e90: 69 6e 63 6f 6d 70 61 74 69 62 6c 65 5d 20 76 65 incompatible] ve 0ea0: 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 43 4c 52 rsion of the CLR 0eb0: 20 69 73 20 72 65 6c 65 61 73 65 64 2c 20 74 68 is released, th 0ec0: 69 73 20 63 68 65 63 6b 20 77 69 6c 6c 0d 0a 20 is check will.. 0ed0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 68 # h 0ee0: 61 76 65 20 74 6f 20 62 65 20 63 68 61 6e 67 65 ave to be change 0ef0: 64 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 d. The default 0f00: 74 65 73 74 20 79 65 61 72 20 74 6f 20 75 73 65 test year to use 0f10: 20 66 6f 72 20 61 0d 0a 20 20 20 20 20 20 20 20 for a.. 0f20: 23 20 20 20 20 20 20 20 70 61 72 74 69 63 75 6c # particul 0f30: 61 72 20 43 4c 52 20 76 65 72 73 69 6f 6e 20 6d ar CLR version m 0f40: 61 79 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e ay be overridden 0f50: 20 62 79 20 73 65 74 74 69 6e 67 20 74 68 65 20 by setting the 0f60: 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 global.. 0f70: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 0f80: 20 22 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f "test_year_clr_ 0f90: 76 24 58 22 2c 20 77 68 65 72 65 20 22 24 58 22 v$X", where "$X" 0fa0: 20 6d 61 79 20 5b 63 75 72 72 65 6e 74 6c 79 5d may [currently] 0fb0: 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 be.. # 0fc0: 20 20 20 20 20 65 69 74 68 65 72 20 22 32 22 20 either "2" 0fd0: 6f 72 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 or "4"... 0fe0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 0ff0: 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 1000: 69 6d 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d imageRuntime40]} 1010: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1020: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 1030: 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f sts ::test_year_ 1040: 63 6c 72 5f 76 34 5d 20 26 26 20 5c 0d 0a 20 20 clr_v4] && \.. 1050: 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 1060: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 ing length$::te
1070: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20  st_year_clr_v4]
1080: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
1090: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
10a0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
10b0: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65  Use the specifie
10c0: 64 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20  d test year for
10d0: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20  the CLR v4.0...
10e0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
10f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1100: 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c   $::test_year_cl 1110: 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20 r_v4.. 1120: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1130: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1140: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 1150: 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 the default tes 1160: 74 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 t year for the C 1170: 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 LR v4.0... 1180: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1190: 20 20 20 20 20 72 65 74 75 72 6e 20 32 30 31 30 return 2010 11a0: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 ; # TODO: Good " 11b0: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c fallback" defaul 11c0: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d t?.. }. 11d0: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else 11e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 11f0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 1200: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 test_year_clr_v2 1210: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1220: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 1230: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 ngth$::test_yea
1240: 72 5f 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74  r_clr_v2] > 0} t
1250: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1260: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1270: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
1280: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74  e specified test
1290: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c   year for the CL
12a0: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20  R v2.0...
12b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
12c0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65      return $::te 12d0: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 0d 0a st_year_clr_v2.. 12e0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 12f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1300: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 1310: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 NOTE: Use the d 1320: 65 66 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 efault test year 1330: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e for the CLR v2. 1340: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 1350: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 1360: 65 74 75 72 6e 20 32 30 30 38 3b 20 23 20 54 4f eturn 2008; # TO 1370: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 DO: Good "fallba 1380: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 ck" default?.. 1390: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 13a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 13b0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a }..... #.. 13c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 13d0: 20 70 72 6f 63 65 64 75 72 65 20 69 73 20 6f 6e procedure is on 13e0: 6c 79 20 75 73 65 64 20 77 68 65 6e 20 61 64 64 ly used when add 13f0: 69 6e 67 20 73 68 69 6d 6d 65 64 20 74 65 73 74 ing shimmed test 1400: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 constraints... 1410: 20 20 20 23 0d 0a 20 20 20 20 70 72 6f 63 20 67 #.. proc g 1420: 65 74 42 75 69 6c 64 43 6c 72 56 65 72 73 69 6f etBuildClrVersio 1430: 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 n {} {.. if 1440: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 1450: 3a 74 65 73 74 5f 63 6c 72 5d 20 26 26 20 5b 73 :test_clr] && [s 1460: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
1470: 74 65 73 74 5f 63 6c 72 5d 20 3e 20 30 7d 20 74  test_clr] > 0} t
1480: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1490: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
14a0: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66  : Use the specif
14b0: 69 65 64 20 74 65 73 74 20 76 65 72 73 69 6f 6e  ied test version
14c0: 20 66 6f 72 20 74 68 65 20 43 4c 52 2e 20 20 49   for the CLR.  I
14d0: 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 0d  f this variable.
14e0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
14f0: 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 65   is not set, the
1500: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77   default value w
1510: 69 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e 20  ill be based on
1520: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0d 0a  whether or not..
1530: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1540: 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e 20 63  Eagle has been c
1550: 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20  ompiled against
1560: 74 68 65 20 43 4c 52 20 76 32 2e 30 20 6f 72 20  the CLR v2.0 or
1570: 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20  CLR v4.0...
1580: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
1590: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6c 72  turn $::test_clr 15a0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 15b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 15c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 15d0: 63 6b 20 69 66 20 45 61 67 6c 65 20 68 61 73 20 ck if Eagle has 15e0: 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67 been compiled ag 15f0: 61 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34 ainst the CLR v4 1600: 2e 30 2e 20 20 49 66 20 73 6f 2c 0d 0a 20 20 20 .0. If so,.. 1610: 20 20 20 20 20 23 20 20 20 20 20 20 20 6a 75 73 # jus 1620: 74 20 75 73 65 20 74 68 61 74 20 43 4c 52 20 76 t use that CLR v 1630: 65 72 73 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 ersion. Otherwi 1640: 73 65 2c 20 75 73 65 20 74 68 65 20 76 65 72 73 se, use the vers 1650: 69 6f 6e 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 ion for the.. 1660: 20 20 20 20 20 23 20 20 20 20 20 20 20 43 4c 52 # CLR 1670: 20 76 32 2e 30 2e 20 20 49 66 20 61 6e 6f 74 68 v2.0. If anoth 1680: 65 72 20 6d 61 6a 6f 72 20 5b 69 6e 63 6f 6d 70 er major [incomp 1690: 61 74 69 62 6c 65 5d 20 76 65 72 73 69 6f 6e 20 atible] version 16a0: 6f 66 20 74 68 65 20 43 4c 52 0d 0a 20 20 20 20 of the CLR.. 16b0: 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 72 # is r 16c0: 65 6c 65 61 73 65 64 2c 20 74 68 69 73 20 63 68 eleased, this ch 16d0: 65 63 6b 20 77 69 6c 6c 20 68 61 76 65 20 74 6f eck will have to 16e0: 20 62 65 20 63 68 61 6e 67 65 64 2e 20 20 54 68 be changed. Th 16f0: 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 e default.. 1700: 20 20 20 23 20 20 20 20 20 20 20 76 65 72 73 69 # versi 1710: 6f 6e 20 76 61 6c 75 65 20 66 6f 72 20 61 20 70 on value for a p 1720: 61 72 74 69 63 75 6c 61 72 20 43 4c 52 20 76 65 articular CLR ve 1730: 72 73 69 6f 6e 20 6d 61 79 20 62 65 20 6f 76 65 rsion may be ove 1740: 72 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 20 rridden.. 1750: 20 23 20 20 20 20 20 20 20 62 79 20 73 65 74 74 # by sett 1760: 69 6e 67 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 ing the global v 1770: 61 72 69 61 62 6c 65 20 22 74 65 73 74 5f 63 6c ariable "test_cl 1780: 72 5f 76 24 58 22 2c 20 77 68 65 72 65 20 22 24 r_v$X", where "$1790: 58 22 20 6d 61 79 0d 0a 20 20 20 20 20 20 20 20 X" may.. 17a0: 23 20 20 20 20 20 20 20 5b 63 75 72 72 65 6e 74 # [current 17b0: 6c 79 5d 20 62 65 20 65 69 74 68 65 72 20 22 32 ly] be either "2 17c0: 22 20 6f 72 20 22 34 22 2e 0d 0a 20 20 20 20 20 " or "4"... 17d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 17e0: 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {[haveConstrain 17f0: 74 20 69 6d 61 67 65 52 75 6e 74 69 6d 65 34 30 t imageRuntime40 1800: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1810: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 1820: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6c 72 xists ::test_clr 1830: 5f 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 _v4] && \.. 1840: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 1850: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f length$::test_
1860: 63 6c 72 5f 76 34 5d 20 3e 20 30 7d 20 74 68 65  clr_v4] > 0} the
1870: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1880: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1890: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
18a0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 76  specified test v
18b0: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43  ersion for the C
18c0: 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20  LR v4.0...
18d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
18e0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74       return $::t 18f0: 65 73 74 5f 63 6c 72 5f 76 34 0d 0a 20 20 20 20 est_clr_v4.. 1900: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1910: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1920: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1930: 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 E: Use the defau 1940: 6c 74 20 74 65 73 74 20 76 65 72 73 69 6f 6e 20 lt test version 1950: 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30 for the CLR v4.0 1960: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 1970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 1980: 74 75 72 6e 20 34 2e 30 2e 33 30 33 31 39 3b 20 turn 4.0.30319; 1990: 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 # TODO: Good "fa 19a0: 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f llback" default? 19b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 19c0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 19d0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 19e0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 info exists ::te 19f0: 73 74 5f 63 6c 72 5f 76 32 5d 20 26 26 20 5c 0d st_clr_v2] && \. 1a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 1a10: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
1a20: 3a 74 65 73 74 5f 63 6c 72 5f 76 32 5d 20 3e 20  :test_clr_v2] >
1a30: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
1a40: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1a50: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1a60: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1a70: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72  test version for
1a80: 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a   the CLR v2.0...
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1aa0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1ab0: 6e 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 32  n $::test_clr_v2 1ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 1ad0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 1ae0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1af0: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 1b00: 20 64 65 66 61 75 6c 74 20 74 65 73 74 20 76 65 default test ve 1b10: 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c rsion for the CL 1b20: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 R v2.0... 1b30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1b40: 20 20 20 20 72 65 74 75 72 6e 20 32 2e 30 2e 35 return 2.0.5 1b50: 30 37 32 37 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 0727; # TODO: Go 1b60: 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64 65 od "fallback" de 1b70: 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 fault?.. 1b80: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1b90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 1ba0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 1bb0: 75 69 6c 64 59 65 61 72 73 20 7b 7d 20 7b 0d 0a uildYears {} {.. 1bc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1bd0: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 NOTE: See if th 1be0: 65 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79 e list of test y 1bf0: 65 61 72 73 20 68 61 73 20 62 65 65 6e 20 6f 76 ears has been ov 1c00: 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 erridden by the 1c10: 75 73 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 user.. # 1c20: 20 20 20 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 (e.g. on the 1c30: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d command line).. 1c40: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1c50: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 1c60: 20 3a 3a 74 65 73 74 5f 79 65 61 72 73 5d 20 26 ::test_years] & 1c70: 26 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 & [llength$::te
1c80: 73 74 5f 79 65 61 72 73 5d 20 3e 20 30 7d 20 74  st_years] > 0} t
1c90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1ca0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1cb0: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66  : Use the specif
1cc0: 69 65 64 20 6c 69 73 74 20 6f 66 20 74 65 73 74  ied list of test
1cd0: 20 79 65 61 72 73 2e 0d 0a 20 20 20 20 20 20 20   years...
1ce0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
1cf0: 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 73  rn $::test_years 1d00: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 1d10: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1d20: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 1d30: 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73 the default lis 1d40: 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20 t of test years 1d50: 28 69 2e 65 2e 20 61 6c 6c 29 2e 0d 0a 20 20 20 (i.e. all)... 1d60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1d70: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 32 30 30 return [list 200 1d80: 35 20 32 30 30 38 20 32 30 31 30 20 32 30 31 32 5 2008 2010 2012 1d90: 20 32 30 31 33 20 32 30 31 35 20 32 30 31 37 5d 2013 2015 2017] 1da0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1db0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 1dc0: 74 42 75 69 6c 64 4e 65 74 46 78 20 7b 7d 20 7b tBuildNetFx {} { 1dd0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1de0: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 # NOTE: See if 1df0: 74 68 65 20 74 65 73 74 20 2e 4e 45 54 20 46 72 the test .NET Fr 1e00: 61 6d 65 77 6f 72 6b 20 73 65 74 74 69 6e 67 20 amework setting 1e10: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 has been overrid 1e20: 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 23 20 den by.. # 1e30: 20 20 20 20 20 20 74 68 65 20 75 73 65 72 20 28 the user ( 1e40: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d e.g. on the comm 1e50: 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20 and line)... 1e60: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 1e70: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 info exists ::te 1e80: 73 74 5f 6e 65 74 5f 66 78 5d 20 26 26 20 5c 0d st_net_fx] && \. 1e90: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 1ea0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 ng length$::tes
1eb0: 74 5f 6e 65 74 5f 66 78 5d 20 3e 20 30 7d 20 74  t_net_fx] > 0} t
1ec0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1ed0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1ee0: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66  : Use the specif
1ef0: 69 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 72  ied test .NET Fr
1f00: 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20  amework...
1f10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
1f20: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 6e 65 74 5f  urn $::test_net_ 1f30: 66 78 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 fx.. } else 1f40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 1f50: 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 year [getBuildYe 1f60: 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ar].. set 1f70: 20 79 65 61 72 56 61 72 4e 61 6d 65 20 5b 61 70 yearVarName [ap 1f80: 70 65 6e 64 41 72 67 73 20 3a 3a 74 65 73 74 5f pendArgs ::test_ 1f90: 6e 65 74 5f 66 78 5f 20 24 79 65 61 72 5d 0d 0a net_fx_$year]..
1fa0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69  ..        if {[i
1fb0: 6e 66 6f 20 65 78 69 73 74 73 20 24 79 65 61 72  nfo exists $year 1fc0: 56 61 72 4e 61 6d 65 5d 20 26 26 20 5c 0d 0a 20 VarName] && \.. 1fd0: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 1fe0: 6e 67 20 6c 65 6e 67 74 68 20 5b 73 65 74 20 24 ng length [set$
1ff0: 79 65 61 72 56 61 72 4e 61 6d 65 5d 5d 20 3e 20  yearVarName]] >
2000: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
2010: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2020: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
2030: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74  e specified test
2040: 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2c   .NET Framework,
2050: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 62 75   based on the bu
2060: 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ild..          #
2070: 20 20 20 20 20 20 20 79 65 61 72 2e 0d 0a 20 20         year...
2080: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2090: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73 65 74       return [set
20a0: 20 24 79 65 61 72 56 61 72 4e 61 6d 65 5d 0d 0a   $yearVarName].. 20b0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 20c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 20d0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 20e0: 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 Fallback to the 20f0: 20 22 77 65 6c 6c 20 6b 6e 6f 77 6e 22 20 2e 4e "well known" .N 2100: 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 76 65 72 ET Framework ver 2110: 73 69 6f 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 sion that.. 2120: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is 2130: 6d 6f 73 74 20 63 6c 6f 73 65 6c 79 20 61 73 73 most closely ass 2140: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 70 ociated with a p 2150: 61 72 74 69 63 75 6c 61 72 20 76 65 72 73 69 6f articular versio 2160: 6e 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 n of.. 2170: 23 20 20 20 20 20 20 20 56 69 73 75 61 6c 20 53 # Visual S 2180: 74 75 64 69 6f 2e 0d 0a 20 20 20 20 20 20 20 20 tudio... 2190: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 21a0: 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 witch -exact -- 21b0: 24 79 65 61 72 20 7b 0d 0a 20 20 20 20 20 20 20$year {..
21c0: 20 20 20 20 20 32 30 30 35 20 7b 0d 0a 20 20 20       2005 {..
21d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21e0: 6e 20 6e 65 74 46 78 32 30 0d 0a 20 20 20 20 20  n netFx20..
21f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
2200: 20 20 20 20 20 20 32 30 30 38 20 7b 0d 0a 20 20        2008 {..
2210: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2220: 72 6e 20 6e 65 74 46 78 33 35 0d 0a 20 20 20 20  rn netFx35..
2230: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
2240: 20 20 20 20 20 20 20 32 30 31 30 20 7b 0d 0a 20         2010 {..
2250: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2260: 75 72 6e 20 6e 65 74 46 78 34 30 0d 0a 20 20 20  urn netFx40..
2270: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
2280: 20 20 20 20 20 20 20 20 32 30 31 32 20 7b 0d 0a          2012 {..
2290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
22a0: 74 75 72 6e 20 6e 65 74 46 78 34 35 0d 0a 20 20  turn netFx45..
22b0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
22c0: 20 20 20 20 20 20 20 20 20 32 30 31 33 20 7b 0d           2013 {.
22d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
22e0: 65 74 75 72 6e 20 6e 65 74 46 78 34 35 31 3b 20  eturn netFx451;
22f0: 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 46  # TODO: Or "netF
2300: 78 34 35 32 22 3f 0d 0a 20 20 20 20 20 20 20 20  x452"?..
2310: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
2320: 20 20 20 32 30 31 35 20 7b 0d 0a 20 20 20 20 20     2015 {..
2330: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
2340: 6e 65 74 46 78 34 36 3b 20 23 20 54 4f 44 4f 3a  netFx46; # TODO:
2350: 20 4f 72 20 22 6e 65 74 46 78 34 36 31 22 20 2f   Or "netFx461" /
2360: 20 22 6e 65 74 46 78 34 36 32 22 3f 0d 0a 20 20   "netFx462"?..
2370: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2380: 20 20 20 20 20 20 20 20 20 32 30 31 37 20 7b 0d           2017 {.
2390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
23a0: 65 74 75 72 6e 20 6e 65 74 46 78 34 37 3b 20 23  eturn netFx47; #
23b0: 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 46 78   TODO: Or "netFx
23c0: 34 37 31 22 3f 0d 0a 20 20 20 20 20 20 20 20 20  471"?..
23d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
23e0: 20 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20    default {..
23f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2400: 6e 20 6e 65 74 46 78 33 35 3b 20 23 20 54 4f 44  n netFx35; # TOD
2410: 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63  O: Good "fallbac
2420: 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20  k" default?..
2430: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
2440: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
2450: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
2460: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20   }.....    #..
2470: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70    # NOTE: This p
2480: 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20  rocedure should
2490: 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  return non-zero
24a0: 69 66 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65  if the configure
24b0: 64 20 74 65 73 74 0d 0a 20 20 20 20 23 20 20 20  d test..    #
24c0: 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 69 73 20      platform is
24d0: 6d 6f 73 74 20 6c 69 6b 65 6c 79 20 74 68 65 20  most likely the
24e0: 64 65 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73  default for this
24f0: 20 6d 61 63 68 69 6e 65 2e 0d 0a 20 20 20 20 23   machine...    #
2500: 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 44 65 66  ..    proc isDef
2510: 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72  aultBuildPlatfor
2520: 6d 20 7b 20 7b 76 65 72 62 6f 73 65 20 74 72 75  m { {verbose tru
2530: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
2540: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
2550: 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34 20  unning on WoW64
2560: 69 73 20 6e 65 76 65 72 20 74 68 65 20 64 65 66  is never the def
2570: 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a  ault platform...
2580: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
2590: 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57  f {[isRunningWoW
25a0: 36 34 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  64]} then {..
25b0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos 25c0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 25d0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
25e0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
2600: 2d 20 64 65 74 65 63 74 65 64 20 6e 6f 6e 2d 64  - detected non-d
2610: 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 20  efault platform
2620: 28 57 6f 57 36 34 29 5c 6e 22 0d 0a 20 20 20 20  (WoW64)\n"..
2630: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
2640: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20   return false..
2650: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2660: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
2670: 20 54 68 69 73 20 68 61 73 20 61 20 67 6f 6f 64   This has a good
2680: 20 63 68 61 6e 63 65 20 6f 66 20 62 65 69 6e 67   chance of being
2690: 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61   the default pla
26a0: 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d  tform...      #.
26b0: 0a 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62  .      if {$verb 26c0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. 26d0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
26e0: 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  st_channel "----
26f0: 20 64 65 74 65 63 74 65 64 20 64 65 66 61 75 6c   detected defaul
2700: 74 20 70 6c 61 74 66 6f 72 6d 5c 6e 22 0d 0a 20  t platform\n"..
2710: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2720: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
2730: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
2740: 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d  getBuildPlatform
2750: 20 7b 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20   { native } {..
2760: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
2770: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 70 6c 61  xists ::test_pla
2780: 74 66 6f 72 6d 5d 20 26 26 20 5c 0d 0a 20 20 20  tform] && \..
2790: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
27a0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 70 6c  ength $::test_pl 27b0: 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 atform] > 0} the 27c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 27d0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 27e0: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 Use the specifie 27f0: 64 20 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 2e d test platform. 2800: 20 20 49 66 20 74 68 69 73 20 76 61 72 69 61 62 If this variab 2810: 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c 0d 0a le is not set,.. 2820: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2830: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 the default valu 2840: 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20 e will be based 2850: 6f 6e 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61 on the machine a 2860: 72 63 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 rchitecture... 2870: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2880: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 return [expr {$
2890: 6e 61 74 69 76 65 20 3f 20 24 3a 3a 74 65 73 74  native ? $::test 28a0: 5f 70 6c 61 74 66 6f 72 6d 20 3a 20 22 22 7d 5d _platform : ""}] 28b0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif 28c0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 28d0: 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 26 :test_machine] & 28e0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 28f0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
2900: 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3e  :test_machine] >
2910: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
2920: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2930: 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76   NOTE: For nativ
2940: 65 20 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e  e builds, return
2950: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61   the platform na
2960: 6d 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  me corresponding
2970: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20   to..        #
2980: 20 20 20 20 20 74 68 65 20 74 65 73 74 20 6d 61       the test ma
2990: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75  chine architectu
29a0: 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72  re; otherwise, r
29b0: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 0d 0a  eturn an empty..
29c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
29d0: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...
29e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
29f0: 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20  rn [expr {..
2a00: 20 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20        $native ? 2a10: 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f [machineToPlatfo 2a20: 72 6d 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 rm$::test_machi
2a30: 6e 65 5d 20 3a 20 22 22 0d 0a 20 20 20 20 20 20  ne] : ""..
2a40: 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c    }]..      } el
2a50: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
2a60: 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  ts ::tcl_platfor
2a70: 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65  m(machine)]} the
2a80: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
2a90: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
2aa0: 46 6f 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64  For native build
2ab0: 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c  s, return the pl
2ac0: 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72  atform name corr
2ad0: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20  esponding to..
2ae0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
2af0: 65 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74  e machine archit
2b00: 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73  ecture; otherwis
2b10: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70  e, return an emp
2b20: 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20  ty string...
2b30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
2b40: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20  eturn [expr {..
2b50: 20 20 20 20 20 20 20 20 20 24 6e 61 74 69 76 65           $native 2b60: 20 3f 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 ? [machineToPla 2b70: 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 tform$::tcl_pla
2b80: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 20  tform(machine)]
2b90: 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d  : ""..        }]
2ba0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
2bb0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2bc0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20       # NOTE: No
2bd0: 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63  machine architec
2be0: 74 75 72 65 20 69 73 20 61 76 61 69 6c 61 62 6c  ture is availabl
2bf0: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70  e, return an emp
2c00: 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20  ty string...
2c10: 20 20 20 20 23 20 20 20 20 20 20 20 49 74 20 69      #       It i
2c20: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72  s important to r
2c30: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73  eturn an empty s
2c40: 74 72 69 6e 67 20 68 65 72 65 20 62 65 63 61 75  tring here becau
2c50: 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  se the..
2c60: 23 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f  #       result o
2c70: 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  f this procedure
2c80: 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 74   may be used wit
2c90: 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a  h [file join]...
2ca0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2cb0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
2cc0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
2cd0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
2ce0: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ldConfiguration
2cf0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
2d00: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65       # NOTE: See
2d10: 20 69 66 20 74 68 65 20 22 63 6f 6e 66 69 67 75   if the "configu
2d20: 72 61 74 69 6f 6e 22 20 73 65 74 74 69 6e 67 20  ration" setting
2d30: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
2d40: 64 65 6e 20 62 79 20 74 68 65 0d 0a 20 20 20 20  den by the..
2d50: 20 20 23 20 20 20 20 20 20 20 75 73 65 72 20 28    #       user (
2d60: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  e.g. on the comm
2d70: 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54 68 69 73  and line).  This
2d80: 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20 65   helps control e
2d90: 78 61 63 74 6c 79 0d 0a 20 20 20 20 20 20 23 20  xactly..      #
2da0: 20 20 20 20 20 20 77 68 69 63 68 20 73 65 74 20        which set
2db0: 6f 66 20 62 69 6e 61 72 69 65 73 20 77 65 20 61  of binaries we a
2dc0: 72 65 20 74 65 73 74 69 6e 67 20 28 69 2e 65 2e  re testing (i.e.
2dd0: 20 74 68 6f 73 65 20 62 75 69 6c 74 20 69 6e 20   those built in
2de0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
2df0: 20 20 20 22 44 65 62 75 67 22 20 6f 72 20 22 52     "Debug" or "R
2e00: 65 6c 65 61 73 65 22 20 62 75 69 6c 64 20 63 6f  elease" build co
2e10: 6e 66 69 67 75 72 61 74 69 6f 6e 73 29 2e 20 20  nfigurations).
2e20: 54 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73  To override this
2e30: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2e40: 76 61 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f  value via the co
2e50: 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65  mmand line, ente
2e60: 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69  r a command simi
2e70: 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20  lar to one of..
2e80: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
2e90: 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20   following (all
2ea0: 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20  on one line):..
2eb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
2ec0: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
2ed0: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c  .exe -anyInitial
2ee0: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f  ize "set test_co
2ef0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 44 65 62 75  nfiguration Debu
2f00: 67 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  g"..      #
2f10: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
2f20: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
2f30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
2f40: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
2f50: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c  .exe -anyInitial
2f60: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f  ize "set test_co
2f70: 6e 66 69 67 75 72 61 74 69 6f 6e 20 52 65 6c 65  nfiguration Rele
2f80: 61 73 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ase"..      #
2f90: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
2fa0: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
2fb0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
2fc0: 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65  #       EagleShe
2fd0: 6c 6c 2e 65 78 65 20 2d 66 69 6c 65 20 2e 5c 70  ll.exe -file .\p
2fe0: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
2ff0: 20 2d 70 72 65 54 65 73 74 0d 0a 20 20 20 20 20   -preTest..
3000: 20 23 20 20 20 20 20 20 20 20 20 22 75 6e 73 65   #         "unse
3010: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65  t -nocomplain te
3020: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
3030: 22 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  "..      #..
3040: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
3050: 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67  ts ::test_config
3060: 75 72 61 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20  uration] && \..
3070: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
3080: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f   length $::test_ 3090: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e configuration] > 30a0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 30b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 30c0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 30d0: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 63 6f pecified test co 30e0: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 nfiguration. Th 30f0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 e default value 3100: 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 used.. # 3110: 20 20 20 20 20 20 66 6f 72 20 74 68 69 73 20 76 for this v 3120: 61 72 69 61 62 6c 65 20 69 73 20 74 79 70 69 63 ariable is typic 3130: 61 6c 6c 79 20 22 52 65 6c 65 61 73 65 22 2c 20 ally "Release", 3140: 61 73 20 73 65 74 20 62 79 20 74 68 65 20 74 65 as set by the te 3150: 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 3160: 20 20 20 20 73 75 69 74 65 20 69 74 73 65 6c 66 suite itself 3170: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 3180: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
3190: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
31a0: 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  on..      } else
31b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
31c0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
31d0: 6f 72 6d 61 6c 6c 79 2c 20 77 65 20 77 69 6c 6c  ormally, we will
31e0: 20 6e 65 76 65 72 20 68 69 74 20 74 68 69 73 20   never hit this
31f0: 63 61 73 65 20 62 65 63 61 75 73 65 20 74 68 65  case because the
3200: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20   value of the..
3210: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
3220: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
3230: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c  n variable is al
3240: 77 61 79 73 20 73 65 74 20 62 79 20 74 68 65 20  ways set by the
3250: 74 65 73 74 20 73 75 69 74 65 0d 0a 20 20 20 20  test suite..
3260: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65      #       itse
3270: 6c 66 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20  lf; however, it
3280: 63 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65  can be overridde
3290: 6e 20 75 73 69 6e 67 20 74 68 65 20 75 6e 73 65  n using the unse
32a0: 74 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 20  t command..
32b0: 20 20 20 23 20 20 20 20 20 20 20 66 72 6f 6d 20     #       from
32c0: 74 68 65 20 2d 70 72 65 54 65 73 74 20 6f 70 74  the -preTest opt
32d0: 69 6f 6e 20 74 6f 20 74 68 65 20 74 65 73 74 20  ion to the test
32e0: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  suite...
32f0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
3300: 6e 20 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66  n $::eagle_platf 3310: 6f 72 6d 28 63 6f 6e 66 69 67 75 72 61 74 69 6f orm(configuratio 3320: 6e 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n).. }.. 3330: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 3340: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur 3350: 61 74 69 6f 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 ations {} {.. 3360: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3370: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c TE: See if the l 3380: 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 ist of test conf 3390: 69 67 75 72 61 74 69 6f 6e 73 20 68 61 73 20 62 igurations has b 33a0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 een overridden b 33b0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 33c0: 20 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 the user (e.g. 33d0: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c on the command l 33e0: 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ine)... #.. 33f0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 3400: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f exists ::test_co 3410: 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 26 26 nfigurations] && 3420: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c \.. [l 3430: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 length$::test_c
3440: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 3e  onfigurations] >
3450: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
3460: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
3470: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73   NOTE: Use the s
3480: 70 65 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66  pecified list of
3490: 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74   test configurat
34a0: 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ions...        #
34b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
34c0: 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75   $::test_configu 34d0: 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d rations.. } 34e0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 34f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3500: 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 TE: Use the defa 3510: 75 6c 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74 ult list of test 3520: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e configurations. 3530: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 3540: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 3550: 74 20 44 65 62 75 67 20 52 65 6c 65 61 73 65 5d t Debug Release] 3560: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 3570: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 3580: 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 tBuildBaseDirect 3590: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ory {} {.. 35a0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 35b0: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 Figure out the 35c0: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 77 base directory w 35d0: 68 65 72 65 20 61 6c 6c 20 74 68 65 20 62 75 69 here all the bui 35e0: 6c 64 73 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 lds should be.. 35f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 # loc 3600: 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c ated. This will 3610: 20 62 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 be the director 3620: 79 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 y that contains 3630: 74 68 65 20 61 63 74 75 61 6c 0d 0a 20 20 20 20 the actual.. 3640: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 # build 3650: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 output directory 3660: 20 28 65 2e 67 2e 20 70 61 72 65 6e 74 20 6f 66 (e.g. parent of 3670: 20 22 62 69 6e 22 29 2e 0d 0a 20 20 20 20 20 20 "bin")... 3680: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 3690: 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c fo exists ::buil 36a0: 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 d_base_directory 36b0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 36c0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 36d0: 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64$::build_base_d
36e0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74  irectory] > 0} t
36f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
3700: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
3710: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f  : The location o
3720: 66 20 74 68 65 20 62 75 69 6c 64 20 62 61 73 65  f the build base
3730: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
3740: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
3750: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
3760: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
3770: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
3780: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
3790: 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64   return $::build 37a0: 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d _base_directory. 37b0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 37c0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 37d0: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 common_directory 37e0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 37f0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 3800: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63$::common_direc
3810: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tory] > 0} then
3820: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
3830: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65        # NOTE: Ne
3840: 78 74 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20  xt, fallback to
3850: 74 68 65 20 67 72 61 6e 64 70 61 72 65 6e 74 20  the grandparent
3860: 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65  directory of the
3870: 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 23 20   one..        #
3880: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67        containing
3890: 20 74 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e   this file (i.e.
38a0: 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29   "common.eagle")
38b0: 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d  , if available..
38c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
38d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
38e0: 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64   dirname [file d
38f0: 69 72 6e 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e  irname $::common 3900: 5f 64 69 72 65 63 74 6f 72 79 5d 5d 0d 0a 20 20 _directory]].. 3910: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 3920: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 70 61 74 nfo exists ::pat 3930: 68 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 h] && \.. 3940: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 3950: 68 20 24 3a 3a 70 61 74 68 5d 20 3e 20 30 7d 20 h$::path] > 0}
3960: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
3970: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
3980: 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c  E: Finally, fall
3990: 62 61 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65  back to the pare
39a0: 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20  nt directory of
39b0: 74 68 65 20 45 61 67 6c 65 54 65 73 74 0d 0a 20  the EagleTest..
39c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70         #       p
39d0: 61 74 68 2e 20 20 54 68 65 20 45 61 67 6c 65 54  ath.  The EagleT
39e0: 65 73 74 20 70 61 63 6b 61 67 65 20 67 75 61 72  est package guar
39f0: 61 6e 74 65 65 73 20 74 68 61 74 20 74 68 69 73  antees that this
3a00: 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20   variable..
3a10: 20 20 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20     #       will
3a20: 62 65 20 73 65 74 20 74 6f 20 74 68 65 20 64 69  be set to the di
3a30: 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69  rectory containi
3a40: 6e 67 20 74 68 65 20 66 69 72 73 74 20 66 69 6c  ng the first fil
3a50: 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20  e to..        #
3a60: 20 20 20 20 20 20 65 78 65 63 75 74 65 20 74 68        execute th
3a70: 65 20 5b 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67  e [runTestProlog
3a80: 75 65 5d 20 73 63 72 69 70 74 20 6c 69 62 72 61  ue] script libra
3a90: 72 79 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20  ry procedure...
3aa0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
3ab0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64    return [file d
3ac0: 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d  irname $::path]. 3ad0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 3ae0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 3af0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 # NOTE: No p 3b00: 61 74 68 20 69 73 20 61 76 61 69 6c 61 62 6c 65 ath is available 3b10: 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 , return an empt 3b20: 79 20 73 74 72 69 6e 67 2e 20 20 54 68 69 73 20 y string. This 3b30: 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 23 point.. # 3b40: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 6e 6f should no 3b50: 74 20 62 65 20 72 65 61 63 68 65 64 2e 0d 0a 20 t be reached... 3b60: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3b70: 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 return "".. 3b80: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 3b90: 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 proc getSQLi 3ba0: 74 65 54 65 73 74 44 61 74 61 50 61 74 68 20 7b teTestDataPath { 3bb0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 3bc0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 # NOTE: Figu 3bd0: 72 65 20 6f 75 74 20 74 68 65 20 64 69 72 65 63 re out the direc 3be0: 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74 tory where all t 3bf0: 68 65 20 74 65 73 74 20 64 61 74 61 20 66 69 6c he test data fil 3c00: 65 73 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20 es should.. 3c10: 20 23 20 20 20 20 20 20 20 62 65 20 6c 6f 63 61 # be loca 3c20: 74 65 64 2e 20 20 54 68 69 73 20 73 68 6f 75 6c ted. This shoul 3c30: 64 20 62 65 20 74 68 65 20 22 64 61 74 61 22 20 d be the "data" 3c40: 64 69 72 65 63 74 6f 72 79 20 62 65 6e 65 61 74 directory beneat 3c50: 68 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 h the.. # 3c60: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 directory c 3c70: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 61 63 ontaining the ac 3c80: 74 75 61 6c 20 74 65 73 74 20 73 63 72 69 70 74 tual test script 3c90: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 3ca0: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 3cb0: 6a 6f 69 6e 20 24 3a 3a 70 61 74 68 20 64 61 74 join$::path dat
3cc0: 61 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  a]..    }.....
3cd0: 20 20 70 72 6f 63 20 69 73 52 75 6e 6e 69 6e 67    proc isRunning
3ce0: 57 6f 57 36 34 20 7b 7d 20 7b 0d 0a 20 20 20 20  WoW64 {} {..
3cf0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
3d00: 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 73 74  E: For now, just
3d10: 20 75 73 65 20 74 68 65 20 65 78 69 73 74 69 6e   use the existin
3d20: 67 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e  g test constrain
3d30: 74 20 66 6f 72 20 64 65 74 65 63 74 69 6e 67 0d  t for detecting.
3d40: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
3d50: 20 57 6f 57 36 34 20 70 72 6f 63 65 73 73 2e 0d   WoW64 process..
3d60: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3d70: 72 65 74 75 72 6e 20 5b 68 61 76 65 43 6f 6e 73  return [haveCons
3d80: 74 72 61 69 6e 74 20 77 6f 77 36 34 5d 0d 0a 20  traint wow64]..
3d90: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
3da0: 63 20 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73  c isMixedModeAss
3db0: 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65  embly { fileName
3dc0: 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20   {varName ""} }
3dd0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
3de0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c    # NOTE: First,
3df0: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 74   make sure the t
3e00: 65 73 74 20 73 75 69 74 65 20 69 6e 66 72 61 73  est suite infras
3e10: 74 72 75 63 74 75 72 65 20 69 73 20 61 6c 6c 6f  tructure is allo
3e20: 77 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 23 20  wed to..      #
3e30: 20 20 20 20 20 20 75 73 65 20 74 68 65 20 5b 65        use the [e
3e40: 78 65 63 5d 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20  xec] command...
3e50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
3e60: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
3e70: 3a 3a 6e 6f 28 65 78 65 63 29 5d 20 26 26 20 21  ::no(exec)] && !
3e80: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
3e90: 6f 28 63 6f 72 46 6c 61 67 73 29 5d 7d 20 74 68  o(corFlags)]} th
3ea0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
3eb0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
3ec0: 20 49 66 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e   If the location
3ed0: 20 6f 66 20 43 6f 72 46 6c 61 67 73 20 69 73 20   of CorFlags is
3ee0: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 65  present in the e
3ef0: 6e 76 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20  nvironment,..
3f00: 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65       #       use
3f10: 20 69 74 3b 20 6f 74 68 65 72 77 69 73 65 20 61   it; otherwise a
3f20: 73 73 75 6d 65 20 69 74 20 69 73 20 69 6e 20 74  ssume it is in t
3f30: 68 65 20 50 41 54 48 2e 0d 0a 20 20 20 20 20 20  he PATH...
3f40: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
3f50: 20 63 6f 72 46 6c 61 67 73 20 5b 65 78 70 72 20   corFlags [expr
3f60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 69 6e  {..          [in
3f70: 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28  fo exists ::env(
3f80: 43 6f 72 46 6c 61 67 73 29 5d 20 3f 20 24 3a 3a  CorFlags)] ? $:: 3f90: 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 20 3a 20 env(CorFlags) : 3fa0: 22 43 6f 72 46 6c 61 67 73 22 0d 0a 20 20 20 20 "CorFlags".. 3fb0: 20 20 20 20 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 }].... 3fc0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 3fd0: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 3fe0: 65 78 65 63 75 74 65 20 43 6f 72 46 6c 61 67 73 execute CorFlags 3ff0: 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 on the specifie 4000: 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 d file... 4010: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 4020: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 4030: 20 20 20 20 65 78 65 63 20 2d 2d 20 24 63 6f 72 exec --$cor
4040: 46 6c 61 67 73 20 5b 66 69 6c 65 20 6e 61 74 69  Flags [file nati
4050: 76 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  vename $fileName 4060: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 78 65 ].. } exe 4070: 63 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d c] == 0} then {. 4080: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 4090: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 40a0: 49 66 20 72 65 71 75 65 73 74 65 64 20 62 79 20 If requested by 40b0: 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 74 74 65 our caller, atte 40c0: 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 mpt to determine 40d0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 the.. 40e0: 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d # platform 40f0: 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 for the specifi 4100: 65 64 20 66 69 6c 65 20 61 73 20 77 65 6c 6c 2e ed file as well. 4110: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 4120: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 if {[st 4130: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 ring length$var
4140: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
4150: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
4160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
4170: 4e 4f 54 45 3a 20 53 74 6f 72 65 20 74 68 65 20  NOTE: Store the
4180: 70 6c 61 74 66 6f 72 6d 20 69 6e 20 74 68 65 20  platform in the
4190: 6e 61 6d 65 64 20 76 61 72 69 61 62 6c 65 20 69  named variable i
41a0: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  n the..
41b0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65     #       conte
41c0: 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72  xt of our caller
41d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
41e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 70  ..            up
41f0: 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 70  var 1 $varName p 4200: 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 latform.... 4210: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4220: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 4230: 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 tempt to extract 4240: 20 74 68 65 20 50 45 20 6c 69 6e 65 20 66 72 6f the PE line fro 4250: 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a m the captured.. 4260: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 4270: 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 output. If 4280: 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 22 50 this value is "P 4290: 45 33 32 22 20 6f 72 20 22 50 45 33 32 2b 22 2c E32" or "PE32+", 42a0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 the.. 42b0: 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 42c0: 6c 79 20 66 69 6c 65 20 69 73 20 33 32 2d 62 69 ly file is 32-bi 42d0: 74 20 6f 72 20 36 34 2d 62 69 74 2c 20 72 65 73 t or 64-bit, res 42e0: 70 65 63 74 69 76 65 6c 79 3b 0d 0a 20 20 20 20 pectively;.. 42f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4300: 6f 74 68 65 72 77 69 73 65 2c 20 69 74 73 20 74 otherwise, its t 4310: 79 70 65 20 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d ype is unknown.. 4320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 4330: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 4340: 70 61 74 74 65 72 6e 20 7b 5e 50 45 20 20 20 20 pattern {^PE 4350: 20 20 20 20 3a 20 28 50 45 33 32 7c 50 45 33 32 : (PE32|PE32 4360: 5c 2b 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 \+)\s+$}....
4370: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67          if {[reg
4380: 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61  exp -line -- $pa 4390: 74 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d ttern$exec dumm
43a0: 79 20 70 65 33 32 5d 7d 20 74 68 65 6e 20 7b 0d  y pe32]} then {.
43b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
43c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
43d0: 23 20 48 41 43 4b 3a 20 54 68 69 73 20 5b 73 77  # HACK: This [sw
43e0: 69 74 63 68 5d 20 61 73 73 75 6d 65 73 20 74 68  itch] assumes th
43f0: 61 74 20 33 32 2d 62 69 74 20 65 78 65 63 75 74  at 32-bit execut
4400: 61 62 6c 65 73 20 61 72 65 0d 0a 20 20 20 20 20  ables are..
4410: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
4420: 20 61 6c 77 61 79 73 20 78 38 36 20 61 6e 64 20   always x86 and
4430: 74 68 61 74 20 36 34 2d 62 69 74 20 65 78 65 63  that 64-bit exec
4440: 75 74 61 62 6c 65 73 20 61 72 65 20 61 6c 77 61  utables are alwa
4450: 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ys..
4460: 20 20 23 20 20 20 20 20 20 20 78 36 34 2e 0d 0a    #       x64...
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
4480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
4490: 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20  witch -exact --
44a0: 24 70 65 33 32 20 7b 0d 0a 20 20 20 20 20 20 20  $pe32 {.. 44b0: 20 20 20 20 20 20 20 20 20 50 45 33 32 20 7b 0d PE32 {. 44c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 44d0: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 44e0: 57 69 6e 33 32 0d 0a 20 20 20 20 20 20 20 20 20 Win32.. 44f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 4500: 20 20 20 20 20 20 20 20 20 20 50 45 33 32 2b 20 PE32+ 4510: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 4520: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 4530: 6d 20 78 36 34 0d 0a 20 20 20 20 20 20 20 20 20 m x64.. 4540: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 4550: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c defaul 4560: 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t {.. 4570: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 set platf 4580: 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 orm "".. 4590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 45a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 45b0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 45c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 45d0: 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d set platform "". 45e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 45f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 4600: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 4610: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 4620: 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 tempt to extract 4630: 20 74 68 65 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 the ILONLY line 4640: 20 66 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 from the captur 4650: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 ed.. # 4660: 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49 output. I 4670: 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 f this value is 4680: 7a 65 72 6f 2c 20 74 68 65 20 73 70 65 63 69 66 zero, the specif 4690: 69 65 64 20 66 69 6c 65 20 6d 75 73 74 0d 0a 20 ied file must.. 46a0: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 46b0: 20 62 65 20 61 20 6d 69 78 65 64 2d 6d 6f 64 65 be a mixed-mode 46c0: 20 61 73 73 65 6d 62 6c 79 3b 20 6f 74 68 65 72 assembly; other 46d0: 77 69 73 65 2c 20 69 74 20 63 6f 6e 74 61 69 6e wise, it contain 46e0: 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 s only.. 46f0: 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 # manage 4700: 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 d components... 4710: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 4720: 20 20 20 20 20 20 73 65 74 20 70 61 74 74 65 72 set patter 4730: 6e 20 7b 5e 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 n {^ILONLY : 4740: 28 30 7c 31 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 (0|1)\s+$}....
4750: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 72 65          if {![re
4760: 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70  gexp -line -- $p 4770: 61 74 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d attern$exec dum
4780: 6d 79 20 69 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e  my ilOnly]} then
4790: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
47a0: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20  return false..
47b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
47c0: 20 20 20 20 20 20 20 69 66 20 7b 21 24 69 6c 4f         if {!$ilO 47d0: 6e 6c 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 nly} then {.. 47e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 47f0: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 true.. 4800: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 4810: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 4820: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 4830: 49 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74 If the test suit 4840: 65 20 63 61 6e 6e 6f 74 20 75 73 65 20 5b 65 78 e cannot use [ex 4850: 65 63 5d 20 6f 72 20 65 78 65 63 75 74 69 6f 6e ec] or execution 4860: 20 6f 66 20 43 6f 72 46 6c 61 67 73 0d 0a 20 20 of CorFlags.. 4870: 20 20 20 20 23 20 20 20 20 20 20 20 66 61 69 6c # fail 4880: 65 64 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 ed, return false 4890: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 48a0: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. 48b0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 48c0: 6f 63 20 67 65 74 4e 61 74 69 76 65 4c 69 62 72 oc getNativeLibr 48d0: 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 aryFileNamesOnly 48e0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 48f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi 4900: 72 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 rst, check if th 4910: 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 e list of native 4920: 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 library file na 4930: 6d 65 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 mes has been.. 4940: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 # manu 4950: 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e ally overridden. 4960: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4970: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 4980: 73 20 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 s ::native_libra 4990: 72 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 ry_file_names] & 49a0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 49b0: 6c 6c 65 6e 67 74 68 20 24 3a 3a 6e 61 74 69 76 llength$::nativ
49c0: 65 5f 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e  e_library_file_n
49d0: 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ames] > 0} then
49e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
49f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
4a00: 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65  e list of native
4a10: 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61   library file na
4a20: 6d 65 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65  mes has been ove
4a30: 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20  rridden;..
4a40: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66    #       theref
4a50: 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62  ore, use it verb
4a60: 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23  atim...        #
4a70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4a80: 20 24 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61   $::native_libra 4a90: 72 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 0d 0a 20 ry_file_names.. 4aa0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 4ab0: 69 73 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e isWindows]} then 4ac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 4ad0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f # NOTE: O 4ae0: 74 68 65 72 77 69 73 65 2c 20 6f 6e 20 57 69 6e therwise, on Win 4af0: 64 6f 77 73 2c 20 61 6c 77 61 79 73 20 75 73 65 dows, always use 4b00: 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c the default fil 4b10: 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 e name.. 4b20: 23 20 20 20 20 20 20 20 22 73 71 6c 69 74 65 33 # "sqlite3 4b30: 2e 64 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 .dll"... 4b40: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 4b50: 6e 20 5b 6c 69 73 74 20 73 71 6c 69 74 65 33 2e n [list sqlite3. 4b60: 64 6c 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c dll].. } el 4b70: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 4b80: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 4b90: 20 4f 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 Otherwise, retu 4ba0: 72 6e 20 62 6f 74 68 20 74 68 65 20 67 65 6e 65 rn both the gene 4bb0: 72 69 63 20 50 4f 53 49 58 20 66 69 6c 65 20 6e ric POSIX file n 4bc0: 61 6d 65 20 61 6e 64 20 74 68 65 0d 0a 20 20 20 ame and the.. 4bd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 4d 61 63 # Mac 4be0: 20 4f 53 20 58 20 66 69 6c 65 20 6e 61 6d 65 2c OS X file name, 4bf0: 20 73 69 6e 63 65 20 77 65 20 64 6f 20 6e 6f 74 since we do not 4c00: 20 63 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 currently have 4c10: 61 6e 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 an easy.. 4c20: 20 23 20 20 20 20 20 20 20 77 61 79 20 74 6f 20 # way to 4c30: 64 65 74 65 63 74 20 77 68 69 63 68 20 6f 66 20 detect which of 4c40: 74 68 6f 73 65 20 70 6c 61 74 66 6f 72 6d 73 20 those platforms 4c50: 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f we are running o 4c60: 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 n... #.. 4c70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l 4c80: 69 73 74 20 6c 69 62 73 71 6c 69 74 65 33 2e 64 ist libsqlite3.d 4c90: 79 6c 69 62 20 6c 69 62 73 71 6c 69 74 65 33 2e ylib libsqlite3. 4ca0: 73 6f 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 so].. }.. 4cb0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 4cc0: 20 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d getInteropAssem 4cd0: 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 blyFileNamesOnly 4ce0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 4cf0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi 4d00: 72 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 rst, check if th 4d10: 65 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f e list of intero 4d20: 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 p assembly file 4d30: 6e 61 6d 65 73 20 68 61 73 20 62 65 65 6e 0d 0a names has been.. 4d40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 # ma 4d50: 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 nually overridde 4d60: 6e 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 n... #.. 4d70: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 4d80: 73 74 73 20 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 sts ::interop_as 4d90: 73 65 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 sembly_file_name 4da0: 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 s] && \.. 4db0: 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 69 [llength$::i
4dc0: 6e 74 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f  nterop_assembly_
4dd0: 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d  file_names] > 0}
4de0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
4df0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
4e00: 54 45 3a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  TE: The list of
4e10: 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
4e20: 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20   file names has
4e30: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
4e40: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4e50: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
4e60: 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20   it verbatim...
4e70: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4e80: 20 20 72 65 74 75 72 6e 20 24 3a 3a 69 6e 74 65    return $::inte 4e90: 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69 6c rop_assembly_fil 4ea0: 65 5f 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d e_names.. } 4eb0: 20 65 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 elseif {[isWind 4ec0: 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ows]} then {.. 4ed0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4ee0: 20 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 # NOTE: Otherwi 4ef0: 73 65 2c 20 6f 6e 20 57 69 6e 64 6f 77 73 2c 20 se, on Windows, 4f00: 61 6c 77 61 79 73 20 75 73 65 20 74 68 65 20 64 always use the d 4f10: 65 66 61 75 6c 74 20 66 69 6c 65 20 6e 61 6d 65 efault file name 4f20: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 4f30: 20 20 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f "SQLite.Intero 4f40: 70 2e 64 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 p.dll"... 4f50: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 4f60: 72 6e 20 5b 6c 69 73 74 20 53 51 4c 69 74 65 2e rn [list SQLite. 4f70: 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 0d 0a 20 20 Interop.dll].. 4f80: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 4f90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4fa0: 20 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 # NOTE: Otherwi 4fb0: 73 65 2c 20 72 65 74 75 72 6e 20 62 6f 74 68 20 se, return both 4fc0: 74 68 65 20 67 65 6e 65 72 69 63 20 50 4f 53 49 the generic POSI 4fd0: 58 20 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64 20 X file name and 4fe0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 4ff0: 20 20 20 20 20 4d 61 63 20 4f 53 20 58 20 66 69 Mac OS X fi 5000: 6c 65 20 6e 61 6d 65 2c 20 73 69 6e 63 65 20 77 le name, since w 5010: 65 20 64 6f 20 6e 6f 74 20 63 75 72 72 65 6e 74 e do not current 5020: 6c 79 20 68 61 76 65 20 61 6e 20 65 61 73 79 0d ly have an easy. 5030: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 5040: 20 77 61 79 20 74 6f 20 64 65 74 65 63 74 20 77 way to detect w 5050: 68 69 63 68 20 6f 66 20 74 68 6f 73 65 20 70 6c hich of those pl 5060: 61 74 66 6f 72 6d 73 20 77 65 20 61 72 65 20 72 atforms we are r 5070: 75 6e 6e 69 6e 67 20 6f 6e 2e 0d 0a 20 20 20 20 unning on... 5080: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 5090: 65 74 75 72 6e 20 5b 6c 69 73 74 20 6c 69 62 53 eturn [list libS 50a0: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 79 QLite.Interop.dy 50b0: 6c 69 62 20 6c 69 62 53 51 4c 69 74 65 2e 49 6e lib libSQLite.In 50c0: 74 65 72 6f 70 2e 73 6f 5d 0d 0a 20 20 20 20 20 terop.so].. 50d0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 50e0: 20 20 70 72 6f 63 20 67 65 74 43 6f 72 65 45 78 proc getCoreEx 50f0: 74 65 6e 73 69 6f 6e 42 69 6e 61 72 79 46 69 6c tensionBinaryFil 5100: 65 4e 61 6d 65 20 7b 20 7b 64 65 66 61 75 6c 74 eName { {default 5110: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ""} } {.. 5120: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 set fileName [ge 5130: 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e tCoreBinaryFileN 5140: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ame].... if 5150: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
5160: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
5170: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
5180: 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  n $fileName.. 5190: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 51a0: 74 75 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 turn$default..
51b0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
51c0: 63 20 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62  c isBuildAvailab
51d0: 6c 65 20 7b 20 6e 61 74 69 76 65 20 64 69 72 65  le { native dire
51e0: 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22  ctory {varName "
51f0: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  "} } {..      #.
5200: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42  .      # NOTE: B
5210: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71  uild the fully q
5220: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61  ualified file na
5230: 6d 65 20 66 6f 72 20 74 68 65 20 70 72 69 6d 61  me for the prima
5240: 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ry assembly..
5250: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61     #       conta
5260: 69 6e 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d  ining the System
5270: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e  .Data.SQLite man
5280: 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e  aged components.
5290: 20 20 49 74 0d 0a 20 20 20 20 20 20 23 20 20 20    It..      #
52a0: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f      should be no
52b0: 74 65 64 20 74 68 61 74 20 74 68 69 73 20 61 73  ted that this as
52c0: 73 65 6d 62 6c 79 20 66 69 6c 65 20 6d 61 79 20  sembly file may
52d0: 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65  also contain the
52e0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
52f0: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74  native component
5300: 73 2c 20 69 66 20 61 20 6e 61 74 69 76 65 20 62  s, if a native b
5310: 75 69 6c 64 20 69 73 20 69 6e 20 75 73 65 2e 0d  uild is in use..
5320: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
5330: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
5340: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
5350: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74  ile join $direct 5360: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ory \.. 5370: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 5380: 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 ite.dll]].... 5390: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex 53a0: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
53b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
53c0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20   return false..
53d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
53e0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
53f0: 20 41 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f   Attempt to auto
5400: 6d 61 74 69 63 61 6c 6c 79 20 64 65 74 65 63 74  matically detect
5410: 20 69 66 20 74 68 65 20 70 72 69 6d 61 72 79 20   if the primary
5420: 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..
5430: 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 73  #       contains
5440: 20 61 6e 79 20 6e 61 74 69 76 65 20 63 6f 6d 70   any native comp
5450: 6f 6e 65 6e 74 73 2c 20 69 66 20 6e 65 63 65 73  onents, if neces
5460: 73 61 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  sary...      #..
5470: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
5480: 67 20 6c 65 6e 67 74 68 20 24 6e 61 74 69 76 65  g length $native 5490: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 54a0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 54b0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e ing length$varN
54c0: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
54d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 76 61  ..          upva
54e0: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61  r 1 $varName$va
54f0: 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d  rName..        }
5500: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
5510: 6e 61 74 69 76 65 20 5b 69 73 4d 69 78 65 64 4d  native [isMixedM
5520: 6f 64 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  odeAssembly $fil 5530: 65 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 5d 0d eName$varName].
5540: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
5550: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
5560: 45 3a 20 49 66 20 74 68 65 20 70 72 69 6d 61 72  E: If the primar
5570: 79 20 61 73 73 65 6d 62 6c 79 20 61 6c 73 6f 20  y assembly also
5580: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61 74  contains the nat
5590: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0d  ive components,.
55a0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77  .      #       w
55b0: 65 20 68 61 76 65 20 65 76 65 72 79 74 68 69 6e  e have everythin
55c0: 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20  g we need...
55d0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24    #..      if {$55e0: 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a native} then {.. 55f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t 5600: 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rue.. }.... 5610: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 5620: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 6d 61 NOTE: If the ma 5630: 63 68 69 6e 65 20 6e 61 6d 65 20 69 73 20 75 6e chine name is un 5640: 61 76 61 69 6c 61 62 6c 65 2c 20 74 68 65 72 65 available, there 5650: 20 69 73 20 6e 6f 74 68 69 67 6e 20 65 6c 73 65 is nothign else 5660: 20 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 we.. # 5670: 20 20 20 63 61 6e 20 64 6f 2e 0d 0a 20 20 20 20 can do... 5680: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 5690: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 56a0: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 cl_platform(mach 56b0: 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ine)]} then {.. 56c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa 56d0: 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a lse.. }.... 56e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 56f0: 20 4e 4f 54 45 3a 20 57 68 61 74 20 69 73 20 74 NOTE: What is t 5700: 68 65 20 61 72 63 68 69 74 65 63 74 75 72 65 20 he architecture 5710: 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 for this machine 5720: 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ?.. #.. 5730: 20 20 73 65 74 20 61 72 63 68 69 74 65 63 74 75 set architectu 5740: 72 65 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 re [machineToPla 5750: 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 tform$::tcl_pla
5760: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 20 74  tform(machine) t
5770: 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  rue]....      #.
5780: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57  .      # NOTE: W
5790: 68 61 74 20 69 73 20 74 68 65 20 70 6c 61 74 66  hat is the platf
57a0: 6f 72 6d 20 66 6f 72 20 74 68 69 73 20 6d 61 63  orm for this mac
57b0: 68 69 6e 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a  hine?..      #..
57c0: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
57d0: 72 6d 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61  rm [machineToPla
57e0: 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61  tform $::tcl_pla 57f0: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 0d tform(machine)]. 5800: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 5810: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 5820: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 the fully qualif 5830: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f ied file name fo 5840: 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 r the interop as 5850: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 sembly.. # 5860: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 containing 5870: 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 the System.Data 5880: 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 63 .SQLite native c 5890: 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 66 20 74 omponents. If t 58a0: 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 his.. # 58b0: 20 20 20 66 69 6c 65 20 65 78 69 73 74 73 2c 20 file exists, 58c0: 77 65 20 73 68 6f 75 6c 64 20 68 61 76 65 20 65 we should have e 58d0: 76 65 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 verything we nee 58e0: 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 58f0: 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 5900: 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 ameOnly [getInte 5910: 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e ropAssemblyFileN 5920: 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 amesOnly] {.. 5930: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam 5940: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 5950: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 me [file join$d
5960: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20  irectory \..
5970: 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65          $archite 5980: 63 74 75 72 65 20 24 66 69 6c 65 4e 61 6d 65 4f cture$fileNameO
5990: 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  nly]]....
59a0: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
59b0: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 59c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 59d0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 59e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 59f0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b set fileName [ 5a00: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 5a10: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 [file join$dire
5a20: 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20  ctory \..
5a30: 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 24       $platform$
5a40: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a  fileNameOnly]]..
5a50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66  ..        if {[f
5a60: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file 5a70: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 5a80: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 5a90: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d true.. }. 5aa0: 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 ... set f 5ab0: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 ileName [file na 5ac0: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 5ad0: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c oin$directory \
5ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 66  ..            $f 5af0: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d ileNameOnly]]... 5b00: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 . if {[fi 5b10: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
5b20: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
5b30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
5b40: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  rue..        }..
5b50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
5b60: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
5b70: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c  : Build the full
5b80: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65  y qualified file
5b90: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 53 51   name for the SQ
5ba0: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20  Lite core..
5bb0: 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79   #       library
5bc0: 2e 20 20 49 66 20 74 68 69 73 20 66 69 6c 65 20  .  If this file
5bd0: 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c  exists, we shoul
5be0: 64 20 68 61 76 65 20 65 76 65 72 79 74 68 69 6e  d have everythin
5bf0: 67 20 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20  g we..      #
5c00: 20 20 20 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20      need...
5c10: 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63   #..      foreac
5c20: 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b  h fileNameOnly [
5c30: 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79  getNativeLibrary
5c40: 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b  FileNamesOnly] {
5c50: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69  ..        set fi
5c60: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74  leName [file nat
5c70: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
5c80: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d  in $directory \. 5c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72 .$ar
5ca0: 63 68 69 74 65 63 74 75 72 65 20 24 66 69 6c 65  chitecture $file 5cb0: 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 NameOnly]].... 5cc0: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 5cd0: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
5ce0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
5cf0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
5d00: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
5d10: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
5d20: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ame [file native
5d30: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
5d40: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20  $directory \.. 5d50: 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66$platf
5d60: 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c  orm $fileNameOnl 5d70: 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 y]].... i 5d80: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 f {[file exists 5d90: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
5da0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65   {..          re
5db0: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
5dc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
5dd0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
5de0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
5df0: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74  ile join $direct 5e00: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ory \.. 5e10: 20 20 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79$fileNameOnly
5e20: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  ]]....        if
5e30: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $5e40: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 5e50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 {.. ret 5e60: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. 5e70: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 5e80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 5e90: 20 4e 4f 54 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f NOTE: One or mo 5ea0: 72 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e re native compon 5eb0: 65 6e 74 73 20 6e 65 65 64 65 64 20 62 79 20 53 ents needed by S 5ec0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 5ed0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 5ee0: 20 61 72 65 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 are missing... 5ef0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re 5f00: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 turn false.. 5f10: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 }..... proc i 5f20: 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c sReleaseAvailabl 5f30: 65 20 7b 20 64 69 72 65 63 74 6f 72 79 20 7b 76 e { directory {v 5f40: 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a arName ""} } {.. 5f50: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 5f60: 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d g length$varNam
5f70: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
5f80: 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20          upvar 1
5f90: 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d  $varName$varNam
5fa0: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  e..      }....
5fb0: 20 20 20 20 72 65 74 75 72 6e 20 5b 69 73 42 75      return [isBu
5fc0: 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 22 22 20  ildAvailable ""
5fd0: 24 64 69 72 65 63 74 6f 72 79 20 24 76 61 72 4e  $directory$varN
5fe0: 61 6d 65 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  ame]..    }.....
5ff0: 20 20 20 20 70 72 6f 63 20 6a 6f 69 6e 42 75 69      proc joinBui
6000: 6c 64 44 69 72 65 63 74 6f 72 79 20 7b 20 6e 61  ldDirectory { na
6010: 74 69 76 65 20 70 61 74 68 20 79 65 61 72 20 70  tive path year p
6020: 6c 61 74 66 6f 72 6d 20 63 6f 6e 66 69 67 75 72  latform configur
6030: 61 74 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20  ation } {..
6040: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
6050: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 61 6e 64  : Figure out and
6060: 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74 68 65   then return the
6070: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
6080: 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75 69   path to the bui
6090: 6c 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ld..      #
60a0: 20 20 64 69 72 65 63 74 6f 72 79 20 62 61 73 65    directory base
60b0: 64 20 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72 67  d on all the arg
60c0: 75 6d 65 6e 74 73 20 70 72 6f 76 69 64 65 64 20  uments provided
60d0: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a  by our caller...
60e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
60f0: 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e  f {$native} then 6100: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 6110: 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 rn [file join$p
6120: 61 74 68 20 62 69 6e 20 24 79 65 61 72 20 24 70  ath bin $year$p
6130: 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75  latform $configu 6140: 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d ration].. } 6150: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 6160: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f return [file jo 6170: 69 6e 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 in$path bin $ye 6180: 61 72 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f ar$configuratio
6190: 6e 20 62 69 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  n bin]..      }.
61a0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
61b0: 72 6f 63 20 67 65 74 42 75 69 6c 64 44 69 72 65  roc getBuildDire
61c0: 63 74 6f 72 79 20 7b 20 6d 61 6e 61 67 65 64 4f  ctory { managedO
61d0: 6e 6c 79 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  nly } {..      #
61e0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
61f0: 53 65 65 20 69 66 20 74 68 65 20 22 6e 61 74 69  See if the "nati
6200: 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69  ve" runtime opti
6210: 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e  on has been set.
6220: 20 20 49 66 20 73 6f 2c 20 75 73 65 20 74 68 65    If so, use the
6230: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6240: 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68  directory for th
6250: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
6260: 65 6d 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68  embly (a.k.a. th
6270: 65 20 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70  e native interop
6280: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6290: 61 73 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65  assembly).  To e
62a0: 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f  nable this optio
62b0: 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e  n via the comman
62c0: 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d  d line, enter a.
62d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
62e0: 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74  ommand similar t
62f0: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c  o one of the fol
6300: 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f  lowing (all on o
6310: 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20  ne line):..
6320: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20   #..      #
6330: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65    EagleShell.exe
6340: 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75   -initialize -ru
6350: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
6360: 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ve..      #
6370: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
6380: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
6390: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
63a0: 20 20 20 20 20 20 54 6f 20 65 6e 61 62 6c 65 20        To enable
63b0: 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20  this option via
63c0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
63d0: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 22 62   prior to the "b
63e0: 65 74 61 20 31 36 22 0d 0a 20 20 20 20 20 20 23  eta 16"..      #
63f0: 20 20 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f         release o
6400: 66 20 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c  f Eagle, the fol
6410: 6c 6f 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d  lowing command m
6420: 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 73 74  ust be used inst
6430: 65 61 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ead..      #
6440: 20 20 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20     (also all on
6450: 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20  one line):..
6460: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
6470: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
6480: 65 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70  e -initialize -p
6490: 6f 73 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20  ostInitialize..
64a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 22       #         "
64b0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
64c0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
64d0: 69 76 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70  ive AddRuntimeOp
64e0: 74 69 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20  tion native"..
64f0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66      #         -f
6500: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c  ile .\path\to\al
6510: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23  l.eagle..      #
6520: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
6530: 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64  o exists ::build
6540: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c  _directory] && \
6550: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
6560: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75  ing length $::bu 6570: 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e ild_directory] > 6580: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 6590: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 65a0: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 NOTE: The locat 65b0: 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 ion of the build 65c0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 directory has b 65d0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d een overridden;. 65e0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 65f0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 6600: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 it verbatim... 6610: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 6620: 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 return$::build
6630: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  _directory..
6640: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
6650: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6660: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e   NOTE: If the "n
6670: 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f  ative" runtime o
6680: 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68  ption is set, th
6690: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
66a0: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23  embly..        #
66b0: 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20         is being
66c0: 74 65 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74  tested.  In that
66d0: 20 63 61 73 65 2c 20 74 68 65 20 70 61 74 68 20   case, the path
66e0: 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  to the build dir
66f0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..
6700: 23 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e  #       will con
6710: 74 61 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72  tain the platfor
6720: 6d 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74  m name and all t
6730: 68 65 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65  he binaries unde
6740: 72 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  r test..
6750: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  #       should b
6760: 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61  e present in tha
6770: 74 20 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66  t directory.  If
6780: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75   the "native" ru
6790: 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23  ntime..        #
67a0: 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73         option is
67b0: 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75   not set, the bu
67c0: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 77 69  ild directory wi
67d0: 6c 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64  ll be considered
67e0: 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..
67f0: 23 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72  #       "platfor
6800: 6d 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68  m-neutral", with
6810: 20 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63   the notable exc
6820: 65 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61  eption of any na
6830: 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20  tive..        #
6840: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28        assembly (
6850: 65 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74  e.g. "SQLite.Int
6860: 65 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65  erop.dll") copie
6870: 64 20 74 68 65 72 65 20 64 75 72 69 6e 67 20 74  d there during t
6880: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
6890: 20 20 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73      build proces
68a0: 73 20 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68  s itself.  If th
68b0: 65 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20  e build process
68c0: 73 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74  somehow does not
68d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
68e0: 20 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76    copy the nativ
68f0: 65 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74  e assembly for t
6900: 68 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f  his platform, mo
6910: 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d  st of the tests.
6920: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6930: 20 69 6e 20 74 68 65 20 73 75 69 74 65 20 77 69   in the suite wi
6940: 6c 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69  ll simply be ski
6950: 70 70 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79  pped.  Generally
6960: 20 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65   speaking, there
6970: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6980: 20 20 61 72 65 20 74 77 6f 20 77 61 79 73 20 74    are two ways t
6990: 6f 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61  o build the bina
69a0: 72 69 65 73 20 77 68 65 6e 20 70 72 65 70 61 72  ries when prepar
69b0: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a  ing to run the..
69c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
69d0: 74 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20  test suite:..
69e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
69f0: 23 20 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64  #       1. Build
6a00: 20 74 68 65 20 73 65 70 61 72 61 74 65 20 6d 61   the separate ma
6a10: 6e 61 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65  naged and native
6a20: 20 61 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e   assemblies usin
6a30: 67 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20  g some..
6a40: 23 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61  #          comma
6a50: 6e 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d  nds similar to:.
6a60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
6a70: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62      #          b
6a80: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69  uild.bat ${Confi 6a90: 67 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 guration}Managed 6aa0: 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d Only${Platform}
6ab0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6ac0: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24       build.bat $6ad0: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e {Configuration}N 6ae0: 61 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 ativeOnly${Plat
6af0: 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23  form}..        #
6b00: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6b10: 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e       Where ${Con 6b20: 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 figuration} is e 6b30: 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 ither "Debug" or 6b40: 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a "Release" and.. 6b50: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 6b60: 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69${Platform} i
6b70: 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22  s either "Win32"
6b80: 20 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20   or "x64"...
6b90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6ba0: 20 20 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20         2. Build
6bb0: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
6bc0: 73 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20  ssembly using a
6bd0: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20  command similar
6be0: 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  to:..        #..
6bf0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6c00: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43     build.bat ${C 6c10: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b onfiguration}${
6c20: 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20  Platform}..
6c30: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
6c40: 20 20 20 20 20 20 20 20 20 57 68 65 72 65 20 24           Where $6c50: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 {Configuration} 6c60: 69 73 20 65 69 74 68 65 72 20 22 44 65 62 75 67 is either "Debug 6c70: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 " or "Release" a 6c80: 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 nd.. # 6c90: 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72${Platfor
6ca0: 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 57 69  m} is either "Wi
6cb0: 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20  n32" or "x64".
6cc0: 49 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  If this command
6cd0: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
6ce0: 20 20 20 20 20 20 20 75 73 65 64 2c 20 76 61 72         used, var
6cf0: 69 6f 75 73 20 74 65 73 74 73 20 74 68 61 74 20  ious tests that
6d00: 72 65 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65  require suppleme
6d10: 6e 74 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20  ntary managed..
6d20: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
6d30: 20 20 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e    assemblies (e.
6d40: 67 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20  g. LINQ) may be
6d50: 73 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74  skipped unless t
6d60: 68 6f 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20  hose binaries..
6d70: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
6d80: 20 20 61 72 65 20 73 75 62 73 65 71 75 65 6e 74    are subsequent
6d90: 6c 79 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74  ly copied into t
6da0: 68 65 20 63 6f 72 72 65 63 74 20 64 69 72 65 63  he correct direc
6db0: 74 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20  tory (i.e. by..
6dc0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
6dd0: 20 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22    "test_all.bat"
6de0: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  )...        #..
6df0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e         #       N
6e00: 6f 74 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20  ote that all of
6e10: 74 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e  the build comman
6e20: 64 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65  ds above will de
6e30: 66 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a  fault to using..
6e40: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6e50: 74 68 65 20 6c 61 74 65 73 74 20 76 65 72 73 69  the latest versi
6e60: 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76  on of MSBuild av
6e70: 61 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20  ailable and the
6e80: 22 74 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d  "test_year" may.
6e90: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6ea0: 20 6e 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75   need to be adju
6eb0: 73 74 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79  sted accordingly
6ec0: 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e   to actually run
6ed0: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e   the test suite.
6ee0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6ef0: 20 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 63    Refer to the c
6f00: 6f 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42  omments in [getB
6f10: 75 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f  uildYear] for mo
6f20: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  re information o
6f30: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
6f40: 20 20 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68     how to set th
6f50: 69 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20  is variable...
6f60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
6f70: 20 73 65 74 20 6e 61 74 69 76 65 20 5b 65 78 70   set native [exp
6f80: 72 20 7b 21 24 6d 61 6e 61 67 65 64 4f 6e 6c 79  r {!$managedOnly 6f90: 20 26 26 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f && [hasRuntimeO 6fa0: 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 5d 0d ption native]}]. 6fb0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur 6fc0: 6e 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 n [joinBuildDire 6fd0: 63 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5b 67 ctory$native [g
6fe0: 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63  etBuildBaseDirec
6ff0: 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20  tory] \..
7000: 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 59 65       [getBuildYe
7010: 61 72 5d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61  ar] [getBuildPla
7020: 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b  tform $native] [ 7030: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur 7040: 61 74 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d ation]].. } 7050: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 7060: 70 72 6f 63 20 67 65 74 52 65 6c 65 61 73 65 56 proc getReleaseV 7070: 65 72 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 ersion {} {.. 7080: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7090: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 TE: Figure out t 70a0: 68 65 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 he release versi 70b0: 6f 6e 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 on for use with 70c0: 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 the build direct 70d0: 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ory.. # 70e0: 20 20 20 77 68 65 6e 20 63 68 65 63 6b 69 6e 67 when checking 70f0: 20 66 6f 72 20 61 76 61 69 6c 61 62 6c 65 20 72 for available r 7100: 65 6c 65 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 eleases... 7110: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 7120: 66 6f 20 65 78 69 73 74 73 20 3a 3a 72 65 6c 65 fo exists ::rele 7130: 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20 ase_version] && 7140: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 7150: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 72 ring length$::r
7160: 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20  elease_version]
7170: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
7180: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7190: 23 20 4e 4f 54 45 3a 20 54 68 65 20 72 65 6c 65  # NOTE: The rele
71a0: 61 73 65 20 76 65 72 73 69 6f 6e 20 68 61 73 20  ase version has
71b0: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
71c0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
71d0: 69 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  it..        #
71e0: 20 20 20 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20      verbatim...
71f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
7200: 20 20 72 65 74 75 72 6e 20 24 3a 3a 72 65 6c 65    return $::rele 7210: 61 73 65 5f 76 65 72 73 69 6f 6e 0d 0a 20 20 20 ase_version.. 7220: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 7230: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 7240: 23 20 4e 4f 54 45 3a 20 4e 6f 20 72 65 6c 65 61 # NOTE: No relea 7250: 73 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76 se version is av 7260: 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 ailable, return 7270: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 7280: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 7290: 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e It is importan 72a0: 74 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 t to return an e 72b0: 6d 70 74 79 20 73 74 72 69 6e 67 20 68 65 72 65 mpty string here 72c0: 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 because the.. 72d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 72e0: 73 75 6c 74 20 6f 66 20 74 68 69 73 20 70 72 6f sult of this pro 72f0: 63 65 64 75 72 65 20 6d 61 79 20 62 65 20 75 73 cedure may be us 7300: 65 64 20 77 69 74 68 20 5b 66 69 6c 65 20 6a 6f ed with [file jo 7310: 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d in]... #. 7320: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 7330: 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 "".. }.. 7340: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 7350: 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName 7360: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 { fileName mana 7370: 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 gedOnly {platfor 7380: 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 m ""} } {.. 7390: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 73a0: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 : Returns the sp 73b0: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d ecified file nam 73c0: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20 e as if it were 73d0: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a located in the.. 73e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 # bu 73f0: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64 ild directory, d 7400: 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 iscarding any di 7410: 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 rectory informat 7420: 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 ion present.. 7430: 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 # in th 7440: 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 e file name as p 7450: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 rovided by our c 7460: 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d aller... #. 7470: 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c . set resul 7480: 74 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 t [file nativena 7490: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 74a0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 [file join [getB 74b0: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6d uildDirectory$m
74c0: 61 6e 61 67 65 64 4f 6e 6c 79 5d 20 24 70 6c 61  anagedOnly] $pla 74d0: 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 tform \.. 74e0: 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 [file tail$f
74f0: 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20 20  ileName]]]....
7500: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 48      #..      # H
7510: 41 43 4b 3a 20 57 68 65 6e 20 72 75 6e 6e 69 6e  ACK: When runnin
7520: 67 20 6f 6e 20 57 6f 57 36 34 2c 20 61 73 73 75  g on WoW64, assu
7530: 6d 65 20 74 68 65 20 74 65 73 74 20 65 78 65 63  me the test exec
7540: 75 74 61 62 6c 65 73 20 61 72 65 20 70 72 65 73  utables are pres
7550: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ent..      #
7560: 20 20 20 77 69 74 68 20 74 68 65 20 22 33 32 22     with the "32"
7570: 20 73 75 66 66 69 78 20 6f 6e 20 74 68 65 6d 2e   suffix on them.
7580: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
7590: 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57   if {[isRunningW
75a0: 6f 57 36 34 5d 20 26 26 20 5b 66 69 6c 65 20 65  oW64] && [file e
75b0: 78 74 65 6e 73 69 6f 6e 20 24 72 65 73 75 6c 74  xtension $result 75c0: 5d 20 65 71 20 22 2e 65 78 65 22 7d 20 74 68 65 ] eq ".exe"} the 75d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 75e0: 20 72 65 73 75 6c 74 20 5b 61 70 70 65 6e 64 41 result [appendA 75f0: 72 67 73 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 rgs [file rootna 7600: 6d 65 20 24 72 65 73 75 6c 74 5d 20 33 32 2e 65 me$result] 32.e
7610: 78 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  xe]..      }....
7620: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 7630: 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a sult.. }..... 7640: 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 65 proc getExte 7650: 72 6e 61 6c 44 69 72 65 63 74 6f 72 79 20 7b 7d rnalDirectory {} 7660: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 7670: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 7680: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e procedure return 7690: 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 s the directory 76a0: 77 68 65 72 65 20 74 68 65 20 65 78 74 65 72 6e where the extern 76b0: 61 6c 20 62 69 6e 61 72 79 0d 0a 20 20 20 20 20 al binary.. 76c0: 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20 61 # files a 76d0: 72 65 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 re located... 76e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 76f0: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e rn [file nativen 7700: 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d ame [file dirnam 7710: 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 e [file dirname 7720: 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 5d 5d 5d [info binary]]]] 7730: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 7740: 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 44 69 proc getBinaryDi 7750: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 rectory {} {.. 7760: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 7770: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced 7780: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 ure returns the 7790: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 directory where 77a0: 74 68 65 20 74 65 73 74 20 61 70 70 6c 69 63 61 the test applica 77b0: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 tion.. # 77c0: 20 20 20 20 69 74 73 65 6c 66 20 28 69 2e 65 2e itself (i.e. 77d0: 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c the Eagle shell 77e0: 29 20 69 73 20 6c 6f 63 61 74 65 64 2e 20 20 54 ) is located. T 77f0: 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64 his will be used 7800: 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 as.. # 7810: 20 20 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 the destinati 7820: 6f 6e 20 66 6f 72 20 74 68 65 20 63 6f 70 69 65 on for the copie 7830: 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 d System.Data.SQ 7840: 4c 69 74 65 20 6e 61 74 69 76 65 20 61 6e 64 0d Lite native and. 7850: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d . # m 7860: 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 anaged assemblie 7870: 73 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20 s (i.e. because 7880: 74 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 this is one of t 7890: 68 65 20 66 65 77 20 70 6c 61 63 65 73 0d 0a 20 he few places.. 78a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 65 # whe 78b0: 72 65 20 74 68 65 20 43 4c 52 20 77 69 6c 6c 20 re the CLR will 78c0: 61 63 74 75 61 6c 6c 79 20 66 69 6e 64 20 61 6e actually find an 78d0: 64 20 6c 6f 61 64 20 74 68 65 6d 20 70 72 6f 70 d load them prop 78e0: 65 72 6c 79 29 2e 0d 0a 20 20 20 20 20 20 23 0d erly)... #. 78f0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 7900: 20 65 78 69 73 74 73 20 3a 3a 62 69 6e 61 72 79 exists ::binary 7910: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 7920: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 7930: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 69 ing length$::bi
7940: 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20  nary_directory]
7950: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
7960: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7970: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61  # NOTE: The loca
7980: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 69 6e 61  tion of the bina
7990: 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  ry directory has
79a0: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
79b0: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ;..        #
79c0: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73     therefore, us
79d0: 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a  e it verbatim...
79e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
79f0: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 69 6e     return $::bin 7a00: 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 ary_directory.. 7a10: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 7a20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69 return [i 7a30: 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 nfo binary].. 7a40: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 7a50: 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 65 proc getExte 7a60: 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 7b 20 66 rnalFileName { f 7a70: 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 ileName } {.. 7a80: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7a90: 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 TE: Returns the 7aa0: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e specified file n 7ab0: 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 72 ame as if it wer 7ac0: 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 e located in the 7ad0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7ae0: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 directory contai 7af0: 6e 69 6e 67 20 74 68 65 20 65 78 74 65 72 6e 61 ning the externa 7b00: 6c 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 20 l binaries... 7b10: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 7b20: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e rn [file nativen 7b30: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b ame [file join [ 7b40: 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 63 getExternalDirec 7b50: 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d tory]$fileName]
7b60: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
7b70: 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 46   proc getBinaryF
7b80: 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61  ileName { fileNa
7b90: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
7ba0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
7bb0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
7bc0: 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69  urns the specifi
7bd0: 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20  ed file name as
7be0: 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74  if it were locat
7bf0: 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ed in the..
7c00: 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20   #       binary
7c10: 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61  directory, disca
7c20: 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74  rding any direct
7c30: 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ory information
7c40: 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23  present..      #
7c50: 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69         in the fi
7c60: 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69  le name as provi
7c70: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
7c80: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  r...      #..
7c90: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20     return [file
7ca0: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20  nativename \..
7cb0: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f          [file jo
7cc0: 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72  in [getBinaryDir
7cd0: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72  ectory] $platfor 7ce0: 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 m [file tail$fi
7cf0: 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d  leName]]]..    }
7d00: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
7d10: 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e  tCoreBinaryFileN
7d20: 61 6d 65 20 7b 20 7b 70 6c 61 74 66 6f 72 6d 20  ame { {platform
7d30: 22 22 7d 20 7b 73 74 61 6e 64 61 72 64 20 22 22  ""} {standard ""
7d40: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
7d50: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
7d60: 74 75 72 6e 73 20 74 68 65 20 66 75 6c 6c 20 70  turns the full p
7d70: 61 74 68 20 66 6f 72 20 74 68 65 20 66 69 6c 65  ath for the file
7d80: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the
7d90: 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..
7da0: 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76     #       nativ
7db0: 65 20 6c 69 62 72 61 72 79 20 63 6f 64 65 20 66  e library code f
7dc0: 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d  or this platform
7dd0: 2e 20 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20  .  First, check
7de0: 61 6e 64 20 73 65 65 20 69 66 0d 0a 20 20 20 20  and see if..
7df0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51    #       the SQ
7e00: 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65  Lite core native
7e10: 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72   library has alr
7e20: 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64  eady been loaded
7e30: 2e 20 20 4e 65 78 74 2c 0d 0a 20 20 20 20 20 20  .  Next,..
7e40: 23 20 20 20 20 20 20 20 66 61 6c 6c 62 61 63 6b  #       fallback
7e50: 20 74 6f 20 77 68 61 74 20 74 68 65 20 66 75 6c   to what the ful
7e60: 6c 20 70 61 74 68 20 73 68 6f 75 6c 64 20 62 65  l path should be
7e70: 2c 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68  , based on wheth
7e80: 65 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  er the..      #
7e90: 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65        mixed-mode
7ea0: 20 61 73 73 65 6d 62 6c 79 20 69 73 20 62 65 69   assembly is bei
7eb0: 6e 67 20 75 73 65 64 20 61 6e 64 20 74 68 65 20  ng used and the
7ec0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72  name of the curr
7ed0: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ent..      #
7ee0: 20 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20     platform...
7ef0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
7f00: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
7f10: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
7f20: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
7f30: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
7f40: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
7f50: 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
7f60: 65 4d 65 74 68 6f 64 73 20 5f 53 51 4c 69 74 65  eMethods _SQLite
7f70: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 46 69 6c 65  NativeModuleFile
7f80: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 20 66 69  Name..      } fi
7f90: 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 26 20  leName] == 0 &&
7fa0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $7fb0: 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 fileName] > 0} t 7fc0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 7fd0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 7fe0: 3a 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 : The SQLite cor 7ff0: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library 8000: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 has already bee 8010: 6e 20 6c 6f 61 64 65 64 20 76 69 61 0d 0a 20 20 n loaded via.. 8020: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 8030: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library 8040: 20 70 72 65 2d 6c 6f 61 64 65 72 2e 20 20 52 65 pre-loader. Re 8050: 74 75 72 6e 20 74 68 61 74 20 66 69 6c 65 20 6e turn that file n 8060: 61 6d 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ame now... 8070: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 8080: 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 urn$fileName..
8090: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
80a0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
80b0: 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22   If the "native"
80c0: 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20   runtime option
80d0: 68 61 73 20 62 65 65 6e 20 73 65 74 2c 20 61 6c  has been set, al
80e0: 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 65 0d  ways return the.
80f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
8100: 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  ile name for the
8110: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
8120: 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  mbly...      #..
8130: 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75        if {[hasRu
8140: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
8150: 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ve]} then {..
8160: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
8170: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  # NOTE: Return t
8180: 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
8190: 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65  sembly file name
81a0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
81b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69        return [fi
81c0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d  le nativename \.
81d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
81e0: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61  le join [getBina
81f0: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c  ryDirectory] $pl 8200: 61 74 66 6f 72 6d 20 53 79 73 74 65 6d 2e 44 61 atform System.Da 8210: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d ta.SQLite.dll]]. 8220: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 8230: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 8240: 45 3a 20 41 72 65 20 77 65 20 61 74 74 65 6d 70 E: Are we attemp 8250: 74 69 6e 67 20 74 6f 20 61 75 74 6f 6d 61 74 69 ting to automati 8260: 63 61 6c 6c 79 20 64 65 74 65 63 74 20 77 68 65 cally detect whe 8270: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 0d ther or not the. 8280: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 8290: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 82a0: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 3f 0d should be used?. 82b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 82c0: 73 65 74 20 61 75 74 6f 6d 61 74 69 63 20 5b 65 set automatic [e 82d0: 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e xpr {[string len 82e0: 67 74 68 20 24 73 74 61 6e 64 61 72 64 5d 20 3d gth$standard] =
82f0: 3d 20 30 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23  = 0}]....      #
8300: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
8310: 46 69 72 73 74 2c 20 69 6e 20 65 69 74 68 65 72  First, in either
8320: 20 22 61 75 74 6f 6d 61 74 69 63 22 20 6f 72 20   "automatic" or
8330: 22 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 22 20 6d  "non-standard" m
8340: 6f 64 65 73 2c 20 61 74 74 65 6d 70 74 0d 0a 20  odes, attempt..
8350: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
8360: 66 69 6e 64 20 74 68 65 20 6e 61 74 69 76 65 2d  find the native-
8370: 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73  only interop ass
8380: 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d  embly...      #.
8390: 0a 20 20 20 20 20 20 69 66 20 7b 24 61 75 74 6f  .      if {$auto 83a0: 6d 61 74 69 63 20 7c 7c 20 21 24 73 74 61 6e 64 matic || !$stand
83b0: 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ard} then {..
83c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
83d0: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
83e0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
83f0: 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74   native-only int
8400: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69  erop assembly fi
8410: 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  le..        #
8420: 20 20 20 20 6e 61 6d 65 20 66 6f 72 20 74 68 69      name for thi
8430: 73 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 74  s platform and t
8440: 68 65 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d 0a  hen return it...
8450: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
8460: 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
8470: 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65  ameOnly [getInte
8480: 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e  ropAssemblyFileN
8490: 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20  amesOnly] {..
84a0: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
84b0: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ame [file native
84c0: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  name \..
84d0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
84e0: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
84f0: 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20  tory] $platform 8500: 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d$fileNameOnly]].
8510: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
8520: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  {[file exists $f 8530: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 8540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 8550: 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a turn$fileName..
8560: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
8570: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
8580: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
8590: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 6e 2c 20    # NOTE: Then,
85a0: 69 6e 20 65 69 74 68 65 72 20 22 61 75 74 6f 6d  in either "autom
85b0: 61 74 69 63 22 20 6f 72 20 22 73 74 61 6e 64 61  atic" or "standa
85c0: 72 64 22 20 6d 6f 64 65 73 2c 20 61 74 74 65 6d  rd" modes, attem
85d0: 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20  pt to..      #
85e0: 20 20 20 20 20 66 69 6e 64 20 74 68 65 20 73 74       find the st
85f0: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69  andard SQLite li
8600: 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d  brary...      #.
8610: 0a 20 20 20 20 20 20 69 66 20 7b 24 61 75 74 6f  .      if {$auto 8620: 6d 61 74 69 63 20 7c 7c 20 24 73 74 61 6e 64 61 matic ||$standa
8630: 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  rd} then {..
8640: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
8650: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
8660: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the
8670: 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e  native-only stan
8680: 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72  dard SQLite libr
8690: 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ary..        #
86a0: 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66       file name f
86b0: 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d  or this platform
86c0: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e   and then return
86d0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
86e0: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
86f0: 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67   fileNameOnly [g
8700: 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46  etNativeLibraryF
8710: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d  ileNamesOnly] {.
8720: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66  .          set f
8730: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61  ileName [file na
8740: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  tivename \..
8750: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
8760: 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44  join [getBinaryD
8770: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66  irectory] $platf 8780: 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c orm$fileNameOnl
8790: 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y]]....
87a0: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
87b0: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 87c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 87d0: 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 return$fileNa
87e0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  me..          }.
87f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
8800: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
8810: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 61        # NOTE: Wa
8820: 73 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73  s the managed as
8830: 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled
8840: 65 78 70 65 63 74 69 6e 67 20 74 6f 20 64 65 61  expecting to dea
8850: 6c 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20  l with the..
8860: 20 20 23 20 20 20 20 20 20 20 73 74 61 6e 64 61    #       standa
8870: 72 64 20 63 6f 72 65 20 6c 69 62 72 61 72 79 3f  rd core library?
8880: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8890: 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
88a0: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 53  DefineConstant S
88b0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 5d 7d  QLITE_STANDARD]}
88c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
88d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
88e0: 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20  TE: Fallback to
88f0: 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20 6e 61  returning the na
8900: 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61  tive-only standa
8910: 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  rd SQLite librar
8920: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
8930: 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72     file name for
8940: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a   the platform...
8950: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
8960: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 73     set fileNames
8970: 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c  Only [getNativeL
8980: 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f  ibraryFileNamesO
8990: 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nly]....
89a0: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66 69  if {[llength $fi 89b0: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d 20 leNamesOnly] == 89c0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 89d0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 89e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 89f0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 8a00: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 8a10: 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. 8a20: 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 [getBinar 8a30: 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 yDirectory]$pla
8a40: 74 66 6f 72 6d 20 5b 6c 69 6e 64 65 78 20 24 66  tform [lindex $f 8a50: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d 5d ileNamesOnly 0]] 8a60: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 8a70: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 8a80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 # NOTE: Fa 8a90: 6c 6c 62 61 63 6b 20 74 6f 20 72 65 74 75 72 6e llback to return 8aa0: 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 2d 6f ing the native-o 8ab0: 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 nly interop asse 8ac0: 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 20 mbly file.. 8ad0: 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 # name 8ae0: 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d for the platform 8af0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 8b00: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 8b10: 6d 65 73 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 mesOnly [getInte 8b20: 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e ropAssemblyFileN 8b30: 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 amesOnly].... 8b40: 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt 8b50: 68 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 h$fileNamesOnly
8b60: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
8b70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8b80: 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   ""..        }..
8b90: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
8ba0: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
8bb0: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
8bc0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
8bd0: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d  BinaryDirectory]
8be0: 20 24 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 6e 64   $platform [lind 8bf0: 65 78 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c ex$fileNamesOnl
8c00: 79 20 30 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d  y 0]]]..      }.
8c10: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
8c20: 72 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72  roc getCommonDir
8c30: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20  ectory {} {..
8c40: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
8c50: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
8c60: 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  re returns the d
8c70: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74  irectory where t
8c80: 68 65 20 74 65 73 74 20 73 63 72 69 70 74 73 0d  he test scripts.
8c90: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
8ca0: 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64  hould be located
8cb0: 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74  .  By default, t
8cc0: 68 69 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73  his just returns
8cd0: 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20   the Eagle..
8ce0: 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79    #       binary
8cf0: 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20   directory...
8d00: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
8d10: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63  [info exists ::c
8d20: 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d  ommon_directory]
8d30: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
8d40: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
8d50: 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74  $::common_direct 8d60: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ory] > 0} then { 8d70: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 8d80: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 # NOTE: The 8d90: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 location of the 8da0: 20 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 common director 8db0: 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d y has been set;. 8dc0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 8dd0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 8de0: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a it... #.. 8df0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
8e00: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
8e10: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ry..      } else
8e20: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
8e30: 20 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74   ::vendor_direct
8e40: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
8e50: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
8e60: 67 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69  gth $::vendor_di 8e70: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 8e80: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 8e90: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 8ea0: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 8eb0: 20 74 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 the vendor dire 8ec0: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 ctory has been s 8ed0: 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 et;.. # 8ee0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 therefore, 8ef0: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 use it... 8f00: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 8f10: 72 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 rn$::vendor_dir
8f20: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20  ectory..      }
8f30: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
8f40: 69 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61  ists ::tcl_libra
8f50: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ry] && \..
8f60: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
8f70: 74 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72  th $::tcl_librar 8f80: 79 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 y] > 0 && \.. 8f90: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 [file isd 8fa0: 69 72 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f irectory$::tcl_
8fb0: 6c 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b  library]} then {
8fc0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
8fd0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
8fe0: 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 20 74   variable with t
8ff0: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74  he location of t
9000: 68 65 20 73 63 72 69 70 74 20 6c 69 62 72 61 72  he script librar
9010: 79 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20  y is..        #
9020: 20 20 20 20 20 20 73 65 74 20 61 6e 64 20 61 70        set and ap
9030: 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 72 65  pears to be a re
9040: 61 6c 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e  al directory (i.
9050: 65 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d  e. not embedded.
9060: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
9070: 20 77 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b   within a file);
9080: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
9090: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
90a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $90b0: 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 ::tcl_library.. 90c0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 90d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 90e0: 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 # NOTE: Fallba 90f0: 63 6b 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 ck to the direct 9100: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 ory containing t 9110: 68 65 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a he executable... 9120: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 9130: 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 return [info 9140: 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d binary].. } 9150: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 9160: 70 72 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 proc getDatabase 9170: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a Directory {} {.. 9180: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 9190: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 NOTE: This proc 91a0: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 edure returns th 91b0: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 e directory wher 91c0: 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62 e the test datab 91d0: 61 73 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 ases.. # 91e0: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f should be lo 91f0: 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 cated. By defau 9200: 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 lt, this just us 9210: 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 es the temporary 9220: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 9230: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 directory config 9240: 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 ured for this sy 9250: 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a stem... #.. 9260: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 9270: 65 78 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 exists ::databas 9280: 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 e_directory] && 9290: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 92a0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 ring length$::d
92b0: 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72  atabase_director
92c0: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  y] > 0} then {..
92d0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
92e0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c     # NOTE: The l
92f0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  ocation of the d
9300: 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72  atabase director
9310: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
9320: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
9330: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
9340: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
9350: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
9360: 65 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73  eturn $::databas 9370: 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 e_directory.. 9380: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in 9390: 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 fo exists ::scra 93a0: 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 tch_directory] & 93b0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 93c0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
93d0: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f  :scratch_directo
93e0: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
93f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
9400: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
9410: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
9420: 73 63 72 61 74 63 68 20 64 69 72 65 63 74 6f 72  scratch director
9430: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
9440: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
9450: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
9460: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
9470: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
9480: 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68  eturn $::scratch 9490: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 _directory.. 94a0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 94b0: 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 return [getT 94c0: 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 emporaryPath].. 94d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 94e0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 .. proc getTe 94f0: 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 mporaryDirectory 9500: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 9510: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 9520: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 is procedure ret 9530: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f urns the directo 9540: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 6d ry where the tem 9550: 70 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 porary files.. 9560: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 9570: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 ld be located. 9580: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 By default, this 9590: 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 just uses the t 95a0: 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 emporary.. 95b0: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 95c0: 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 y configured for 95d0: 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 this system... 95e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 95f0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 9600: 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 :temporary_direc 9610: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tory] && \.. 9620: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 9630: 6e 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 ngth$::temporar
9640: 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30  y_directory] > 0
9650: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
9660: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
9670: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f  OTE: The locatio
9680: 6e 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  n of the tempora
9690: 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  ry directory has
96a0: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
96b0: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ;..        #
96c0: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73     therefore, us
96d0: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  e it...        #
96e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
96f0: 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69   $::temporary_di 9700: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d rectory.. } 9710: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 elseif {[info e 9720: 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f xists ::scratch_ 9730: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 9740: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 9750: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 ng length$::scr
9760: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20  atch_directory]
9770: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
9780: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
9790: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61  # NOTE: The loca
97a0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61  tion of the scra
97b0: 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68 61  tch directory ha
97c0: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
97d0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
97e0: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
97f0: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  se it...
9800: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
9810: 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72  n $::scratch_dir 9820: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } 9830: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 9840: 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f return [getTempo 9850: 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 raryPath].. 9860: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 9870: 20 20 70 72 6f 63 20 67 65 74 45 78 65 63 75 74 proc getExecut 9880: 65 4f 6e 53 65 74 75 70 20 7b 7d 20 7b 0d 0a 20 eOnSetup {} {.. 9890: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 98a0: 78 69 73 74 73 20 3a 3a 65 78 65 63 75 74 65 5f xists ::execute_ 98b0: 6f 6e 5f 73 65 74 75 70 5d 20 26 26 20 5c 0d 0a on_setup] && \.. 98c0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 98d0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 78 65 63 g length$::exec
98e0: 75 74 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e 20  ute_on_setup] >
98f0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
9900: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
9910: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
9920: 20 63 6f 6e 66 69 67 75 72 65 64 20 53 51 4c 20   configured SQL
9930: 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 69 6e  to execute durin
9940: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
9950: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
9960: 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 75 72    setup procedur
9970: 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 65 72  e (i.e. for ever
9980: 79 20 74 65 73 74 20 64 61 74 61 62 61 73 65 20  y test database
9990: 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20  connection)...
99a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
99b0: 20 72 65 74 75 72 6e 20 24 3a 3a 65 78 65 63 75   return $::execu 99c0: 74 65 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 20 te_on_setup.. 99d0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 99e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 99f0: 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 # NOTE: By defau 9a00: 6c 74 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 lt, there is no 9a10: 53 51 4c 20 74 6f 20 65 78 65 63 75 74 65 20 64 SQL to execute d 9a20: 75 72 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 uring the connec 9a30: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 tion.. # 9a40: 20 20 20 20 20 20 73 65 74 75 70 20 70 72 6f 63 setup proc 9a50: 65 64 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 edure (i.e. for 9a60: 65 76 65 72 79 20 74 65 73 74 20 64 61 74 61 62 every test datab 9a70: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e ase connection). 9a80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 9a90: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 9aa0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 9ab0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 ... proc getS 9ac0: 74 72 69 6e 67 4d 61 70 46 6f 72 54 63 6c 45 73 tringMapForTclEs 9ad0: 63 61 70 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 cape {} {.. 9ae0: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 5c return [list \\ 9af0: 20 5c 5c 5c 5c 20 5c 5b 20 5c 5c 5c 5b 20 5c 5d \\\\ $\\\[$ 9b00: 20 5c 5c 5c 5d 20 5c 24 20 5c 5c 5c 24 5d 0d 0a \\\] \$ \\\$].. 9b10: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 9b20: 6f 63 20 67 65 74 54 65 73 74 4f 76 65 72 72 69 oc getTestOverri 9b30: 64 65 73 50 72 65 61 6d 62 6c 65 20 7b 20 7b 65 desPreamble { {e 9b40: 78 74 72 61 56 61 72 4e 61 6d 65 73 20 22 22 7d xtraVarNames ""} 9b50: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set 9b60: 76 61 72 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d varNames [list]. 9b70: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 9b80: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 # NOTE: If ava 9b90: 69 6c 61 62 6c 65 2c 20 73 74 61 72 74 20 77 69 ilable, start wi 9ba0: 74 68 20 74 68 65 20 6d 61 73 74 65 72 20 6c 69 th the master li 9bb0: 73 74 20 6f 66 20 74 65 73 74 20 6f 76 65 72 72 st of test overr 9bc0: 69 64 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ide.. # 9bd0: 20 20 20 76 61 72 69 61 62 6c 65 73 2e 0d 0a 20 variables... 9be0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 9bf0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 9c00: 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d :test_overrides] 9c10: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 9c20: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 [llength$::tes
9c30: 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 3e 20 30  t_overrides] > 0
9c40: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
9c50: 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76    eval lappend v
9c60: 61 72 4e 61 6d 65 73 20 24 3a 3a 74 65 73 74 5f  arNames $::test_ 9c70: 6f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 overrides.. 9c80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 9c90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 9ca0: 72 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 72 requested by our 9cb0: 20 63 61 6c 6c 65 72 2c 20 61 64 64 20 61 6e 79 caller, add any 9cc0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 additional vari 9cd0: 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 able.. # 9ce0: 20 20 20 20 6e 61 6d 65 73 20 74 6f 20 63 6f 70 names to cop 9cf0: 79 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d y now... #. 9d00: 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e . if {[llen 9d10: 67 74 68 20 24 65 78 74 72 61 56 61 72 4e 61 6d gth$extraVarNam
9d20: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
9d30: 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61  .        eval la
9d40: 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24  ppend varNames $9d50: 65 78 74 72 61 56 61 72 4e 61 6d 65 73 0d 0a 20 extraVarNames.. 9d60: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 9d70: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 9d80: 20 42 75 69 6c 64 20 74 68 65 20 73 63 72 69 70 Build the scrip 9d90: 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 62 65 t fragment to be 9da0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 70 72 6f returned by pro 9db0: 63 65 73 73 69 6e 67 20 65 61 63 68 0d 0a 20 20 cessing each.. 9dc0: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 # vari 9dd0: 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61 64 able name and ad 9de0: 64 69 6e 67 20 74 68 65 20 6e 65 63 65 63 65 73 ding the nececes 9df0: 73 61 72 79 20 73 63 72 69 70 74 20 66 72 61 67 sary script frag 9e00: 6d 65 6e 74 73 20 66 6f 72 0d 0a 20 20 20 20 20 ments for.. 9e10: 20 23 20 20 20 20 20 20 20 65 61 63 68 20 6f 6e # each on 9e20: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 9e30: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 22 22 set result "" 9e40: 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 .... foreac 9e50: 68 20 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 h varName$varNa
9e60: 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  mes {..        #
9e70: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
9e80: 3a 20 42 75 69 6c 64 20 74 68 65 20 71 75 61 6c  : Build the qual
9e90: 69 66 69 65 64 20 67 6c 6f 62 61 6c 20 76 61 72  ified global var
9ea0: 69 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20  iable name...
9eb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
9ec0: 73 65 74 20 66 75 6c 6c 56 61 72 4e 61 6d 65 20  set fullVarName
9ed0: 5b 61 70 70 65 6e 64 41 72 67 73 20 3a 3a 20 24  [appendArgs :: $9ee0: 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 varName].... 9ef0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 9f00: 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 NOTE: Does the 9f10: 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 20 69 variable exist i 9f20: 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 n this interpret 9f30: 65 72 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 20 20 er context?.. 9f40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9f50: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 9f60: 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 7d 20$fullVarName]}
9f70: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9f80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
9f90: 20 4e 4f 54 45 3a 20 41 70 70 65 6e 64 20 61 20   NOTE: Append a
9fa0: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20  script fragment
9fb0: 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 74 68  to the result th
9fc0: 61 74 20 77 69 6c 6c 20 63 6f 72 72 65 63 74 6c  at will correctl
9fd0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  y..          #
9fe0: 20 20 20 20 20 63 6f 70 79 20 61 6e 79 20 63 6f       copy any co
9ff0: 6e 74 61 69 6e 65 64 20 76 61 6c 75 65 20 74 6f  ntained value to
a000: 20 61 6e 6f 74 68 65 72 20 69 6e 74 65 72 70 72   another interpr
a010: 65 74 65 72 20 63 6f 6e 74 65 78 74 2e 0d 0a 20  eter context...
a020: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
a030: 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73        append res
a040: 75 6c 74 20 5c 6e 20 22 73 65 74 20 22 20 24 66  ult \n "set " $f a050: 75 6c 6c 56 61 72 4e 61 6d 65 20 22 20 5c 7b 22 ullVarName " \{" a060: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5c 0d 0a [string map \.. a070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g a080: 65 74 53 74 72 69 6e 67 4d 61 70 46 6f 72 54 63 etStringMapForTc a090: 6c 45 73 63 61 70 65 5d 20 5b 73 65 74 20 24 66 lEscape] [set$f
a0a0: 75 6c 6c 56 61 72 4e 61 6d 65 5d 5d 20 5c 7d 0d  ullVarName]] \}.
a0b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
a0c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
a0d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
a0e0: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74   the result cont
a0f0: 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
a100: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
a110: 73 2c 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20  s, append a..
a120: 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69     #       newli
a130: 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ne...      #..
a140: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
a150: 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20  length $result] a160: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. a170: 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 append resu a180: 6c 74 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a lt \n.. }.. a190: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
a1a0: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
a1b0: 0d 0a 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 53  ..    proc moveS
a1c0: 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44  ystemDataSQLiteD
a1d0: 6c 6c 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73 74  llConfig { {rest
a1e0: 6f 72 65 20 66 61 6c 73 65 7d 20 7b 76 65 72 62  ore false} {verb
a1f0: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  ose true} } {..
a200: 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f       set directo
a210: 72 79 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72  ry [getBinaryDir
a220: 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20  ectory]....
a230: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
a240: 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d 20  gth $directory] a250: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. a260: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f if {$verbo
a270: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  se} then {..
a280: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a290: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a2a0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a2b0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s a2c0: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 kipped moving \" a2d0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi a2e0: 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 2c te.dll.config\", a2f0: 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. a300: 20 20 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 "no binary d a310: 69 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 irectory\n"].. a320: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... a330: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 return.. a340: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 }.... set a350: 66 69 6c 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c fileName(1) [fil a360: 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 e normalize \.. a370: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a [file j a380: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 53 oin$directory S
a390: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
a3a0: 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a  e.dll.config]]..
a3b0: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
a3c0: 4e 61 6d 65 28 32 29 20 5b 61 70 70 65 6e 64 41  Name(2) [appendA
a3d0: 72 67 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29  rgs $fileName(1) a3e0: 20 2e 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 .moved].... a3f0: 20 20 69 66 20 7b 24 72 65 73 74 6f 72 65 7d 20 if {$restore}
a400: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a410: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
a420: 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 5d 7d 20   $fileName(2)]} a430: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. a440: 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 file rename$f
a450: 69 6c 65 4e 61 6d 65 28 32 29 20 24 66 69 6c 65  ileName(2) $file a460: 4e 61 6d 65 28 31 29 0d 0a 0d 0a 20 20 20 20 20 Name(1).... a470: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
a480: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
a490: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: a4a0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap a4b0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. a4c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- a4d0: 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c - moved \""$fil
a4e0: 65 4e 61 6d 65 28 32 29 20 22 5c 22 20 74 6f 20  eName(2) "\" to
a4f0: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
a500: 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65         $fileName a510: 28 31 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 (1) \"\n].. a520: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. a530: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. a540: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
a550: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a560: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a570: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a580: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a590: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- a5a0: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 skipped moving a5b0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 \""$fileName(2)
a5c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
a5d0: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73      "\", it does
a5e0: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
a5f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
a600: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
a610: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
a620: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
a630: 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 5d 7d 20   $fileName(1)]} a640: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. a650: 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 file rename$f
a660: 69 6c 65 4e 61 6d 65 28 31 29 20 24 66 69 6c 65  ileName(1) $file a670: 4e 61 6d 65 28 32 29 0d 0a 0d 0a 20 20 20 20 20 Name(2).... a680: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
a690: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
a6a0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: a6b0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap a6c0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- a6e0: 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c - moved \""$fil
a6f0: 65 4e 61 6d 65 28 31 29 20 22 5c 22 20 74 6f 20  eName(1) "\" to
a700: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
a710: 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65         $fileName a720: 28 32 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 (2) \"\n].. a730: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. a740: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. a750: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
a760: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a770: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a780: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a790: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a7a0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- a7b0: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 skipped moving a7c0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 \""$fileName(1)
a7d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
a7e0: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73      "\", it does
a7f0: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
a800: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
a810: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
a820: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
a830: 72 6f 63 20 77 72 69 74 65 53 79 73 74 65 6d 44  roc writeSystemD
a840: 61 74 61 53 51 4c 69 74 65 44 6c 6c 43 6f 6e 66  ataSQLiteDllConf
a850: 69 67 20 7b 20 64 61 74 61 20 7b 76 65 72 62 6f  ig { data {verbo
a860: 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20  se true} } {..
a870: 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72      set director
a880: 79 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  y [getBinaryDire
a890: 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20  ctory]....
a8a0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
a8b0: 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d 20 3d  th $directory] = a8c0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. a8d0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
a8e0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
a8f0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te a900: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe a910: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. a920: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk a930: 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 53 ipped moving \"S a940: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit a950: 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 2c 20 e.dll.config\", a960: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. a970: 20 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 "no binary di a980: 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 rectory\n"].. a990: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... a9a0: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 return.. a9b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 }.... set f a9c0: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f ileName [file no a9d0: 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20 20 rmalize \.. a9e0: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 [file join a9f0: 24 64 69 72 65 63 74 6f 72 79 20 53 79 73 74 65$directory Syste
aa00: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
aa10: 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20  l.config]]....
aa20: 20 20 20 20 77 72 69 74 65 46 69 6c 65 20 24 66      writeFile $f aa30: 69 6c 65 4e 61 6d 65 20 24 64 61 74 61 0d 0a 0d ileName$data...
aa40: 0a 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62  .      if {$verb aa50: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. aa60: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
aa70: 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
aa80: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
aa90: 77 72 6f 74 65 20 5c 22 53 79 73 74 65 6d 2e 44  wrote \"System.D
aaa0: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63  ata.SQLite.dll.c
aab0: 6f 6e 66 69 67 5c 22 5c 6e 22 0d 0a 20 20 20 20  onfig\"\n"..
aac0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
aad0: 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  urn $fileName.. aae0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro aaf0: 63 20 6d 6f 76 65 45 61 67 6c 65 53 68 65 6c 6c c moveEagleShell ab00: 4d 64 61 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73 MdaConfig { {res ab10: 74 6f 72 65 20 66 61 6c 73 65 7d 20 7b 76 65 72 tore false} {ver ab20: 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a bose true} } {.. ab30: 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 set direct ab40: 6f 72 79 20 5b 67 65 74 42 69 6e 61 72 79 44 69 ory [getBinaryDi ab50: 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 rectory].... ab60: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le ab70: 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d ngth$directory]
ab80: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
ab90: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb aba0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. abb0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
abc0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
abd0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
abe0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
abf0: 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c  skipped moving \
ac00: 22 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e  "EagleShell.exe.
ac10: 6d 64 61 2e 63 6f 6e 66 69 67 5c 22 2c 20 22 20  mda.config\", "
ac20: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
ac30: 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 72 65   "no binary dire
ac40: 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20 20  ctory\n"]..
ac50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
ac60: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d  return..      }.
ac70: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c  ...      set fil
ac80: 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 20 6e  eName(1) [file n
ac90: 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20  ormalize \..
aca0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
acb0: 20 24 64 69 72 65 63 74 6f 72 79 20 45 61 67 6c   $directory Eagl acc0: 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 eShell.exe.mda.c acd0: 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 onfig]].... ace0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 32 29 set fileName(2) acf0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 66 69 [appendArgs$fi
ad00: 6c 65 4e 61 6d 65 28 31 29 20 2e 6d 6f 76 65 64  leName(1) .moved
ad10: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24  ]....      if {$ad20: 72 65 73 74 6f 72 65 7d 20 74 68 65 6e 20 7b 0d restore} then {. ad30: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 . if {[fi ad40: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
ad50: 61 6d 65 28 32 29 5d 7d 20 74 68 65 6e 20 7b 0d  ame(2)]} then {.
ad60: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20  .          file
ad70: 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  rename $fileName ad80: 28 32 29 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 (2)$fileName(1)
ad90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
ada0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then adb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. adc0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
add0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
ade0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
adf0: 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64       "---- moved
ae00: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32   \"" $fileName(2 ae10: 29 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a ) "\" to \"" \.. ae20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ae30: 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c 22 5c$fileName(1) \"\
ae40: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
ae50: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
ae60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
ae70: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20  {$verbose} then ae80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t ae90: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
aea0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
aeb0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
aec0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
aed0: 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66 69  d moving \"" $fi aee0: 6c 65 4e 61 6d 65 28 32 29 20 5c 0d 0a 20 20 20 leName(2) \.. aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" af00: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex af10: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. af20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. af30: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. af40: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 . if {[fi af50: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
af60: 61 6d 65 28 31 29 5d 7d 20 74 68 65 6e 20 7b 0d  ame(1)]} then {.
af70: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20  .          file
af80: 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  rename $fileName af90: 28 31 29 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 (1)$fileName(2)
afa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
afb0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then afc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. afd0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
afe0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
aff0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
b000: 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64       "---- moved
b010: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31   \"" $fileName(1 b020: 29 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a ) "\" to \"" \.. b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 b040: 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c 22 5c$fileName(2) \"\
b050: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
b060: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
b070: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
b080: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20  {$verbose} then b090: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t b0a0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
b0b0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
b0c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b0d0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
b0e0: 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66 69  d moving \"" $fi b0f0: 6c 65 4e 61 6d 65 28 31 29 20 5c 0d 0a 20 20 20 leName(1) \.. b100: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" b110: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex b120: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. b130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. b140: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. b150: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 77 72 69 .... proc wri b160: 74 65 45 61 67 6c 65 53 68 65 6c 6c 4d 64 61 43 teEagleShellMdaC b170: 6f 6e 66 69 67 20 7b 20 64 61 74 61 20 7b 76 65 onfig { data {ve b180: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d rbose true} } {. b190: 0a 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 . set direc b1a0: 74 6f 72 79 20 5b 67 65 74 42 69 6e 61 72 79 44 tory [getBinaryD b1b0: 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 irectory].... b1c0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l b1d0: 65 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 ength$directory
b1e0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
b1f0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72          if {$ver b200: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 bose} then {.. b210: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
b220: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
b230: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
b240: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
b250: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20   skipped moving
b260: 5c 22 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65  \"EagleShell.exe
b270: 2e 6d 64 61 2e 63 6f 6e 66 69 67 5c 22 2c 20 22  .mda.config\", "
b280: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b290: 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 72    "no binary dir
b2a0: 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20  ectory\n"]..
b2b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
b2c0: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d   return..      }
b2d0: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69  ....      set fi
b2e0: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72  leName [file nor
b2f0: 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20 20 20  malize \..
b300: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24      [file join $b310: 64 69 72 65 63 74 6f 72 79 20 45 61 67 6c 65 53 directory EagleS b320: 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e hell.exe.mda.con b330: 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 77 fig]].... w b340: 72 69 74 65 46 69 6c 65 20 24 66 69 6c 65 4e 61 riteFile$fileNa
b350: 6d 65 20 24 64 61 74 61 0d 0a 0d 0a 20 20 20 20  me $data.... b360: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
b370: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
b380: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch b390: 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. b3a0: 20 20 20 20 20 22 2d 2d 2d 2d 20 77 72 6f 74 65 "---- wrote b3b0: 20 5c 22 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 \"EagleShell.ex b3c0: 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5c 22 5c 6e e.mda.config\"\n b3d0: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ".. }.... b3e0: 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 return$file
b3f0: 4e 61 6d 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  Name..    }.....
b400: 20 20 20 20 70 72 6f 63 20 67 65 74 41 70 70 44      proc getAppD
b410: 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20 7b 20  omainPreamble {
b420: 7b 70 72 65 66 69 78 20 22 22 7d 20 7b 73 75 66  {prefix ""} {suf
b430: 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  fix ""} } {..
b440: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
b450: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
b460: 72 65 20 72 65 74 75 72 6e 73 20 61 20 74 65 73  re returns a tes
b470: 74 20 73 65 74 75 70 20 73 63 72 69 70 74 20 66  t setup script f
b480: 72 61 67 6d 65 6e 74 20 73 75 69 74 61 62 6c 65  ragment suitable
b490: 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20   for..      #
b4a0: 20 20 20 20 65 76 61 6c 75 61 74 69 6f 6e 20 62      evaluation b
b4b0: 79 20 61 6e 20 69 6e 74 65 72 70 72 65 74 65 72  y an interpreter
b4c0: 20 63 72 65 61 74 65 64 20 69 6e 20 61 6e 20 69   created in an i
b4d0: 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74  solated applicat
b4e0: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
b4f0: 20 20 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65 20     domain.  The
b500: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20  script fragment
b510: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77  being returned w
b520: 69 6c 6c 20 62 65 20 73 75 72 72 6f 75 6e 64 65  ill be surrounde
b530: 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20  d by..      #
b540: 20 20 20 20 74 68 65 20 70 72 65 66 69 78 20 61      the prefix a
b550: 6e 64 20 73 75 66 66 69 78 20 22 73 63 72 69 70  nd suffix "scrip
b560: 74 20 66 72 61 67 6d 65 6e 74 73 22 20 73 70 65  t fragments" spe
b570: 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61  cified by our ca
b580: 6c 6c 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20  ller,..      #
b590: 20 20 20 20 20 69 66 20 61 6e 79 2e 20 20 54 68       if any.  Th
b5a0: 65 20 65 6e 74 69 72 65 20 73 63 72 69 70 74 20  e entire script
b5b0: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77  being returned w
b5c0: 69 6c 6c 20 62 65 20 73 75 62 73 74 69 74 75 74  ill be substitut
b5d0: 65 64 20 76 69 61 0d 0a 20 20 20 20 20 20 23 20  ed via..      #
b5e0: 20 20 20 20 20 20 5b 73 75 62 73 74 5d 2c 20 69        [subst], i
b5f0: 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66  n the context of
b600: 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 62 65 66   our caller, bef
b610: 6f 72 65 20 62 65 69 6e 67 20 72 65 74 75 72 6e  ore being return
b620: 65 64 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ed...      #
b630: 20 20 20 54 68 69 73 20 73 74 65 70 20 69 73 20     This step is
b640: 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74 68 61  necessary so tha
b650: 74 20 73 6f 6d 65 20 6c 69 6d 69 74 65 64 20 63  t some limited c
b660: 6f 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61 74 69  ontext informati
b670: 6f 6e 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  on,..      #
b680: 20 20 20 70 72 69 6d 61 72 69 6c 79 20 72 65 6c     primarily rel
b690: 61 74 65 64 20 74 6f 20 74 68 65 20 74 65 73 74  ated to the test
b6a0: 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73 2c  ing directories,
b6b0: 20 63 61 6e 20 62 65 20 74 72 61 6e 73 66 65 72   can be transfer
b6c0: 72 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  red..      #
b6d0: 20 20 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70     to the interp
b6e0: 72 65 74 65 72 20 69 6e 20 74 68 65 20 69 73 6f  reter in the iso
b6f0: 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f  lated applicatio
b700: 6e 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67  n domain, making
b710: 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20   it..      #
b720: 20 20 20 61 62 6c 65 20 74 6f 20 73 75 63 63 65     able to succe
b730: 73 73 66 75 6c 6c 79 20 72 75 6e 20 74 65 73 74  ssfully run test
b740: 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 6f  s that require o
b750: 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  ne or more of th
b760: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
b770: 20 66 69 6c 65 73 20 69 6e 20 6f 6e 65 20 6f 66   files in one of
b780: 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72   the testing dir
b790: 65 63 74 6f 72 69 65 73 2e 20 20 43 61 6c 6c 65  ectories.  Calle
b7a0: 72 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 69  rs should keep i
b7b0: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
b7c0: 20 6d 69 6e 64 20 74 68 61 74 20 74 68 65 20 74   mind that the t
b7d0: 65 73 74 20 73 63 72 69 70 74 20 66 72 61 67 6d  est script fragm
b7e0: 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e  ent being return
b7f0: 65 64 20 63 61 6e 6e 6f 74 20 72 65 6c 79 20 6f  ed cannot rely o
b800: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
b810: 20 61 6e 79 20 73 63 72 69 70 74 20 6c 69 62 72   any script libr
b820: 61 72 79 20 70 72 6f 63 65 64 75 72 65 73 20 74  ary procedures t
b830: 68 61 74 20 61 72 65 20 6e 6f 74 20 70 72 6f 76  hat are not prov
b840: 69 64 65 64 20 62 79 20 74 68 65 20 45 61 67 6c  ided by the Eagl
b850: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
b860: 20 6c 69 62 72 61 72 79 20 70 61 63 6b 61 67 65   library package
b870: 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61 67   (i.e. "init.eag
b880: 6c 65 22 29 2c 20 69 6e 63 6c 75 64 69 6e 67 20  le"), including
b890: 74 68 6f 73 65 20 70 72 6f 76 69 64 65 64 20 62  those provided b
b8a0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
b8b0: 20 74 68 65 20 45 61 67 6c 65 20 74 65 73 74 20   the Eagle test
b8c0: 70 61 63 6b 61 67 65 2c 20 75 6e 6c 65 73 73 20  package, unless
b8d0: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
b8e0: 69 6e 67 20 74 68 65 6d 20 69 73 20 6c 6f 61 64  ing them is load
b8f0: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
b900: 20 20 6d 61 6e 75 61 6c 6c 79 20 76 69 61 20 73    manually via s
b910: 6f 6d 65 20 6f 74 68 65 72 20 6d 65 63 68 61 6e  ome other mechan
b920: 69 73 6d 20 28 65 2e 67 2e 20 62 79 20 69 6e 63  ism (e.g. by inc
b930: 6c 75 64 69 6e 67 20 61 70 70 72 6f 70 72 69 61  luding appropria
b940: 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  te..      #
b950: 20 20 5b 70 61 63 6b 61 67 65 20 72 65 71 75 69    [package requi
b960: 72 65 5d 20 6f 72 20 5b 73 6f 75 72 63 65 5d 20  re] or [source]
b970: 63 6f 6d 6d 61 6e 64 73 20 69 6e 20 74 68 65 20  commands in the
b980: 70 72 65 66 69 78 20 6f 72 20 73 75 66 66 69 78  prefix or suffix
b990: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
b9a0: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73  script fragments
b9b0: 29 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20 76 61  ).  Also, all va
b9c0: 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
b9d0: 73 20 61 6e 64 20 61 6c 6c 20 6e 65 73 74 65 64  s and all nested
b9e0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
b9f0: 63 6f 6d 6d 61 6e 64 73 20 28 69 2e 65 2e 20 74  commands (i.e. t
ba00: 68 6f 73 65 20 69 6e 20 73 71 75 61 72 65 20 62  hose in square b
ba10: 72 61 63 6b 65 74 73 29 20 63 6f 6e 74 61 69 6e  rackets) contain
ba20: 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 0d  ed in the final.
ba30: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
ba40: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 77  cript fragment w
ba50: 69 6c 6c 20 65 6e 64 20 75 70 20 62 65 69 6e 67  ill end up being
ba60: 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68   evaluated in th
ba70: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65  e context of the
ba80: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
ba90: 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70 72 65  calling interpre
baa0: 74 65 72 20 61 6e 64 20 6e 6f 74 20 74 68 65 20  ter and not the
bab0: 74 61 72 67 65 74 20 69 6e 74 65 72 70 72 65 74  target interpret
bac0: 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 74 68  er created in th
bad0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
bae0: 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63   isolated applic
baf0: 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c  ation domain unl
bb00: 65 73 73 20 74 68 65 20 64 6f 6c 6c 61 72 20 73  ess the dollar s
bb10: 69 67 6e 73 20 61 6e 64 2f 6f 72 20 73 71 75 61  igns and/or squa
bb20: 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  re..      #
bb30: 20 20 62 72 61 63 6b 65 74 73 20 61 72 65 20 73    brackets are s
bb40: 70 65 63 69 61 6c 6c 79 20 71 75 6f 74 65 64 20  pecially quoted
bb50: 77 69 74 68 20 62 61 63 6b 73 6c 61 73 68 65 73  with backslashes
bb60: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
bb70: 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65    return [upleve
bb80: 6c 20 31 20 5b 6c 69 73 74 20 73 75 62 73 74 20  l 1 [list subst
bb90: 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 72 65  [appendArgs $pre bba0: 66 69 78 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 fix {.. # bbb0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE bbc0: 3a 20 54 68 65 20 5c 5b 6f 62 6a 65 63 74 5c 5d : The $object$ bbd0: 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20 command may be bbe0: 6d 69 73 73 69 6e 67 20 69 6e 20 73 6f 6d 65 20 missing in some bbf0: 45 61 67 6c 65 20 63 6f 72 65 0d 0a 20 20 20 20 Eagle core.. bc00: 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 # libr bc10: 61 72 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ary configuratio bc20: 6e 73 2e 20 20 43 6c 6f 6e 69 6e 67 20 61 6e 64 ns. Cloning and bc30: 20 75 73 69 6e 67 20 74 68 65 20 70 72 6f 63 65 using the proce bc40: 64 75 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 dure.. # bc50: 20 20 20 20 20 20 5c 5b 63 68 61 6e 67 65 4e 61 $changeNa bc60: 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f tiveRuntimeOptio bc70: 6e 5c 5d 20 6d 61 79 20 68 65 6c 70 20 74 6f 20 n$ may help to bc80: 6d 69 74 69 67 61 74 65 20 74 68 69 73 2e 0d 0a mitigate this... bc90: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. bca0: 20 20 20 70 72 6f 63 20 63 68 61 6e 67 65 4e 61 proc changeNa bcb0: 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f tiveRuntimeOptio bcc0: 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. bcd0: 20 7b 5b 69 6e 66 6f 20 61 72 67 73 20 63 68 61 {[info args cha bce0: 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 ngeNativeRuntime bcf0: 4f 70 74 69 6f 6e 5d 7d 20 5c 0d 0a 20 20 20 20 Option]} \.. bd00: 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f 20 62 {[info b bd10: 6f 64 79 20 63 68 61 6e 67 65 4e 61 74 69 76 65 ody changeNative bd20: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d 7d 0d RuntimeOption]}. bd30: 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 ... catch bd40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch bd50: 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d angeNativeRuntim bd60: 65 4f 70 74 69 6f 6e 20 5b 68 61 73 52 75 6e 74 eOption [hasRunt bd70: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native bd80: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. bd90: 20 20 20 20 7d 20 5b 67 65 74 54 65 73 74 4f 76 } [getTestOv bda0: 65 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20 erridesPreamble bdb0: 5b 6c 69 73 74 20 70 61 74 68 20 74 65 73 74 5f [list path test_ bdc0: 63 68 61 6e 6e 65 6c 5d 5d 20 24 73 75 66 66 69 channel]]$suffi
bdd0: 78 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  x]]]..    }.....
bde0: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79      proc tryCopy
bdf0: 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 7b 0d 0a  ExternalFile {..
be00: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
be10: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
be20: 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20  "} {newFileName
be30: 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75  ""} {verbose tru
be40: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  e} } {..      se
be50: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65  t sourceFileName
be60: 20 5b 67 65 74 45 78 74 65 72 6e 61 6c 46 69 6c   [getExternalFil
be70: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d  eName $fileName] be80: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b .... if {![ be90: 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 file exists$sou
bea0: 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  rceFileName]} th
beb0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
bec0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then bed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp bee0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
bef0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
bf00: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
bf10: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63   "---- skipped c
bf20: 6f 70 79 69 6e 67 20 65 78 74 65 72 6e 61 6c 20  opying external
bf30: 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65  file \"" $source bf40: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 FileName \.. bf50: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 "\", i bf60: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist bf70: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. bf80: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur bf90: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... bfa0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string bfb0: 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e length$newFileN
bfc0: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
bfd0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61  ..        set ta
bfe0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65  rgetFileName [ge
bff0: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
c000: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c  $newFileName$pl
c010: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d  atform]..      }
c020: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
c030: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e   set targetFileN
c040: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
c050: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName c060: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20$platform]..
c070: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65     }....      se
c080: 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72  t targetDirector
c090: 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  y [file dirname
c0a0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d  $targetFileName] c0b0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c c0c0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. c0d0: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 if {![file exist c0e0: 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f s$targetDirecto
c0f0: 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ry]} then {..
c100: 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69         file mkdi
c110: 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f  r $targetDirecto c120: 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ry.. }... c130: 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f . file co c140: 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 py -force$sourc
c150: 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65  eFileName $targe c160: 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 tFileName.. c170: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b }] == 0} then { c180: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs c190: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
c1a0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
c1b0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
c1c0: 20 63 6f 70 69 65 64 20 65 78 74 65 72 6e 61 6c   copied external
c1d0: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24   file from \"" $c1e0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 sourceFileName " c1f0: 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 \" to \"" \.. c200: 20 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74$target
c210: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a  FileName \"\n]..
c220: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
c230: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: c240: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a c250: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. c260: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f c270: 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 65 78 ailed to copy ex c280: 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f 6d ternal file from c290: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 \""$sourceFile
c2a0: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
c2b0: 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24      "\" to \"" $c2c0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c targetFileName \ c2d0: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 "\n].. }.. c2e0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro c2f0: 63 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46 c tryCopyBinaryF c300: 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ile {.. c310: 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 fileName mana c320: 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 gedOnly {platfor c330: 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 m ""} {newFileNa c340: 6d 65 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 me ""}.. c350: 20 20 20 20 7b 76 65 72 62 6f 73 65 20 74 72 75 {verbose tru c360: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se c370: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 t sourceFileName c380: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN c390: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ame$fileName $p c3a0: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 latform].... c3b0: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi c3c0: 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e sts$sourceFileN
c3d0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
c3e0: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo c3f0: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. c400: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
c410: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
c420: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
c430: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
c440: 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62  kipped copying b
c450: 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24  inary file \"" $c460: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c sourceFileName \ c470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c480: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 "\", it does not c490: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 exist\n"].. c4a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... c4b0: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } c4c0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s c4d0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 tring length$ne
c4e0: 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20  wFileName] > 0}
c4f0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
c500: 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61  set targetFileNa
c510: 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  me [getBuildFile
c520: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
c530: 20 20 20 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65      $newFileName c540: 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70$managedOnly $p c550: 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 latform].. c560: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. c570: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile c580: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 Name [getBuildFi c590: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. c5a0: 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20$fileName
c5b0: 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c  $managedOnly$pl
c5c0: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d  atform]..      }
c5d0: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61  ....      set ta
c5e0: 72 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66  rgetDirectory [f
c5f0: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72  ile dirname $tar c600: 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a getFileName].... c610: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch c620: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { c630: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 ![file exists$t
c640: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d  argetDirectory]}
c650: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
c660: 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 74     file mkdir $t c670: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 0d 0a argetDirectory.. c680: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... c690: 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d file copy - c6a0: 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c force$sourceFil
c6b0: 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c  eName $targetFil c6c0: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 eName.. }] c6d0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. c6e0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
c6f0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
c700: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
c710: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70         "---- cop
c720: 69 65 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20  ied binary file
c730: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65  from \"" $source c740: 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 FileName "\" to c750: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. c760: 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61$targetFileNa
c770: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  me \"\n]..
c780: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
c790: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ c7a0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA c7b0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. c7c0: 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 "---- failed c7d0: 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 79 20 66 to copy binary f c7e0: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f ile from \""$so
c7f0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
c800: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
c810: 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69  to \"" $targetFi c820: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. c830: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... c840: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 . proc tryCop c850: 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 yBuildFile {.. c860: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 fileNa c870: 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b me managedOnly { c880: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 platform ""} {ne c890: 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 0d 0a 20 wFileName ""}.. c8a0: 20 20 20 20 20 20 20 20 20 20 20 7b 76 65 72 62 {verb c8b0: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ose true} } {.. c8c0: 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 set sourceF c8d0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c ileName [getBuil c8e0: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e dFileName$fileN
c8f0: 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79  ame $managedOnly c900: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20$platform]....
c910: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20       if {![file
c920: 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69  exists $sourceFi c930: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. c940: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 . if {$ve
c950: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
c960: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $c970: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ c980: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. c990: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- c9a0: 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e - skipped copyin c9b0: 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 g build file \"" c9c0: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
c9d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
c9e0: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
c9f0: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
ca00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
ca10: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20     return..
ca20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
ca30: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $ca40: 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 newFileName] > 0 ca50: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. ca60: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile ca70: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 Name [getBinaryF ca80: 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 ileName$newFile
ca90: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d  Name $platform]. caa0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. cab0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 . set tar cac0: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 getFileName [get cad0: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
cae0: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  fileName $platfo caf0: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rm].. }.... cb00: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 set target cb10: 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 Directory [file cb20: 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 dirname$targetF
cb30: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20  ileName]....
cb40: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
cb50: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69          if {![fi
cb60: 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65  le exists $targe cb70: 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 tDirectory]} the cb80: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 n {.. f cb90: 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 ile mkdir$targe
cba0: 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  tDirectory..
cbb0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
cbc0: 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63   file copy -forc
cbd0: 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  e $sourceFileNam cbe0: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d e$targetFileNam
cbf0: 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30  e..      }] == 0
cc00: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
cc10: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ cc20: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA cc30: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. cc40: 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 "---- copied cc50: 62 75 69 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 build file from cc60: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e \""$sourceFileN
cc70: 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c  ame "\" to \"" \
cc80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74  ..            $t cc90: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 argetFileName \" cca0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 \n].. } els ccb0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu ccc0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
ccd0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
cce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
ccf0: 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f  --- failed to co
cd00: 70 79 20 62 75 69 6c 64 20 66 69 6c 65 20 66 72  py build file fr
cd10: 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69  om \"" $sourceFi cd20: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. cd30: 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 "\" to \"" cd40: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
cd50: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d   \"\n]..      }.
cd60: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
cd70: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 69 6e  roc tryDeleteBin
cd80: 61 72 79 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61  aryFile { fileNa
cd90: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
cda0: 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20   {verbose true}
cdb0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66  } {..      set f
cdc0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61  ileName [getBina
cdd0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file cde0: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
cdf0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66  ...      if {![f
ce00: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file ce10: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. ce20: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 if {$verb
ce30: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ose} then {..
ce40: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: ce50: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap ce60: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. ce70: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- ce80: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting ce90: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 binary file \"" cea0: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
ceb0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
cec0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
ced0: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
cee0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
cef0: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  urn..      }....
cf00: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
cf10: 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66   {file delete $f cf20: 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 ileName}] == 0} cf30: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. cf40: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
cf50: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
cf60: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
cf70: 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62   "---- deleted b
cf80: 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24  inary file \"" $cf90: 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a fileName \"\n].. cfa0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. cfb0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
cfc0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
cfd0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
cfe0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
cff0: 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
d000: 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20  binary file \""
d010: 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  $fileName \"\n]. d020: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. d030: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 .... proc try d040: 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20 DeleteBuildFile d050: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 {.. f d060: 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f ileName managedO d070: 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 nly {platform "" d080: 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d } {verbose true} d090: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set d0a0: 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 fileName [getBui d0b0: 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ldFileName$file
d0c0: 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c  Name $managedOnl d0d0: 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a y$platform]....
d0e0: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
d0f0: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam d100: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. d110: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
d120: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
d130: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes d140: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen d150: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. d160: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski d170: 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 62 75 pped deleting bu d180: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ild file \""$fi
d190: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
d1a0: 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20          "\", it
d1b0: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e  does not exist\n
d1c0: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  "]..        }...
d1d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d  .        return.
d1e0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
d1f0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69    if {[catch {fi
d200: 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e  le delete $fileN d210: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ame}] == 0} then d220: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput d230: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
d240: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
d250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
d260: 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69 6c 64  -- deleted build
d270: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN d280: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. d290: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. d2a0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
d2b0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
d2c0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
d2d0: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64      "---- failed
d2e0: 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69 6c 64   to delete build
d2f0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN d300: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. d310: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... d320: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 41 73 proc tryCopyAs d330: 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 sembly {.. d340: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d fileName m d350: 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 anagedOnly {plat d360: 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 20 74 72 form ""} {pdb tr d370: 75 65 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 ue} {verbose tru d380: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 e} } {.. tr d390: 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24 yCopyBuildFile$
d3a0: 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65  fileName $manage d3b0: 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 20 dOnly$platform
d3c0: 22 22 20 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20  "" $verbose.... d3d0: 20 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 if {$pdb} t
d3e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
d3f0: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
d400: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
d410: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
d420: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e   rootname $fileN d430: 61 6d 65 5d 20 2e 70 64 62 5d 20 24 6d 61 6e 61 ame] .pdb]$mana
d440: 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72  gedOnly $platfor d450: 6d 20 22 22 20 24 76 65 72 62 6f 73 65 0d 0a 20 m ""$verbose..
d460: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
d470: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 65  ..    proc tryDe
d480: 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 7b 0d 0a  leteAssembly {..
d490: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
d4a0: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
d4b0: 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76  "} {pdb true} {v
d4c0: 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b  erbose true} } {
d4d0: 0d 0a 20 20 20 20 20 20 74 72 79 44 65 6c 65 74  ..      tryDelet
d4e0: 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c  eBinaryFile $fil d4f0: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 20 eName$platform
d500: 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20  $verbose.... d510: 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e if {$pdb} then
d520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44   {..        tryD
d530: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20  eleteBinaryFile
d540: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
d550: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
d560: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e   rootname $fileN d570: 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74 ame] .pdb]$plat
d580: 66 6f 72 6d 20 24 76 65 72 62 6f 73 65 0d 0a 20  form $verbose.. d590: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... d5a0: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 4c 6f .. proc tryLo d5b0: 61 64 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c adAssembly { fil d5c0: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 eName {platform d5d0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 ""} } {.. s d5e0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 et fileName [get d5f0: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
d600: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  fileName $platfo d610: 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 rm].... if d620: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. d630: 20 20 20 73 65 74 20 61 73 73 65 6d 62 6c 79 20 set assembly d640: 5b 6f 62 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f [object load -lo d650: 61 64 74 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 adtype File -ali d660: 61 73 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 as$fileName]..
d670: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68       }] == 0} th
d680: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
d690: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
d6a0: 20 4e 6f 77 2c 20 61 64 64 20 74 68 65 20 6e 65   Now, add the ne
d6b0: 63 65 73 73 61 72 79 20 74 65 73 74 20 63 6f 6e  cessary test con
d6c0: 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20  straint...
d6d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64    #..        add
d6e0: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 66 69 6c 65  Constraint [file
d6f0: 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20   rootname [file
d700: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d  tail $fileName]] d710: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. d720: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 # NOTE: G d730: 72 61 62 20 74 68 65 20 69 6d 61 67 65 20 72 75 rab the image ru d740: 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 66 72 ntime version fr d750: 6f 6d 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 om the assembly d760: 62 65 63 61 75 73 65 0d 0a 20 20 20 20 20 20 20 because.. d770: 20 23 20 20 20 20 20 20 20 73 65 76 65 72 61 6c # several d780: 20 74 65 73 74 73 20 72 65 6c 79 20 6f 6e 20 69 tests rely on i d790: 74 20 68 61 76 69 6e 67 20 61 20 63 65 72 74 61 t having a certa d7a0: 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 in value... d7b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 #.. ad d7c0: 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 dConstraint [app d7d0: 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 74 61 endArgs [file ta d7e0: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 il$fileName] _
d7f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
d800: 24 61 73 73 65 6d 62 6c 79 20 49 6d 61 67 65 52  $assembly ImageR d810: 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d untimeVersion]]. d820: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. d830: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re d840: 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 61 turn the full pa d850: 74 68 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 64 th of the loaded d860: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 file... d870: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur d880: 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 n$fileName..
d890: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
d8a0: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a  turn ""..    }..
d8b0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 53 51  ...    proc isSQ
d8c0: 4c 69 74 65 52 65 61 64 79 20 7b 7d 20 7b 0d 0a  LiteReady {} {..
d8d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
d8e0: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63   NOTE: This proc
d8f0: 65 64 75 72 65 20 6d 75 73 74 20 72 65 74 75 72  edure must retur
d900: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20  n non-zero only
d910: 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61  if the SQLite na
d920: 74 69 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20  tive..      #
d930: 20 20 20 20 6c 69 62 72 61 72 79 20 61 6e 64 20      library and
d940: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
d950: 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61  SQLite managed a
d960: 73 73 65 6d 62 6c 79 20 61 72 65 20 6c 6f 61 64  ssembly are load
d970: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
d980: 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20    and ready for
d990: 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20  use by the test
d9a0: 73 75 69 74 65 2e 20 20 43 75 72 72 65 6e 74 6c  suite.  Currentl
d9b0: 79 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  y, this procedur
d9c0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
d9d0: 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65   should be calle
d9e0: 64 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65  d only after the
d9f0: 20 5b 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c   [tryLoadAssembl
da00: 79 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61 73  y] procedure has
da10: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
da20: 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70  been called to p
da30: 72 6f 62 65 20 66 6f 72 20 74 68 65 20 53 79 73  robe for the Sys
da40: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
da50: 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
da60: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
da70: 61 6e 64 20 74 68 65 20 5b 63 68 65 63 6b 46 6f  and the [checkFo
da80: 72 53 51 4c 69 74 65 5d 20 70 72 6f 63 65 64 75  rSQLite] procedu
da90: 72 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  re has been call
daa0: 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 0d  ed to probe for.
dab0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
dac0: 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65  he SQLite native
dad0: 20 6c 69 62 72 61 72 79 3b 20 6f 74 68 65 72 77   library; otherw
dae0: 69 73 65 2c 20 74 68 69 73 20 70 72 6f 63 65 64  ise, this proced
daf0: 75 72 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 0d  ure will simply.
db00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
db10: 6c 77 61 79 73 20 72 65 74 75 72 6e 20 7a 65 72  lways return zer
db20: 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  o...      #..
db30: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20     return [expr
db40: 7b 0d 0a 20 20 20 20 20 20 20 20 5b 68 61 76 65  {..        [have
db50: 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65  Constraint Syste
db60: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5d 20 26  m.Data.SQLite] &
db70: 26 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  & [haveConstrain
db80: 74 20 53 51 4c 69 74 65 5d 0d 0a 20 20 20 20 20  t SQLite]..
db90: 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20   }]..    }.....
dba0: 20 20 20 70 72 6f 63 20 6d 61 74 63 68 50 6c 61     proc matchPla
dbb0: 74 66 6f 72 6d 20 7b 20 70 6c 61 74 66 6f 72 6d  tform { platform
dbc0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
dbd0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20       # NOTE: An
dbe0: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72  empty string for
dbf0: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65   the platform me
dc00: 61 6e 73 20 74 68 61 74 20 74 68 65 20 62 75 69  ans that the bui
dc10: 6c 64 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20  ld is not..
dc20: 20 23 20 20 20 20 20 20 20 5b 70 72 69 6d 61 72   #       [primar
dc30: 69 6c 79 5d 20 61 20 6e 61 74 69 76 65 20 62 75  ily] a native bu
dc40: 69 6c 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  ild; therefore,
dc50: 69 74 20 61 6c 77 61 79 73 20 6d 61 74 63 68 65  it always matche
dc60: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
dc70: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
dc80: 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] dc90: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. dca0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr dcb0: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ue.. }.... dcc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # dcd0: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 6d 61 63 NOTE: If the mac dce0: 68 69 6e 65 20 6e 61 6d 65 20 69 73 20 75 6e 61 hine name is una dcf0: 76 61 69 6c 61 62 6c 65 2c 20 74 68 65 72 65 20 vailable, there dd00: 69 73 20 6e 6f 74 68 69 67 6e 20 65 6c 73 65 20 is nothign else dd10: 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 we.. # dd20: 20 20 63 61 6e 20 64 6f 2e 0d 0a 20 20 20 20 20 can do... dd30: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b #.. if {![ dd40: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 info exists ::tc dd50: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 l_platform(machi dd60: 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ne)]} then {.. dd70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal dd80: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 se.. }.... dd90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # dda0: 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 73 NOTE: Does the s ddb0: 70 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 pecified platfor ddc0: 6d 20 6d 61 74 63 68 20 75 70 20 74 6f 20 74 68 m match up to th ddd0: 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 e current proces dde0: 73 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s?.. #.. ddf0: 20 20 20 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d if {$platform
de00: 20 65 71 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c   eq [machineToPl
de10: 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c  atform $::tcl_pl de20: 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d atform(machine)] de30: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. de40: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. de50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... de60: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: de70: 20 54 68 65 20 73 70 65 63 69 66 69 65 64 20 70 The specified p de80: 6c 61 74 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 latform does not de90: 20 6d 61 74 63 68 20 75 70 20 77 69 74 68 20 74 match up with t dea0: 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 he platform.. deb0: 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 # for t dec0: 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 he current proce ded0: 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ss... #.. dee0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false def0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... df00: 70 72 6f 63 20 68 61 76 65 53 51 4c 69 74 65 4f proc haveSQLiteO df10: 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 7b 7d 20 bjectCommand {} df20: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. df30: 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 # NOTE: Is the df40: 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e [object] comman df50: 64 20 63 75 72 72 65 6e 74 6c 79 20 61 76 61 69 d currently avai df60: 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 23 0d lable?.. #. df70: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 . return [e df80: 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 xpr {[llength [i df90: 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a nfo commands obj dfa0: 65 63 74 5d 5d 20 3e 20 30 7d 5d 0d 0a 20 20 20 ect]] > 0}].. dfb0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc dfc0: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4f 62 checkForSQLiteOb dfd0: 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 7b 20 63 68 jectCommand { ch dfe0: 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 annel } {.. dff0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
e000: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
e010: 6f 72 20 5c 22 6f 62 6a 65 63 74 5c 22 20 63 6f  or \"object\" co
e020: 6d 6d 61 6e 64 20 75 73 61 67 65 2e 2e 2e 20 22  mmand usage... "
e030: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
e040: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
e050: 28 73 71 6c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  (sqliteObjectCom
e060: 6d 61 6e 64 29 5d 20 26 26 20 5c 0d 0a 20 20 20  mand)] && \..
e070: 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69         [haveSQLi
e080: 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
e090: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
e0a0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel e0b0: 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 yes\n.. } e0c0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. e0d0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT e0e0: 45 3a 20 55 6e 6c 65 73 73 20 77 65 20 61 72 65 E: Unless we are e0f0: 20 66 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d 20 forbidden from e100: 64 6f 69 6e 67 20 73 6f 2c 20 61 64 64 20 73 6f doing so, add so e110: 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 0d 0a me constraints.. e120: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # e130: 74 68 61 74 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 that will allow e140: 6d 6f 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 most of the test e150: 20 73 75 69 74 65 20 74 6f 20 72 75 6e 20 28 69 suite to run (i e160: 2e 65 2e 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 .e. those.. e170: 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 73 # tests e180: 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 64 69 72 that do not dir e190: 65 63 74 6c 79 20 72 65 6c 79 20 75 70 6f 6e 20 ectly rely upon e1a0: 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d the [object] com e1b0: 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 mand)... e1c0: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! e1d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n e1e0: 6f 28 73 68 69 6d 53 51 4c 69 74 65 41 73 73 65 o(shimSQLiteAsse e1f0: 6d 62 6c 79 43 6f 6e 73 74 72 61 69 6e 74 73 29 mblyConstraints) e200: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. e210: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai e220: 6e 74 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 nt SQLite.. e230: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai e240: 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 nt SQLiteInterop e250: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 .. addC e260: 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d onstraint System e270: 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 .Data.SQLite.. e280: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst e290: 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 raint System.Dat e2a0: 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 a.SQLite.Encrypt e2b0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 61 ion.. a e2c0: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 ddConstraint Sys e2d0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. e2e0: 4c 69 6e 71 0d 0a 0d 0a 20 20 20 20 20 20 20 20 Linq.... e2f0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint e300: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys e320: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. e330: 64 6c 6c 5f 76 20 5b 67 65 74 42 75 69 6c 64 43 dll_v [getBuildC e340: 6c 72 56 65 72 73 69 6f 6e 5d 5d 0d 0a 20 20 20 lrVersion]].. e350: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... e360: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi e370: 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c sts ::no(shimSQL e380: 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e iteDefineConstan e390: 74 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 tConstraints)]} e3a0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. e3b0: 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 foreach define e3c0: 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c Constant [list \ e3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e3e0: 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f INTEROP_EXTENSIO e3f0: 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 N_FUNCTIONS INTE e400: 52 4f 50 5f 46 54 53 35 5f 45 58 54 45 4e 53 49 ROP_FTS5_EXTENSI e410: 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ON \.. e420: 20 20 20 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e INTEROP_JSON e430: 31 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 1_EXTENSION INTE e440: 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 ROP_PERCENTILE_E e450: 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 XTENSION \.. e460: 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f INTERO e470: 50 5f 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49 P_REGEXP_EXTENSI e480: 4f 4e 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f ON INTEROP_TEST_ e490: 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 EXTENSION \.. e4a0: 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 INTER e4b0: 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e OP_SESSION_EXTEN e4c0: 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 53 48 41 SION INTEROP_SHA e4d0: 31 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 1_EXTENSION \.. e4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 INT e4f0: 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45 58 54 45 EROP_TOTYPE_EXTE e500: 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 56 49 NSION INTEROP_VI e510: 52 54 55 41 4c 5f 54 41 42 4c 45 20 5c 0d 0a 20 RTUAL_TABLE \.. e520: 20 20 20 20 20 20 20 20 20 20 20 20 20 55 53 45 USE e530: 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 5d 20 7b 0d _INTEROP_DLL] {. e540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 . add e550: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe e560: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. e570: 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ e580: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 LiteDefineConsta e590: 6e 74 50 72 65 66 69 78 5d 20 24 64 65 66 69 6e ntPrefix]$defin
e5a0: 65 43 6f 6e 73 74 61 6e 74 5d 0d 0a 20 20 20 20  eConstant]..
e5b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
e5c0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
e5d0: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
e5e0: 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 56  ::no(shimSQLiteV
e5f0: 69 73 75 61 6c 53 74 75 64 69 6f 43 6f 6e 73 74  isualStudioConst
e600: 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b  raints)]} then {
e610: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43  ..          addC
e620: 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
e630: 64 41 72 67 73 20 76 69 73 75 61 6c 53 74 75 64  dArgs visualStud
e640: 69 6f 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72  io [getBuildYear
e650: 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ]]..        }...
e660: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $e670: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 channel no\n.. e680: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... e690: 0a 20 20 20 20 70 72 6f 63 20 63 68 61 6e 67 65 . proc change e6a0: 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 NativeRuntimeOpt e6b0: 69 6f 6e 20 7b 20 6e 61 74 69 76 65 20 7d 20 7b ion { native } { e6c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 .. if {[lle e6d0: 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 ngth [info comma e6e0: 6e 64 73 20 64 65 62 75 67 5d 5d 20 3e 20 30 20 nds debug]] > 0 e6f0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. e700: 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 73 [llength [info s e710: 75 62 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 ubcommands debug e720: 20 72 75 6e 74 69 6d 65 6f 70 74 69 6f 6e 5d 5d runtimeoption]] e730: 20 3e 20 30 20 26 26 20 5b 63 61 74 63 68 20 7b > 0 && [catch { e740: 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 .. debug e750: 72 75 6e 74 69 6d 65 6f 70 74 69 6f 6e 20 5b 65 runtimeoption [e e760: 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 xpr {$native ? "
e770: 61 64 64 22 20 3a 20 22 72 65 6d 6f 76 65 22 7d  add" : "remove"}
e780: 5d 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  ] native..
e790: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  }] == 0} then {.
e7a0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
e7b0: 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
e7c0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
e7d0: 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
e7e0: 61 6e 64 5d 20 26 26 20 5b 63 61 74 63 68 20 7b  and] && [catch {
e7f0: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
e800: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
e810: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 5b 65  ter.GetActive [e
e820: 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 5c  xpr {$native ? \ e830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 41 .. "A e840: 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 ddRuntimeOption" e850: 20 3a 20 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d : "RemoveRuntim e860: 65 4f 70 74 69 6f 6e 22 7d 5d 20 6e 61 74 69 76 eOption"}] nativ e870: 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 e.. }] == 0 e880: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. e890: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. e8a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... e8b0: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. e8c0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc e8d0: 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 checkForSQLiteB e8e0: 75 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20 uilds { channel e8f0: 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d {select false} } e900: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. e910: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check e920: 20 66 6f 72 20 65 76 65 72 79 20 70 6f 73 73 69 for every possi e930: 62 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e ble valid combin e940: 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 ation of values e950: 75 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20 used when.. e960: 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 69 6e # locatin e970: 67 20 6f 75 74 20 74 68 65 20 62 75 69 6c 64 20 g out the build e980: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 output directory e990: 2c 20 73 68 6f 77 69 6e 67 20 65 61 63 68 20 61 , showing each a e9a0: 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 vailable.. e9b0: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 76 61 # build va e9c0: 72 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 riation along th e9d0: 65 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d e way... #. e9e0: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e . foreach n e9f0: 61 74 69 76 65 20 5b 6c 69 73 74 20 66 61 6c 73 ative [list fals ea00: 65 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20 e true] {.. ea10: 20 20 20 66 6f 72 65 61 63 68 20 79 65 61 72 20 foreach year ea20: 5b 67 65 74 42 75 69 6c 64 59 65 61 72 73 5d 20 [getBuildYears] ea30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 {.. for ea40: 65 61 63 68 20 63 6f 6e 66 69 67 75 72 61 74 69 each configurati ea50: 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 on [getBuildConf ea60: 69 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 igurations] {.. ea70: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. ea80: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE ea90: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 : Figure out the eaa0: 20 65 66 66 65 63 74 69 76 65 20 62 75 69 6c 64 effective build eab0: 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69 73 platform. This eac0: 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 is.. ead0: 20 23 20 20 20 20 20 20 20 62 61 73 65 64 20 6f # based o eae0: 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 n whether or not eaf0: 20 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e a [primarily] n eb00: 61 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 20 20 ative build.. eb10: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # eb20: 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20 is being used. eb30: 20 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d For [primarily] eb40: 20 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c non-native buil eb50: 64 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ds,.. eb60: 20 23 20 20 20 20 20 20 20 74 68 69 73 20 77 69 # this wi eb70: 6c 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 20 73 ll be an empty s eb80: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 tring... eb90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. eba0: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform ebb0: 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 [getBuildPlatfor ebc0: 6d 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 m$native]....
ebd0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
ebe0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append ebf0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. ec00: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch ec10: 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste ec20: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 m.Data.SQLite bu ec30: 69 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d ild \"" [expr \. ec40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . ec50: 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 {$native ? "nat
ec60: 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 78  ive/" : ""}] [ex
ec70: 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  pr {[string leng
ec80: 74 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  th \..
ec90: 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d        $platform] eca0: 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 > 0 ? [appendAr ecb0: 67 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 gs$platform /]
ecc0: 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d 0a  : ""}] $year \.. ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ece0: 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e /$configuration
ecf0: 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20   "\"... "]....
ed00: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
ed10: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
ed20: 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79   Build the fully
ed30: 20 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 63   qualified direc
ed40: 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 6e  tory where the n
ed50: 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20  ecessary..
ed60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
ed70: 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73  mponents for Sys
ed80: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
ed90: 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e  should be found.
eda0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
edb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
edc0: 20 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e   directory [join
edd0: 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24  BuildDirectory $ede0: 6e 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 native \.. edf0: 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 [getBu ee00: 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 ildBaseDirectory ee10: 5d 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 ]$year $platfor ee20: 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e m$configuration
ee30: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
ee40: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
ee50: 23 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e  # NOTE: Do the n
ee60: 65 63 65 73 73 61 72 79 20 66 69 6c 65 73 20 65  ecessary files e
ee70: 78 69 73 74 3f 20 20 43 75 72 72 65 6e 74 6c 79  xist?  Currently
ee80: 2c 20 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 73  , no other steps
ee90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
eea0: 20 20 20 20 20 20 61 72 65 20 74 61 6b 65 6e 20        are taken
eeb0: 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 20 62  to verify this b
eec0: 75 69 6c 64 20 69 73 20 61 63 74 75 61 6c 6c 79  uild is actually
eed0: 20 76 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20   viable...
eee0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
eef0: 20 20 20 20 20 69 66 20 7b 5b 69 73 42 75 69 6c       if {[isBuil
ef00: 64 41 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 69  dAvailable $nati ef10: 76 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 ve$directory]}
ef20: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
ef30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
ef40: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57         # NOTE: W
ef50: 68 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 20  hen in "select"
ef60: 6d 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 61  mode, automatica
ef70: 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66  lly select the f
ef80: 69 72 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  irst..
ef90: 20 20 20 20 23 20 20 20 20 20 20 20 61 76 61 69      #       avai
efa0: 6c 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 53  lable build of S
efb0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
efc0: 65 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72  e and then retur
efd0: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..
efe0: 20 23 20 20 20 20 20 20 20 69 6d 6d 65 64 69 61   #       immedia
eff0: 74 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20  tely...
f000: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
f010: 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63        if {$selec f020: 74 20 26 26 20 5b 6d 61 74 63 68 50 6c 61 74 66 t && [matchPlatf f030: 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 orm$platform]}
f040: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
f050: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
f060: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
f070: 45 3a 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72  E: Manually over
f080: 72 69 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69  ride all the bui
f090: 6c 64 20 64 69 72 65 63 74 6f 72 79 20 73 65 6c  ld directory sel
f0a0: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ection..
f0b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
f0c0: 72 65 6c 61 74 65 64 20 74 65 73 74 20 73 65 74  related test set
f0d0: 74 69 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74  tings in order t
f0e0: 6f 20 66 6f 72 63 65 20 74 68 69 73 20 62 75 69  o force this bui
f0f0: 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ld..
f100: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 53      #       of S
f110: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
f120: 65 20 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20  e to be used...
f130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
f140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f150: 20 20 69 66 20 7b 21 5b 63 68 61 6e 67 65 4e 61    if {![changeNa
f160: 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f  tiveRuntimeOptio
f170: 6e 20 24 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e  n $native]} then f180: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. f190: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
f1a0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
f1b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
f1c0: 20 20 20 20 20 20 20 20 20 20 22 6e 6f 2c 20 66            "no, f
f1d0: 61 69 6c 65 64 20 74 6f 20 22 20 5b 65 78 70 72  ailed to " [expr
f1e0: 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 61 64 64   {$native ? "add f1f0: 22 20 3a 20 22 72 65 6d 6f 76 65 22 7d 5d 20 5c " : "remove"}] \ f200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f210: 20 20 20 20 20 20 20 20 22 20 74 68 65 20 5c 22 " the \" f220: 6e 61 74 69 76 65 5c 22 20 72 75 6e 74 69 6d 65 native\" runtime f230: 20 6f 70 74 69 6f 6e 5c 6e 22 5d 0d 0a 0d 0a 20 option\n"].... f240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f250: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 return false.. f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } f270: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... f280: 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 79 set ::test_y f290: 65 61 72 20 24 79 65 61 72 0d 0a 20 20 20 20 20 ear$year..
f2a0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a             set :
f2b0: 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24  :test_platform $f2c0: 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 platform.. f2d0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a set :: f2e0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati f2f0: 6f 6e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f on$configuratio
f300: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....
f310: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan f320: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs f330: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. f340: 20 20 20 20 20 20 20 22 79 65 73 2c 20 73 65 6c "yes, sel f350: 65 63 74 65 64 20 28 22 20 5b 65 78 70 72 20 7b ected (" [expr { f360: 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76$native ? "nativ
f370: 65 2f 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20  e/" : ""}] \..
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f390: 20 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67    [expr {[string
f3a0: 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72   length $platfor f3b0: 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 m] > 0 ? [append f3c0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. f3d0: 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61$pla
f3e0: 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20  tform /] : ""}]
f3f0: 24 79 65 61 72 20 2f 20 24 63 6f 6e 66 69 67 75  $year /$configu
f400: 72 61 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d  ration ")\n"]...
f410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
f420: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
f430: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
f440: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
f450: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha f460: 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 nnel yes\n.. f470: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. f480: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else f490: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. f4a0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
f4b0: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  no\n..
f4c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
f4d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
f4e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
f4f0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
f500: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
f510: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c  heckForSQLiteRel
f520: 65 61 73 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20  eases { channel
f530: 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d  {select false} }
f540: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
f550: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
f560: 20 66 6f 72 20 70 61 73 74 20 72 65 6c 65 61 73   for past releas
f570: 65 73 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74  es of System.Dat
f580: 61 2e 53 51 4c 69 74 65 20 69 6e 20 74 68 65 20  a.SQLite in the
f590: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
f5a0: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e   #       contain
f5b0: 65 64 20 69 6e 20 74 68 65 20 22 53 79 73 74 65  ed in the "Syste
f5c0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 20 65  m.Data.SQLite" e
f5d0: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
f5e0: 62 6c 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 23  ble, if..      #
f5f0: 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 2e 0d         present..
f600: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
f610: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
f620: 20 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61   ::env(System.Da
f630: 74 61 2e 53 51 4c 69 74 65 29 5d 20 26 26 20 5c  ta.SQLite)] && \
f640: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
f650: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e  ing length $::en f660: 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 v(System.Data.SQ f670: 4c 69 74 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e Lite)] > 0} then f680: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. f690: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 # NOTE: B f6a0: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 uild the fully q f6b0: 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f ualified directo f6c0: 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 ry where the nec f6d0: 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 essary.. f6e0: 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e # componen f6f0: 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ts for System.Da f700: 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 ta.SQLite should f710: 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 be found... f720: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s f730: 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 66 69 et directory [fi f740: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f f750: 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. f760: 20 20 20 20 20 20 20 20 24 3a 3a 65 6e 76 28 53$::env(S
f770: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
f780: 65 29 20 5b 67 65 74 52 65 6c 65 61 73 65 56 65  e) [getReleaseVe
f790: 72 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20  rsion]]]....
f7a0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann f7b0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ f7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- f7d0: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for f7e0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL f7f0: 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 ite release \"" f800: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
f810: 64 69 72 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e  directory "\"...
f820: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69   "]....        i
f830: 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61  f {[isReleaseAva
f840: 69 6c 61 62 6c 65 20 24 64 69 72 65 63 74 6f 72  ilable $director f850: 79 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 y platform]} the f860: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i f870: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt f880: 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 h$platform] ==
f890: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
f8a0: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66         set platf
f8b0: 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20  orm unknown..
f8c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
f8d0: 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63        if {$selec f8e0: 74 20 26 26 20 5b 6d 61 74 63 68 50 6c 61 74 66 t && [matchPlatf f8f0: 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 orm$platform]}
f900: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
f910: 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f      set ::build_
f920: 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63  directory $direc f930: 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 tory.... f940: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
f950: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
f960: 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22  yes, selected ("
f970: 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22   $platform ")\n" f980: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... f990: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 return true.. f9a0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { f9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp f9c0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
f9d0: 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22  pendArgs "yes ("
f9e0: 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22   $platform ")\n" f9f0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. fa00: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { fa10: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput fa20: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d s$channel no\n.
fa30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
fa40: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $fa50: 64 69 72 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d directory] || \. fa60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 . ! fa70: 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 [file isdirector fa80: 79 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 y$directory]} t
fa90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
faa0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe fab0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. fac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . fad0: 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 "---- environme fae0: 6e 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 nt variable \"Sy faf0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite fb00: 5c 22 20 69 73 20 61 6e 20 22 20 5c 0d 0a 20 20 \" is an " \.. fb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 69 "i fb20: 6e 76 61 6c 69 64 20 64 69 72 65 63 74 6f 72 79 nvalid directory fb30: 2c 20 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b , skipping check fb40: 20 66 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e for releases... fb50: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n"].... fb60: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false fb70: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... fb80: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 . forea fb90: 63 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d ch path [lsort - fba0: 64 65 63 72 65 61 73 69 6e 67 20 5b 66 69 6c 65 decreasing [file fbb0: 20 6c 69 73 74 20 24 64 69 72 65 63 74 6f 72 79 list$directory
fbc0: 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20   *]] {..
fbd0: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78      if {[file ex
fbe0: 69 73 74 73 20 24 70 61 74 68 5d 20 26 26 20 5b  ists $path] && [ fbf0: 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 file isdirectory fc00: 20 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d$path]} then {.
fc10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
fc20: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a fc30: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " fc50: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo fc60: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 r System.Data.SQ fc70: 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 Lite release \"" fc80: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. fc90: 20 20 20 20 20 20 24 70 61 74 68 20 22 5c 22 2e$path "\".
fca0: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .. "]....
fcb0: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65         if {[isRe
fcc0: 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24  leaseAvailable $fcd0: 70 61 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 path platform]} fce0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. fcf0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str fd00: 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 ing length$plat
fd10: 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  form] == 0} then
fd20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
fd30: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
fd40: 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20  rm unknown..
fd50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
fd60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
fd70: 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20   if {$select && fd80: 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 [matchPlatform$
fd90: 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20  platform]} then
fda0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
fdb0: 20 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64       set ::build
fdc0: 5f 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68  _directory $path fdd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... fde0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
fdf0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
fe00: 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20   "yes, selected
fe10: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c  (" $platform ")\ fe20: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 n"].... fe30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return fe40: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 true.. fe50: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. fe60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fe70: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
fe80: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65   [appendArgs "ye
fe90: 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22  s (" $platform " fea0: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 )\n"].. feb0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. fec0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { fed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. fee0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
fef0: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20   no\n..
ff00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
ff10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
ff20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
ff30: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
ff40: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch ff50: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg ff60: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. ff70: 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 "---- environme ff80: 6e 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 nt variable \"Sy ff90: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite ffa0: 5c 22 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 \" is not " \.. ffb0: 20 20 20 20 20 20 20 20 20 20 20 22 73 65 74 2c "set, ffc0: 20 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 skipping check ffd0: 66 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c for releases...\ ffe0: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a n"].. }.... fff0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal 10000 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 se.. }..... 10010 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 proc checkForS 10020 51 4c 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 QLiteLibrary { c 10030 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 hannel } {.. 10040 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
10050 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
10060 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20  for SQLite core
10070 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a  library... "....
10080 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
10090 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
100a0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
100b0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
100c0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
100d0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
100e0 4c 69 74 65 33 20 53 51 4c 69 74 65 56 65 72 73  Lite3 SQLiteVers
100f0 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72  ion..      } ver
10100 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sion] == 0} then
10110 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
10120 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
10130 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75  heck if the retu
10140 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73  rned version was
10150 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d   null.  If so, m
10160 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20  ake it easy..
10170 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
10180 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  spot...        #
10190 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
101a0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65  tring length $ve 101b0 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 rsion] == 0} the 101c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 101d0 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d et version null. 101e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 101f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10200 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 10210 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo 10220 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden 10230 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 tifier for the S 10240 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 QLite.. # 10250 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 core libr 10260 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ary... #. 10270 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 10280 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 10290 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 102a0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 102b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 102c0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 102d0 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c Lite.SQLite3 SQL 102e0 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 iteSourceId.. 102f0 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d } sourceId] 10300 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 10310 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 10320 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c # NOTE: We fail 10330 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 ed to query the 10340 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 Fossil source id 10350 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 entifier... 10360 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 10370 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 set sourceId u 10380 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 nknown.. 10390 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 103a0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 103b0 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 Check if the ret 103c0 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 urned Fossil sou 103d0 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 rce identifier w 103e0 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 as null. If.. 103f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f # so 10400 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 , make it easy t 10410 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 o spot... 10420 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 10430 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
10440 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20  sourceId] == 0}
10450 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
10460 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e    set sourceId n
10470 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ull..        }..
10480 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
10490 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73       # NOTE: Yes
104a0 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  , the SQLite cor
104b0 65 20 6c 69 62 72 61 72 79 20 61 70 70 65 61 72  e library appear
104c0 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c  s to be availabl
104d0 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
104e0 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
104f0 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20  aint SQLite....
10500 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 10510 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 10520 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69 s "yes ("$versi
10530 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64  on " " $sourceId 10540 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d ")\n"].. } 10550 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 10560 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
10570 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  no\n..      }..
10580 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
10590 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
105a0 49 6e 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65  Interop { channe
105b0 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  l } {..      tpu
105c0 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 105d0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 105e0 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as 105f0 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 sembly... ".... 10600 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 10610 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec 10620 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 10630 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 10640 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 10650 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 10660 69 74 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73 ite3 InteropVers 10670 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 ion.. } ver 10680 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then 10690 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 106a0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 106b0 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 heck if the retu 106c0 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 rned version was 106d0 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d null. If so, m 106e0 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 ake it easy.. 106f0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to 10700 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 spot... # 10710 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s 10720 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 tring length$ve
10730 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65  rsion] == 0} the
10740 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
10750 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d  et version null.
10760 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
10770 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10780 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
10790 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f   to query the Fo
107a0 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
107b0 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53  tifier for the S
107c0 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23  QLite..        #
107d0 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72         core libr
107e0 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ary...        #.
107f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
10800 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
10810 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
10820 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
10830 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10840 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
10850 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74  Lite.SQLite3 Int
10860 65 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20  eropSourceId..
10870 20 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64        } sourceId
10880 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
10890 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
108a0 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69    # NOTE: We fai
108b0 6c 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  led to query the
108c0 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69   Fossil source i
108d0 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20  dentifier...
108e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
108f0 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20     set sourceId
10900 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20  unknown..
10910 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
10920 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
10930 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65   Check if the re
10940 74 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f  turned Fossil so
10950 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20  urce identifier
10960 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20  was null.  If..
10970 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
10980 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20  o, make it easy
10990 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20  to spot...
109a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
109b0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
109c0 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d  $sourceId] == 0} 109d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 109e0 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 set sourceId 109f0 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d null.. }. 10a00 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 10a10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 65 # NOTE: Be 10a20 66 6f 72 65 20 61 63 74 75 61 6c 6c 79 20 61 64 fore actually ad 10a30 64 69 6e 67 20 74 68 65 20 74 65 73 74 20 63 6f ding the test co 10a40 6e 73 74 72 61 69 6e 74 2c 20 6d 61 6b 65 20 73 nstraint, make s 10a50 75 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 ure the.. 10a60 20 23 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e # version 10a70 20 69 73 20 76 61 6c 69 64 20 28 69 2e 65 2e 20 is valid (i.e. 10a80 6e 6f 74 20 6a 75 73 74 20 74 68 61 74 20 77 65 not just that we 10a90 20 63 6f 75 6c 64 20 71 75 65 72 79 20 69 74 29 could query it) 10aa0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 10ab0 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 73 69 if {$versi
10ac0 6f 6e 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68  on ne "null"} th
10ad0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
10ae0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
10af0 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51  OTE: Yes, the SQ
10b00 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73  Lite interop ass
10b10 65 6d 62 6c 79 20 61 70 70 65 61 72 73 20 74 6f  embly appears to
10b20 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   be available...
10b30 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
10b40 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
10b50 61 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72  aint SQLiteInter
10b60 6f 70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  op....
10b70 73 65 74 20 61 6e 73 77 65 72 20 79 65 73 0d 0a  set answer yes..
10b80 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
10b90 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
10ba0 61 6e 73 77 65 72 20 6e 6f 0d 0a 20 20 20 20 20  answer no..
10bb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
10bc0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 10bd0 61 70 70 65 6e 64 41 72 67 73 20 24 61 6e 73 77 appendArgs$answ
10be0 65 72 20 22 20 28 22 20 24 76 65 72 73 69 6f 6e  er " (" $version 10bf0 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 " "$sourceId "
10c00 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65  )\n"]..      } e
10c10 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
10c20 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no 10c30 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 \n.. }.. 10c40 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 10c50 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 checkForSQLiteDe 10c60 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 fineConstant { c 10c70 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d hannel name } {. 10c80 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 . tputs$ch
10c90 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
10ca0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  s \..          "
10cb0 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
10cc0 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
10cd0 4c 69 74 65 20 64 65 66 69 6e 65 20 63 6f 6e 73  Lite define cons
10ce0 74 61 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c  tant \"" $name \ 10cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e .. "\". 10d00 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 .. "].... i 10d10 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 10d20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 10d30 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 10d40 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 10d50 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 10d60 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 SQLite.SQLite3 D 10d70 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a efineConstants.. 10d80 20 20 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f } defineCo 10d90 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 nstants] == 0} t 10da0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 10db0 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 f {[lsearch -exa 10dc0 63 74 20 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 ct -nocase$defi
10dd0 6e 65 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d  neConstants $nam 10de0 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b e] != -1} then { 10df0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 10e00 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 10e10 20 59 65 73 2c 20 74 68 69 73 20 64 65 66 69 6e Yes, this defin 10e20 65 20 63 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 e constant was e 10e30 6e 61 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20 nabled when the 10e40 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 managed.. 10e50 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d # assem 10e60 62 6c 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 bly was compiled 10e70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 10e80 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e addCon 10e90 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 10ea0 72 67 73 20 5b 67 65 74 53 51 4c 69 74 65 44 65 rgs [getSQLiteDe 10eb0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 fineConstantPref 10ec0 69 78 5d 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 ix]$name]....
10ed0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 10ee0 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 hannel yes\n.. 10ef0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 10f00 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 10f10 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20$channel no\n..
10f20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
10f30 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
10f40 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 10f50 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 error\n.. 10f60 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 10f70 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d proc getDateTim 10f80 65 46 6f 72 6d 61 74 20 7b 20 7b 74 69 6d 65 5a eFormat { {timeZ 10f90 6f 6e 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 one true} } {.. 10fa0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 10fb0 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 10fc0 64 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 dure simply retu 10fd0 72 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 rns the "default 10fe0 22 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 " DateTime forma 10ff0 74 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 t used.. # 11000 20 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73 by the tes 11010 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... 11020 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 11030 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 fo exists ::date 11040 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 time_format] && 11050 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 11060 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 ring length$::d
11070 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20  atetime_format]
11080 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
11090 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
110a0 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  # NOTE: Return t
110b0 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72  he manually over
110c0 72 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72  ridden value for
110d0 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f   the DateTime fo
110e0 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  rmat...        #
110f0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
11100 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72   $::datetime_for 11110 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 mat.. } els 11120 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 11130 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 11140 52 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 Return an ISO860 11150 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 1 DateTime forma 11160 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 t compatible wit 11170 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 h SQLite,.. 11180 20 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 # Syste 11190 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 m.Data.SQLite, a 111a0 6e 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 nd suitable for 111b0 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 round-tripping w 111c0 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 ith the.. 111d0 20 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d # DateTim 111e0 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 e class of the f 111f0 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 ramework. If th 11200 69 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e is value is chan 11210 67 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 ged,.. # 11220 20 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 various te 11230 73 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 sts may fail... 11240 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 11250 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 return [append 11260 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 11270 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 "yyyy-MM-dd 11280 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 HH:mm:ss.FFFFFFF 11290 22 20 5b 65 78 70 72 20 7b 24 74 69 6d 65 5a 6f " [expr {$timeZo
112a0 6e 65 20 3f 20 22 4b 22 20 3a 20 22 22 7d 5d 5d  ne ? "K" : ""}]]
112b0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
112c0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
112d0 74 44 61 74 65 54 69 6d 65 54 69 63 6b 73 20 7b  tDateTimeTicks {
112e0 20 76 61 6c 75 65 20 7b 6c 6f 63 61 6c 20 22 22   value {local ""
112f0 7d 20 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 7d  } {default ""} }
11300 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   {..      if {[s
11310 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61  tring length $va 11320 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 lue] == 0} then 11330 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 11340 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 n$default..
11350 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
11360 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
11370 20 20 20 73 65 74 20 64 61 74 65 54 69 6d 65 20     set dateTime
11380 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
11390 63 72 65 61 74 65 20 5c 0d 0a 20 20 20 20 20 20  create \..
113a0 20 20 20 20 20 20 2d 70 61 72 61 6d 65 74 65 72        -parameter
113b0 74 79 70 65 73 20 5b 6c 69 73 74 20 53 74 72 69  types [list Stri
113c0 6e 67 20 53 74 72 69 6e 67 20 49 46 6f 72 6d 61  ng String IForma
113d0 74 50 72 6f 76 69 64 65 72 20 5c 0d 0a 20 20 20  tProvider \..
113e0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
113f0 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e 2e 44 61  Globalization.Da
11400 74 65 54 69 6d 65 53 74 79 6c 65 73 5d 20 44 61  teTimeStyles] Da
11410 74 65 54 69 6d 65 20 50 61 72 73 65 45 78 61 63  teTime ParseExac
11420 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
11430 20 24 76 61 6c 75 65 20 5b 67 65 74 44 61 74 65   $value [getDate 11440 54 69 6d 65 46 6f 72 6d 61 74 5d 20 6e 75 6c 6c TimeFormat] null 11450 20 41 64 6a 75 73 74 54 6f 55 6e 69 76 65 72 73 AdjustToUnivers 11460 61 6c 5d 0d 0a 20 20 20 20 20 20 7d 5d 7d 20 74 al].. }]} t 11470 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 11480 65 74 75 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a eturn$default..
11490 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
114a0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20   if {[string is
114b0 62 6f 6f 6c 65 61 6e 20 2d 73 74 72 69 63 74 20  boolean -strict
114c0 24 6c 6f 63 61 6c 5d 7d 20 74 68 65 6e 20 7b 0d  $local]} then {. 114d0 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 . set dat 114e0 65 54 69 6d 65 20 5b 6f 62 6a 65 63 74 20 69 6e eTime [object in 114f0 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 44 61 74 voke -create Dat 11500 65 54 69 6d 65 20 53 70 65 63 69 66 79 4b 69 6e eTime SpecifyKin 11510 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 d \.. 11520 20 24 64 61 74 65 54 69 6d 65 20 55 74 63 5d 0d$dateTime Utc].
11530 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
11540 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
11550 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $11560 64 61 74 65 54 69 6d 65 20 54 69 63 6b 73 5d 0d dateTime Ticks]. 11570 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 11580 20 20 69 66 20 7b 24 6c 6f 63 61 6c 7d 20 74 68 if {$local} th
11590 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
115a0 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76  turn [object inv
115b0 6f 6b 65 20 24 64 61 74 65 54 69 6d 65 20 54 6f  oke $dateTime To 115c0 4c 6f 63 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d LocalTime.Ticks] 115d0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 115e0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 115f0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 11600 24 64 61 74 65 54 69 6d 65 20 54 6f 55 6e 69 76$dateTime ToUniv
11610 65 72 73 61 6c 54 69 6d 65 2e 54 69 63 6b 73 5d  ersalTime.Ticks]
11620 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
11630 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
11640 74 50 72 6f 70 65 72 74 69 65 73 20 7b 20 6f 62  tProperties { ob
11650 6a 65 63 74 20 76 61 72 4e 61 6d 65 20 7d 20 7b  ject varName } {
11660 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
11670 24 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 72 74  $varName propert 11680 69 65 73 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 ies.... set 11690 20 63 6f 75 6e 74 20 30 0d 0a 20 20 20 20 20 20 count 0.. 116a0 73 65 74 20 6e 61 6d 65 73 20 5b 6c 69 73 74 5d set names [list] 116b0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 .... if {[i 116c0 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 6f sObjectHandle$o
116d0 62 6a 65 63 74 5d 20 26 26 20 24 6f 62 6a 65 63  bject] && $objec 116e0 74 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 t ne "null"} the 116f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 n {.. eva 11700 6c 20 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73 20 l lappend names 11710 5b 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72 73 20 [object members 11720 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d \.. - 11730 6d 65 6d 62 65 72 74 79 70 65 73 20 50 72 6f 70 membertypes Prop 11740 65 72 74 79 20 2d 6e 61 6d 65 6f 6e 6c 79 20 24 erty -nameonly$
11750 6f 62 6a 65 63 74 5d 0d 0a 0d 0a 20 20 20 20 20  object]....
11760 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20     eval lappend
11770 6e 61 6d 65 73 20 5b 6f 62 6a 65 63 74 20 6d 65  names [object me
11780 6d 62 65 72 73 20 5c 0d 0a 20 20 20 20 20 20 20  mbers \..
11790 20 20 20 20 20 2d 6d 65 6d 62 65 72 74 79 70 65       -membertype
117a0 73 20 46 69 65 6c 64 20 2d 6e 61 6d 65 6f 6e 6c  s Field -nameonl
117b0 79 20 24 6f 62 6a 65 63 74 5d 0d 0a 20 20 20 20  y $object].. 117c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 }.... for 117d0 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 each name$names
117e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
117f0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
11800 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
11810 65 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b  e -objectflags +
11820 4e 6f 44 69 73 70 6f 73 65 20 24 6f 62 6a 65 63  NoDispose $objec 11830 74 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 t$name..
11840 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20   } value] == 0}
11850 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11860 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63 74 48    if {[isObjectH
11870 61 6e 64 6c 65 20 24 76 61 6c 75 65 5d 20 26 26  andle $value] && 11880 20 24 76 61 6c 75 65 20 6e 65 20 22 6e 75 6c 6c$value ne "null
11890 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  "} then {..
118a0 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6f 72         set error
118b0 20 6e 75 6c 6c 3b 20 6f 62 6a 65 63 74 20 69 6e   null; object in
118c0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
118d0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
118e0 20 20 20 20 20 20 20 20 20 20 2d 6d 61 72 73 68            -marsh
118f0 61 6c 66 6c 61 67 73 20 2b 4e 6f 48 61 6e 64 6c  alflags +NoHandl
11900 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  e Interpreter.Ge
11910 74 41 63 74 69 76 65 20 5c 0d 0a 20 20 20 20 20  tActive \..
11920 20 20 20 20 20 20 20 20 20 20 20 41 64 64 4f 62             AddOb
11930 6a 65 63 74 52 65 66 65 72 65 6e 63 65 20 4f 6b  jectReference Ok
11940 20 24 76 61 6c 75 65 20 65 72 72 6f 72 0d 0a 0d   $value error... 11950 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 . lap 11960 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73 28 pend properties( 11970 6f 62 6a 65 63 74 73 29 20 5b 6c 69 73 74 20 24 objects) [list$
11980 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20  name $value].. 11990 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 119a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 .. la 119b0 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73 ppend properties 119c0 28 76 61 6c 75 65 73 29 20 5b 6c 69 73 74 20 24 (values) [list$
119d0 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d 0a 20 20  name $value].. 119e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 119f0 20 20 20 20 20 20 20 69 6e 63 72 20 63 6f 75 6e incr coun 11a00 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 t.. } els 11a10 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c e {.. l 11a20 61 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 append propertie 11a30 73 28 65 72 72 6f 72 73 29 20 5b 6c 69 73 74 20 s(errors) [list 11a40 24 6e 61 6d 65 20 24 3a 3a 65 72 72 6f 72 43 6f$name $::errorCo 11a50 64 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a de].. }.. 11a60 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 11a70 20 72 65 74 75 72 6e 20 24 63 6f 75 6e 74 0d 0a return$count..
11a80 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
11a90 6f 63 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 74  oc getAllPropert
11aa0 69 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 61 72  ies { object var
11ab0 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  Name } {..
11ac0 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 11ad0 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 properties.. 11ae0 20 20 20 73 65 74 20 76 61 6c 75 65 20 24 6f 62 set value$ob
11af0 6a 65 63 74 0d 0a 0d 0a 20 20 20 20 20 20 77 68  ject....      wh
11b00 69 6c 65 20 7b 74 72 75 65 7d 20 7b 0d 0a 20 20  ile {true} {..
11b10 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
11b20 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 69   exists properti
11b30 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 5d  es(seenObjects)]
11b40 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
11b50 20 20 20 24 76 61 6c 75 65 20 6e 69 20 24 70 72     $value ni$pr
11b60 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a  operties(seenObj
11b70 65 63 74 73 29 7d 20 74 68 65 6e 20 7b 0d 0a 20  ects)} then {..
11b80 20 20 20 20 20 20 20 20 20 67 65 74 50 72 6f 70           getProp
11b90 65 72 74 69 65 73 20 24 76 61 6c 75 65 20 70 72  erties $value pr 11ba0 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 operties.. 11bb0 20 20 20 20 6c 61 70 70 65 6e 64 20 70 72 6f 70 lappend prop 11bc0 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 erties(seenObjec 11bd0 74 73 29 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 ts)$value..
11be0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
11bf0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
11c00 74 73 20 70 72 6f 70 65 72 74 69 65 73 28 6f 62  ts properties(ob
11c10 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  jects)]} then {.
11c20 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
11c30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
11c40 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e         if {[llen
11c50 67 74 68 20 24 70 72 6f 70 65 72 74 69 65 73 28  gth $properties( 11c60 6f 62 6a 65 63 74 73 29 5d 20 3d 3d 20 30 7d 20 objects)] == 0} 11c70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 11c80 20 20 75 6e 73 65 74 20 70 72 6f 70 65 72 74 69 unset properti 11c90 65 73 28 6f 62 6a 65 63 74 73 29 3b 20 62 72 65 es(objects); bre 11ca0 61 6b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ak.. }... 11cb0 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c . set val 11cc0 75 65 20 5b 6c 69 6e 64 65 78 20 5b 6c 69 6e 64 ue [lindex [lind 11cd0 65 78 20 24 70 72 6f 70 65 72 74 69 65 73 28 6f ex$properties(o
11ce0 62 6a 65 63 74 73 29 20 30 5d 20 65 6e 64 5d 0d  bjects) 0] end].
11cf0 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 72 6f  .        set pro
11d00 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29  perties(objects)
11d10 20 5b 6c 72 61 6e 67 65 20 24 70 72 6f 70 65 72   [lrange $proper 11d20 74 69 65 73 28 6f 62 6a 65 63 74 73 29 20 31 20 ties(objects) 1 11d30 65 6e 64 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d end].. }... 11d40 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 11d50 20 65 78 69 73 74 73 20 70 72 6f 70 65 72 74 69 exists properti 11d60 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 5d es(seenObjects)] 11d70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 11d80 20 20 66 6f 72 65 61 63 68 20 76 61 6c 75 65 20 foreach value 11d90 24 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e$properties(seen
11da0 4f 62 6a 65 63 74 73 29 20 7b 0d 0a 20 20 20 20  Objects) {..
11db0 20 20 20 20 20 20 69 66 20 7b 24 76 61 6c 75 65        if {$value 11dc0 20 65 71 20 24 6f 62 6a 65 63 74 7d 20 63 6f 6e eq$object} con
11dd0 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 20  tinue..
11de0 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64   catch {object d
11df0 69 73 70 6f 73 65 20 24 76 61 6c 75 65 7d 0d 0a  ispose $value}.. 11e00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 11e10 20 20 20 20 20 75 6e 73 65 74 20 70 72 6f 70 65 unset prope 11e20 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 rties(seenObject 11e30 73 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 s).. }.. 11e40 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 11e50 67 65 74 56 61 72 69 61 62 6c 65 73 20 7b 20 76 getVariables { v 11e60 61 72 4e 61 6d 65 73 20 7b 6f 62 6a 65 63 74 73 arNames {objects 11e70 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 11e80 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c set result [l 11e90 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f ist].... fo 11ea0 72 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 76 reach varName$v
11eb0 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  arNames {..
11ec0 20 20 20 69 66 20 7b 5b 75 70 6c 65 76 65 6c 20     if {[uplevel
11ed0 31 20 5b 6c 69 73 74 20 61 72 72 61 79 20 65 78  1 [list array ex
11ee0 69 73 74 73 20 24 76 61 72 4e 61 6d 65 5d 5d 7d  ists $varName]]} 11ef0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11f00 20 20 20 73 65 74 20 61 72 72 61 79 4e 61 6d 65 set arrayName 11f10 20 24 76 61 72 4e 61 6d 65 0d 0a 0d 0a 20 20 20$varName....
11f20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 65         foreach e
11f30 6c 65 6d 65 6e 74 4e 61 6d 65 20 5b 75 70 6c 65  lementName [uple
11f40 76 65 6c 20 31 20 5b 6c 69 73 74 20 61 72 72 61  vel 1 [list arra
11f50 79 20 6e 61 6d 65 73 20 24 61 72 72 61 79 4e 61  y names $arrayNa 11f60 6d 65 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 me]] {.. 11f70 20 20 20 20 73 65 74 20 6e 61 6d 65 20 5b 61 70 set name [ap 11f80 70 65 6e 64 41 72 67 73 20 24 61 72 72 61 79 4e pendArgs$arrayN
11f90 61 6d 65 20 28 20 24 65 6c 65 6d 65 6e 74 4e 61  ame ( $elementNa 11fa0 6d 65 20 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 me )].. 11fb0 20 20 20 73 65 74 20 76 61 72 56 61 6c 75 65 20 set varValue 11fc0 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 [uplevel 1 [list 11fd0 20 73 65 74 20 24 6e 61 6d 65 5d 5d 0d 0a 0d 0a set$name]]....
11fe0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
11ff0 24 6f 62 6a 65 63 74 73 20 26 26 20 5b 69 73 4f  $objects && [isO 12000 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 72 bjectHandle$var
12010 56 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Value]} then {..
12020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 6e                un
12030 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain
12040 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  properties..
12050 20 20 20 20 20 20 20 20 20 20 67 65 74 41 6c 6c            getAll
12060 50 72 6f 70 65 72 74 69 65 73 20 24 76 61 72 56  Properties $varV 12070 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65 73 0d alue properties. 12080 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 12090 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result 120a0 5b 6c 69 73 74 20 24 6e 61 6d 65 20 5b 61 72 72 [list$name [arr
120b0 61 79 20 67 65 74 20 70 72 6f 70 65 72 74 69 65  ay get propertie
120c0 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s]]..
120d0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
120e0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
120f0 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 6e   result [list $n 12100 61 6d 65 20 24 76 61 72 56 61 6c 75 65 5d 0d 0a ame$varValue]..
12110 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
12120 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
12130 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
12140 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72 56          set varV
12150 61 6c 75 65 20 5b 75 70 6c 65 76 65 6c 20 31 20  alue [uplevel 1
12160 5b 6c 69 73 74 20 73 65 74 20 24 76 61 72 4e 61  [list set $varNa 12170 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 me]].... 12180 20 20 69 66 20 7b 24 6f 62 6a 65 63 74 73 20 26 if {$objects &
12190 26 20 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c  & [isObjectHandl
121a0 65 20 24 76 61 72 56 61 6c 75 65 5d 7d 20 74 68  e $varValue]} th 121b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 121c0 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c unset -nocompl 121d0 61 69 6e 20 70 72 6f 70 65 72 74 69 65 73 0d 0a ain properties.. 121e0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 41 getA 121f0 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 24 76 61 llProperties$va
12200 72 56 61 6c 75 65 20 70 72 6f 70 65 72 74 69 65  rValue propertie
12210 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s....
12220 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result
12230 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d 65 20 5b  [list $varName [ 12240 61 72 72 61 79 20 67 65 74 20 70 72 6f 70 65 72 array get proper 12250 74 69 65 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20 ties]].. 12260 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 12270 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 12280 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 24 76 61 result [list$va
12290 72 4e 61 6d 65 20 24 76 61 72 56 61 6c 75 65 5d  rName $varValue] 122a0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 122b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 122c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 122d0 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d n$result..    }
122e0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e  .....    proc en
122f0 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 7b  umerableToList {
12300 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b 0d   enumerable } {.
12310 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c  .      set resul
12320 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20  t [list]....
12330 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
12340 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c 65  ngth $enumerable 12350 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d 65 ] == 0 ||$enume
12360 72 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 7d  rable eq "null"}
12370 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
12380 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d   return $result. 12390 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 123a0 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 object foreach 123b0 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65 6e -alias item$en
123c0 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 20  umerable {..
123d0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
123e0 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e 20  length $item] > 123f0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 12400 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 lappend res 12410 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74 72 ult [$item ToStr
12420 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing]..        }.
12430 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
12440 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 12450 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 12460 70 72 6f 63 20 63 61 74 63 68 41 6e 64 52 65 74 proc catchAndRet 12470 75 72 6e 20 7b 20 73 63 72 69 70 74 20 7b 73 74 urn { script {st 12480 61 63 6b 54 72 61 63 65 20 66 61 6c 73 65 7d 20 ackTrace false} 12490 7b 73 74 72 69 63 74 20 74 72 75 65 7d 20 7d 20 {strict true} } 124a0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 124b0 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 # NOTE: Evalua 124c0 74 65 20 74 68 65 20 73 63 72 69 70 74 20 70 72 te the script pr 124d0 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 ovided by our ca 124e0 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63 6f ller in their co 124f0 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20 ntext,.. # 12500 20 20 20 20 20 20 63 61 70 74 75 72 69 6e 67 20 capturing 12510 62 6f 74 68 20 74 68 65 20 72 65 73 75 6c 74 20 both the result 12520 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 20 63 and the return c 12530 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ode... #.. 12540 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 set code [c 12550 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 atch {uplevel 1 12560 24 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74 5d$script} result]
12570 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
12580 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 74     # NOTE: Did t
12590 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64  he script provid
125a0 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
125b0 20 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 65 72   NOT raise an er
125c0 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ror?..      #..
125d0 20 20 20 20 20 69 66 20 7b 24 73 74 72 69 63 74       if {$strict 125e0 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 30 20 7c &&$code == 0 |
125f0 7c 20 21 24 73 74 72 69 63 74 20 26 26 20 24 63  | !$strict &&$c
12600 6f 64 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 7b  ode != 1} then {
12610 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
12620 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63       # NOTE: Suc
12630 63 65 73 73 2e 20 20 52 65 74 75 72 6e 20 61 20  cess.  Return a
12640 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65  list with the re
12650 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68  turn code and th
12660 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20  e result...
12670 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
12680 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65  turn [list $code 12690 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20$result]..
126a0 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 63   } elseif {$stac 126b0 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d 0a kTrace} then {.. 126c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 126d0 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 # NOTE: Failu 126e0 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 re. Our caller 126f0 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 73 74 61 wants a full sta 12700 63 6b 20 74 72 61 63 65 20 28 69 66 20 61 70 70 ck trace (if app 12710 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20 20 licable),.. 12720 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72 # retur 12730 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 n a list with th 12740 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e e return code an 12750 64 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 72 d the result ver 12760 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 batim... 12770 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 12780 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 n [list$code $r 12790 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 esult].. } 127a0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 127b0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 127c0 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 E: Failure. Our 127d0 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f 74 caller does not 127e0 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 73 74 61 want a full sta 127f0 63 6b 20 74 72 61 63 65 20 28 69 66 0d 0a 20 20 ck trace (if.. 12800 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 # ap 12810 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 74 75 72 plicable), retur 12820 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 n a list with th 12830 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20 74 e return code, t 12840 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 he error.. 12850 20 20 23 20 20 20 20 20 20 20 63 6f 64 65 20 66 # code f 12860 6f 72 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 or the interpret 12870 65 72 2c 20 61 6e 64 20 74 68 65 20 65 72 72 6f er, and the erro 12880 72 20 6d 65 73 73 61 67 65 20 75 70 20 74 6f 20 r message up to 12890 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 128a0 20 20 20 20 20 70 6f 69 6e 74 20 77 68 65 72 65 point where 128b0 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 the stack trace 128c0 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d 0a should start... 128d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 128e0 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list 128f0 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f$code $::errorCo 12900 64 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 de \.. 12910 20 20 5b 65 78 74 72 61 63 74 53 79 73 74 65 6d [extractSystem 12920 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 70 74 DataSQLiteExcept 12930 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 65 73 75 ionMessage$resu
12940 6c 74 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  lt]]..      }..
12950 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
12960 63 20 72 65 73 65 74 45 78 63 65 70 74 69 6f 6e  c resetException
12970 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
12980 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
12990 73 65 74 20 65 78 63 65 70 74 69 6f 6e 20 61 73  set exception as
129a0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
129b0 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 20 28  is interpreter (
129c0 74 6f 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20  to null)...
129d0 20 23 20 20 20 20 20 20 20 54 68 69 73 20 28 70   #       This (p
129e0 72 69 76 61 74 65 29 20 70 72 6f 70 65 72 74 79  rivate) property
129f0 20 69 73 20 6d 61 69 6e 74 61 69 6e 65 64 20 6f   is maintained o
12a00 6e 20 61 20 70 65 72 2d 74 68 72 65 61 64 20 62  n a per-thread b
12a10 61 73 69 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  asis...      #..
12a20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
12a30 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
12a40 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65  ublic Interprete
12a50 72 2e 47 65 74 41 63 74 69 76 65 20 45 78 63 65  r.GetActive Exce
12a60 70 74 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20  ption null..
12a70 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
12a80 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
12a90 63 61 74 63 68 41 6e 64 53 65 74 45 78 63 65 70  catchAndSetExcep
12aa0 74 69 6f 6e 20 7b 20 73 63 72 69 70 74 20 7b 76  tion { script {v
12ab0 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a  arName ""} } {..
12ac0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
12ad0 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20   NOTE: Evaluate
12ae0 74 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69  the script provi
12af0 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
12b00 72 20 69 6e 20 74 68 65 69 72 20 63 6f 6e 74 65  r in their conte
12b10 78 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  xt...      #..
12b20 20 20 20 20 63 61 74 63 68 20 7b 75 70 6c 65 76      catch {uplev
12b30 65 6c 20 31 20 24 73 63 72 69 70 74 7d 0d 0a 0d  el 1 $script}... 12b40 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 12b50 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 # NOTE: Grab the 12b60 20 28 70 72 69 76 61 74 65 29 20 65 78 63 65 70 (private) excep 12b70 74 69 6f 6e 20 70 72 6f 70 65 72 74 79 20 66 72 tion property fr 12b80 6f 6d 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 om this interpre 12b90 74 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 ter,.. # 12ba0 20 20 20 20 66 6f 72 20 74 68 69 73 20 74 68 72 for this thr 12bb0 65 61 64 2c 20 61 6e 64 20 61 64 64 20 61 73 20 ead, and add as 12bc0 61 6e 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 an opaque object 12bd0 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 65 0d 0a handle in the.. 12be0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 12bf0 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c ntext of our cal 12c00 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 12c10 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 12c20 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 length$varName
12c30 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
12c40 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24         upvar 1 $12c50 76 61 72 4e 61 6d 65 20 65 78 63 65 70 74 69 6f varName exceptio 12c60 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... 12c70 20 20 20 20 73 65 74 20 65 78 63 65 70 74 69 6f set exceptio 12c80 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 n [object invoke 12c90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 2d 61 \.. -a 12ca0 6c 69 61 73 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e lias -flags +Non 12cb0 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 Public Interpret 12cc0 65 72 2e 47 65 74 41 63 74 69 76 65 20 45 78 63 er.GetActive Exc 12cd0 65 70 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20 eption].... 12ce0 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 12cf0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 12d00 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 ompileCSharpWith 12d10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 12d20 74 65 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62 text memory symb 12d30 6f 6c 73 20 73 74 72 69 63 74 20 72 65 73 75 6c ols strict resul 12d40 74 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 tsVarName errors 12d50 56 61 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 VarName fileName 12d60 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 s.. a 12d70 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 rgs } {.. # 12d80 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 12d90 53 69 6e 63 65 20 77 65 20 61 72 65 20 67 6f 69 Since we are goi 12da0 6e 67 20 74 6f 20 75 73 65 20 74 68 69 73 20 6d ng to use this m 12db0 65 74 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f 74 ethod name a lot 12dc0 2c 20 61 73 73 69 67 6e 20 69 74 20 74 6f 20 61 , assign it to a 12dd0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 12de0 76 61 72 69 61 62 6c 65 20 66 69 72 73 74 2e 0d variable first.. 12df0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 12e00 73 65 74 20 61 64 64 20 52 65 66 65 72 65 6e 63 set add Referenc 12e10 65 64 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 edAssemblies.Add 12e20 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 12e30 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 # NOTE: Creat 12e40 65 20 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 e the base comma 12e50 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 nd to evaluate a 12e60 6e 64 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 nd add the prope 12e70 72 74 79 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 rty settings.. 12e80 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 # that 12e90 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 are almost alwa 12ea0 79 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72 ys needed by our 12eb0 20 75 6e 69 74 20 74 65 73 74 73 20 28 69 2e 65 unit tests (i.e 12ec0 2e 20 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 20 . the System.. 12ed0 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and 12ee0 53 79 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 System.Data asse 12ef0 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 mbly references) 12f00 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 12f10 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c set command [l 12f20 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 12f30 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24 compileCSharp$
12f40 74 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79  text $memory$sy
12f50 6d 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65  mbols $strict re 12f60 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5c 0d 0a sults errors \.. 12f70 20 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53$add S
12f80 79 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53  ystem.dll $add S 12f90 79 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 ystem.Data.dll$
12fa0 61 64 64 20 53 79 73 74 65 6d 2e 54 72 61 6e 73  add System.Trans
12fb0 61 63 74 69 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20  actions.dll \..
12fc0 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79           $add Sy 12fd0 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d stem.Xml.dll]... 12fe0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 12ff0 23 20 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 # NOTE: Add all 13000 74 68 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c the provided fil 13010 65 20 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d e names as assem 13020 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d bly references.. 13030 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 13040 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 13050 20 24 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20$fileNames {..
13060 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
13070 6f 6d 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74  ommand $add [get 13080 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
13090 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
130a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
130b0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64       # NOTE: Add
130c0 20 74 68 65 20 65 78 74 72 61 20 61 72 67 75 6d   the extra argum
130d0 65 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f  ents, if any, to
130e0 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20   the command to
130f0 65 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20  evaluate...
13100 20 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c   #..      eval l
13110 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24  append command $13120 61 72 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d args.... #. 13130 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A 13140 6c 69 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 lias the compile 13150 72 20 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 r local results 13160 61 6e 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 and errors varia 13170 62 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 bles to the.. 13180 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 # varia 13190 62 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 ble names provid 131a0 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 131b0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 131c0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 131d0 6e 67 74 68 20 24 72 65 73 75 6c 74 73 56 61 72 ngth$resultsVar
131e0 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
131f0 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72  {..        upvar
13200 20 31 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61   1 $resultsVarNa 13210 6d 65 20 72 65 73 75 6c 74 73 0d 0a 20 20 20 20 me results.. 13220 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 13230 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 13240 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 5d 20$errorsVarName]
13250 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
13260 20 20 20 20 20 75 70 76 61 72 20 31 20 24 65 72       upvar 1 $er 13270 72 6f 72 73 56 61 72 4e 61 6d 65 20 65 72 72 6f rorsVarName erro 13280 72 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 rs.. }.... 13290 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 132a0 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 NOTE: Evaluate t 132b0 68 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 5b he constructed [ 132c0 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 5d 20 63 compileCSharp] c 132d0 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65 74 75 72 ommand and retur 132e0 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 n the.. # 132f0 20 20 20 20 20 72 65 73 75 6c 74 2e 0d 0a 20 20 result... 13300 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61 #.. eva 13310 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 l$command..
13320 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69  }.....    proc i
13330 73 4d 65 6d 6f 72 79 44 62 20 7b 20 66 69 6c 65  sMemoryDb { file
13340 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  Name } {..
13350 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
13360 20 49 73 20 74 68 65 20 73 70 65 63 69 66 69 65   Is the specifie
13370 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  d database file
13380 6e 61 6d 65 20 72 65 61 6c 6c 79 20 61 6e 20 69  name really an i
13390 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
133a0 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e?..      #..
133b0 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20     return [expr
133c0 7b 24 66 69 6c 65 4e 61 6d 65 20 65 71 20 22 3a  {$fileName eq ": 133d0 6d 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 memory:" || \.. 133e0 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 133f0 20 72 61 6e 67 65 20 24 66 69 6c 65 4e 61 6d 65 range$fileName
13400 20 30 20 31 32 5d 20 65 71 20 22 66 69 6c 65 3a   0 12] eq "file:
13410 3a 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20  :memory:"}]..
13420 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
13430 69 73 54 61 62 6c 65 49 6e 44 62 20 7b 20 6e 61  isTableInDb { na
13440 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20  me {varName db}
13450 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
13460 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
13470 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
13480 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
13490 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
134a0 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
134b0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
134c0 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e  ler.  It contain
134d0 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  s the database c
134e0 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
134f0 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20   that will be..
13500 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65       #       use
13510 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65  d to execute the
13520 20 71 75 65 72 79 20 75 73 65 64 20 74 6f 20 64   query used to d
13530 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the
13540 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a  named table is..
13550 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
13560 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20 64 61  esent in that da
13570 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23  tabase...      #
13580 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
13590 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20  $varName db.... 135a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 135b0 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 71 NOTE: Use the sq 135c0 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c lite_master tabl 135d0 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 e to determine i 135e0 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c f the named tabl 135f0 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 e is.. # 13600 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e 20 74 present in t 13610 68 65 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 he database... 13620 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 13630 20 73 71 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 sql {.. 13640 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 SELECT COUNT(*) 13650 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 FROM sqlite_mast 13660 65 72 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 er WHERE type = 13670 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 'table' AND name 13680 20 3d 20 3f 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a = ?;.. }.. 13690 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 136a0 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 # NOTE: Return 136b0 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 non-zero if the 136c0 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 20 70 named table is p 136d0 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23 resent... # 136e0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b .. return [ 136f0 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 expr {.. 13700 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 [sql execute -ex 13710 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 ecute scalar$db
13720 20 24 73 71 6c 20 5b 6c 69 73 74 20 70 61 72 61   $sql [list para 13730 6d 31 20 53 74 72 69 6e 67 20 24 6e 61 6d 65 5d m1 String$name]
13740 5d 20 3e 20 30 0d 0a 20 20 20 20 20 20 7d 5d 0d  ] > 0..      }].
13750 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
13760 72 6f 63 20 67 65 74 44 62 44 65 66 61 75 6c 74  roc getDbDefault
13770 50 61 67 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20  PageSize {} {..
13780 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
13790 7b 65 78 65 63 75 74 65 53 71 6c 20 22 50 52 41  {executeSql "PRA
137a0 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 3b 22 20  GMA page_size;"
137b0 73 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20  scalar} result]
137c0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
137d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 137e0 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c sult.. } el 137f0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 se {.. re 13800 74 75 72 6e 20 30 0d 0a 20 20 20 20 20 20 7d 0d turn 0.. }. 13810 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 13820 72 6f 63 20 67 65 74 44 62 44 65 66 61 75 6c 74 roc getDbDefault 13830 43 61 63 68 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a CacheSize {} {.. 13840 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 13850 20 7b 65 78 65 63 75 74 65 53 71 6c 20 22 50 52 {executeSql "PR 13860 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b AGMA cache_size; 13870 22 20 73 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 " scalar} result 13880 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 13890 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
138a0 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 20  result..      }
138b0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
138c0 72 65 74 75 72 6e 20 30 0d 0a 20 20 20 20 20 20  return 0..
138d0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
138e0 20 70 72 6f 63 20 75 73 65 4c 65 67 61 63 79 44   proc useLegacyD
138f0 62 50 61 67 65 41 6e 64 43 61 63 68 65 53 69 7a  bPageAndCacheSiz
13900 65 73 20 7b 20 76 61 72 4e 61 6d 65 20 7d 20 7b  es { varName } {
13910 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
13920 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
13930 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
13940 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
13950 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74  db") in the cont
13960 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20  ext of our..
13970 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72    #       caller
13980 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74  .  It contains t
13990 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
139a0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68  ection handle th
139b0 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20  at will be..
139c0 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 74    #       used t
139d0 6f 20 65 78 65 63 75 74 65 20 71 75 65 72 69 65  o execute querie
139e0 73 20 75 73 65 64 20 74 6f 20 73 65 74 20 74 68  s used to set th
139f0 65 20 70 61 67 65 20 61 6e 64 20 63 61 63 68 65  e page and cache
13a00 20 73 69 7a 65 73 2e 0d 0a 20 20 20 20 20 20 23   sizes...      #
13a10 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
13a20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20  $varName db.... 13a30 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 sql execute 13a40 20 24 64 62 20 7b 0d 0a 20 20 20 20 20 20 20 20$db {..
13a50 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65  PRAGMA page_size
13a60 20 3d 20 31 30 32 34 3b 0d 0a 20 20 20 20 20 20   = 1024;..
13a70 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73    PRAGMA cache_s
13a80 69 7a 65 20 3d 20 32 30 30 30 3b 0d 0a 20 20 20  ize = 2000;..
13a90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
13aa0 74 75 72 6e 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  turn [list \..
13ab0 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65          [sql exe
13ac0 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
13ad0 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41  alar $db "PRAGMA 13ae0 20 70 61 67 65 5f 73 69 7a 65 3b 22 5d 20 5c 0d page_size;"] \. 13af0 0a 20 20 20 20 20 20 20 20 20 20 5b 73 71 6c 20 . [sql 13b00 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 execute -execute 13b10 20 73 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 scalar$db "PRA
13b20 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 22  GMA cache_size;"
13b30 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ]]..    }.....
13b40 20 20 70 72 6f 63 20 6e 6f 72 6d 61 6c 69 7a 65    proc normalize
13b50 45 78 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65  ExceptionMessage
13b60 20 7b 20 76 61 6c 75 65 20 7d 20 7b 0d 0a 20 20   { value } {..
13b70 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
13b80 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d  length $value] = 13b90 3d 20 30 7d 20 74 68 65 6e 20 7b 72 65 74 75 72 = 0} then {retur 13ba0 6e 20 24 76 61 6c 75 65 7d 0d 0a 20 20 20 20 20 n$value}..
13bb0 20 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67 20   return [string
13bc0 6d 61 70 20 5b 6c 69 73 74 20 5c 72 5c 6e 20 22  map [list \r\n "
13bd0 20 3d 3d 3e 20 22 20 5c 6e 20 22 20 3d 3d 3e 20   ==> " \n " ==>
13be0 22 5d 20 24 76 61 6c 75 65 5d 0d 0a 20 20 20 20  "] $value].. 13bf0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 }..... proc e 13c00 78 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 xtractSystemData 13c10 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d SQLiteExceptionM 13c20 65 73 73 61 67 65 20 7b 20 76 61 6c 75 65 20 7d essage { value } 13c30 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 13c40 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th 13c50 65 20 73 74 72 69 6e 67 20 63 6f 6e 66 6f 72 6d e string conform 13c60 73 20 74 6f 20 66 6f 72 6d 61 74 20 6f 66 20 74 s to format of t 13c70 68 65 20 6e 6f 72 6d 61 6c 20 65 78 63 65 70 74 he normal except 13c80 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ion.. # 13c90 20 20 20 65 72 72 6f 72 20 73 74 72 69 6e 67 73 error strings 13ca0 2c 20 65 78 74 72 61 63 74 20 61 6e 64 20 72 65 , extract and re 13cb0 74 75 72 6e 20 6f 6e 6c 79 20 74 68 65 20 65 72 turn only the er 13cc0 72 6f 72 20 6d 65 73 73 61 67 65 0d 0a 20 20 20 ror message.. 13cd0 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 # porti 13ce0 6f 6e 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 on itself... 13cf0 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 70 #.. set p 13d00 61 74 74 65 72 6e 73 20 5b 6c 69 73 74 20 5c 0d atterns [list \. 13d10 0a 20 20 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e . {System\. 13d20 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 Data\.SQLite\.SQ 13d30 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 20 5c 28 LiteException $$13d40 30 78 38 30 30 30 34 30 30 35 5c 29 3a 20 28 2e 0x80004005$$: (. 13d50 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d 20 5c +?) (?: )?at} \ 13d60 0d 0a 20 20 20 20 20 20 7b 53 79 73 74 65 6d 5c .. {System\ 13d70 2e 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 .Data\.SQLite\.S 13d80 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 3a 20 QLiteException: 13d90 28 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d (.+?) (?: )?at} 13da0 20 5c 0d 0a 20 20 20 20 20 20 7b 45 61 67 6c 65 \.. {Eagle 13db0 5c 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 5c 2e 50 \._Components\.P 13dc0 75 62 6c 69 63 5c 2e 53 63 72 69 70 74 45 78 63 ublic\.ScriptExc 13dd0 65 70 74 69 6f 6e 3a 20 28 2e 2b 3f 29 20 20 28 eption: (.+?) ( 13de0 3f 3a 20 29 3f 61 74 7d 5d 0d 0a 0d 0a 20 20 20 ?: )?at}].... 13df0 20 20 20 66 6f 72 65 61 63 68 20 70 61 74 74 65 foreach patte 13e00 72 6e 20 24 70 61 74 74 65 72 6e 73 20 7b 0d 0a rn$patterns {..
13e10 20 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67          if {[reg
13e20 65 78 70 20 2d 2d 20 24 70 61 74 74 65 72 6e 20  exp -- $pattern 13e30 24 76 61 6c 75 65 20 64 75 6d 6d 79 20 6d 65 73$value dummy mes
13e40 73 61 67 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  sage]} then {..
13e50 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 73           set mes
13e60 73 61 67 65 20 5b 73 74 72 69 6e 67 20 6d 61 70  sage [string map
13e70 20 5b 6c 69 73 74 20 5c 72 5c 6e 20 5c 6e 5d 20   [list \r\n \n]
13e80 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 6d 65  [string trim $me 13e90 73 73 61 67 65 5d 5d 0d 0a 20 20 20 20 20 20 20 ssage]].. 13ea0 20 20 20 73 65 74 20 6c 69 6e 65 73 20 5b 73 70 set lines [sp 13eb0 6c 69 74 20 24 6d 65 73 73 61 67 65 20 5c 6e 5d lit$message \n]
13ec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
13ed0 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65   {[llength $line 13ee0 73 5d 20 3d 3d 20 32 7d 20 74 68 65 6e 20 7b 0d s] == 2} then {. 13ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 13f00 7b 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 {[lindex$lines
13f10 30 5d 20 65 71 20 5b 6c 69 6e 64 65 78 20 24 6c  0] eq [lindex $l 13f20 69 6e 65 73 20 31 5d 7d 20 74 68 65 6e 20 7b 0d ines 1]} then {. 13f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 . r 13f40 65 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20 24 6c eturn [lindex$l
13f50 69 6e 65 73 20 30 5d 0d 0a 20 20 20 20 20 20 20  ines 0]..
13f60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
13f70 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70        return [ap
13f80 70 65 6e 64 41 72 67 73 20 5b 6c 69 6e 64 65 78  pendArgs [lindex
13f90 20 24 6c 69 6e 65 73 20 30 5d 20 22 20 2d 2d 20   $lines 0] " -- 13fa0 22 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 " [lindex$lines
13fb0 20 31 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   1]]..
13fc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  }....          r
13fd0 65 74 75 72 6e 20 24 6d 65 73 73 61 67 65 0d 0a  eturn $message.. 13fe0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 13ff0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 14000 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 7d rn$value..    }
14010 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
14020 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d  imSql { sql } {.
14030 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72  .      return [r
14040 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c  egsub -all -- {\
14050 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  s+} [string trim
14060 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20   $sql] " "].. 14070 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 14080 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c executeSql { sql 14090 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20 {execute none} 140a0 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66 {format none} {f 140b0 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d ileName ""} } {. 140c0 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 140d0 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e ng length$fileN
140e0 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ame] == 0} then
140f0 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d  {set fileName :m
14100 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73  emory:}..      s
14110 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  etupDb $fileName 14120 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20 "" "" "" "" "" 14130 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 false false fals 14140 65 20 66 61 6c 73 65 20 64 62 20 74 72 75 65 0d e false db true. 14150 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a ... try {.. 14160 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 14170 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list 14180 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 \.. s 14190 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 ql execute -exec 141a0 75 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f ute$execute -fo
141b0 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62  rmat $format$db
141c0 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d   $sql]].. } 141d0 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 finally {.. 141e0 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 set connecti 141f0 6f 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 on [getDbConnect 14200 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ion].... 14210 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 try {.. 14220 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 cleanupDb$file
14230 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20 66 61  Name db false fa
14240 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20  lse false..
14250 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a     } finally {..
14260 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
14270 20 66 6c 61 67 73 20 24 63 6f 6e 6e 65 63 74 69   flags $connecti 14280 6f 6e 20 2d 4e 6f 44 69 73 70 6f 73 65 3b 20 66 on -NoDispose; f 14290 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d reeDbConnection. 142a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 142b0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 142c0 20 20 20 70 72 6f 63 20 68 61 73 4e 6f 46 6c 61 proc hasNoFla 142d0 67 73 20 7b 20 76 61 72 4e 61 6d 65 20 6e 6f 6e gs { varName non 142e0 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 e } {.. upv 142f0 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 66 6c ar 1$varName fl
14300 61 67 73 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ags....      if
14310 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 66  {![info exists f
14320 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  lags]} then {..
14330 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
14340 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ue..      }....
14350 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
14360 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20   length $flags] 14370 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 14380 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 14390 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 143a0 20 20 20 20 69 66 20 7b 24 6e 6f 6e 65 20 26 26 if {$none &&
143b0 20 24 66 6c 61 67 73 20 65 71 20 22 4e 6f 6e 65   $flags eq "None 143c0 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 "} then {.. 143d0 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 143e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 143f0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 return false.. 14400 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 14410 63 20 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 c getConnectionF 14420 6c 61 67 73 20 7b 20 66 69 6c 65 4e 61 6d 65 20 lags { fileName 14430 66 6c 61 67 73 20 7b 71 75 69 65 74 20 66 61 6c flags {quiet fal 14440 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 se} } {.. # 14450 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 14460 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 63 68 Figure out which 14470 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e database file n 14480 61 6d 65 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f ame or connectio 14490 6e 20 73 74 72 69 6e 67 20 74 68 65 73 65 0d 0a n string these.. 144a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 144b0 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 nnection flags w 144c0 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 61 70 70 ill actually app 144d0 6c 79 20 74 6f 2e 20 20 54 68 69 73 20 69 73 20 ly to. This is 144e0 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 not necessary.. 144f0 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 # in 14500 71 75 69 65 74 20 6d 6f 64 65 20 62 65 63 61 75 quiet mode becau 14510 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 se this informat 14520 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 ion is only used 14530 20 66 6f 72 20 6c 6f 67 67 69 6e 67 0d 0a 20 20 for logging.. 14540 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and 14550 72 65 70 6f 72 74 69 6e 67 20 70 75 72 70 6f 73 reporting purpos 14560 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 es... #.. 14570 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
14580 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14590 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
145a0 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e  gth $fileName] > 145b0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 145c0 20 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 set databa 145d0 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 se [appendArgs " 145e0 66 69 6c 65 20 6e 61 6d 65 20 5c 22 22 20 24 66 file name \""$f
145f0 69 6c 65 4e 61 6d 65 20 5c 22 5d 0d 0a 20 20 20  ileName \"]..
14600 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
14610 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61  info exists ::da
14620 74 61 53 6f 75 72 63 65 5d 20 26 26 20 5c 0d 0a  taSource] && \..
14630 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 61 72              ![ar
14640 72 61 79 20 65 78 69 73 74 73 20 3a 3a 64 61 74  ray exists ::dat
14650 61 53 6f 75 72 63 65 5d 7d 20 74 68 65 6e 20 7b  aSource]} then {
14660 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
14670 64 61 74 61 62 61 73 65 20 5b 61 70 70 65 6e 64  database [append
14680 41 72 67 73 20 22 64 61 74 61 20 73 6f 75 72 63  Args "data sourc
14690 65 20 5c 22 22 20 24 3a 3a 64 61 74 61 53 6f 75  e \"" $::dataSou 146a0 72 63 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 rce \"].. 146b0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 146c0 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73 set databas 146d0 65 20 3c 75 6e 6b 6e 6f 77 6e 3e 0d 0a 20 20 20 e <unknown>.. 146e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 146f0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 14700 20 20 23 20 4e 4f 54 45 3a 20 45 76 65 6e 20 74 # NOTE: Even t 14710 68 6f 75 67 68 20 74 68 65 72 65 20 69 73 20 6f hough there is o 14720 6e 6c 79 20 6f 6e 65 20 73 6f 75 72 63 65 20 6f nly one source o 14730 66 20 66 6c 61 67 73 20 73 6f 20 66 61 72 2c 20 f flags so far, 14740 74 68 65 79 0d 0a 20 20 20 20 20 20 23 20 20 20 they.. # 14750 20 20 20 20 6d 75 73 74 20 62 65 20 63 6f 6d 62 must be comb 14760 69 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 63 ined using the c 14770 6f 72 72 65 63 74 20 73 79 6e 74 61 78 20 66 6f orrect syntax fo 14780 72 20 65 6e 75 6d 65 72 61 74 65 64 0d 0a 20 20 r enumerated.. 14790 20 20 20 20 23 20 20 20 20 20 20 20 66 6c 61 67 # flag 147a0 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 values for the 147b0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 0d .NET Framework.. 147c0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 147d0 73 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 set flags [combi 147e0 6e 65 46 6c 61 67 73 20 24 66 6c 61 67 73 20 22 neFlags$flags "
147f0 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  "]....      #..
14800 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f       # NOTE: Sho
14810 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20  w (and log) the
14820 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e  local connection
14830 20 66 6c 61 67 73 20 61 6e 64 20 74 68 65 20 61   flags and the a
14840 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20  ssociated..
14850 20 23 20 20 20 20 20 20 20 64 61 74 61 20 73 6f   #       data so
14860 75 72 63 65 20 6f 72 20 66 69 6c 65 20 6e 61 6d  urce or file nam
14870 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
14880 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 14890 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 148a0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 148b0 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c s ::no(emitLocal 148c0 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Flags)] && \.. 148d0 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 (![inf 148e0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d o exists ::no(em 148f0 69 74 4c 6f 63 61 6c 46 6c 61 67 73 49 66 4e 6f itLocalFlagsIfNo 14900 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 ne)] || \.. 14910 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 ![hasNoF 14920 6c 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 lags flags false 14930 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ])} then {.. 14940 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
14950 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
14960 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
14970 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c           "---- l
14980 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ocal connection
14990 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 74  flags for " $dat 149a0 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 abase \.. 149b0 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 20 " are: " 149c0 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c [expr {![hasNoFl 149d0 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d ags flags false] 149e0 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ? \.. 149f0 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 [appendArgs 14a00 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 \"$flags \"] :
14a10 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a  "<none>"}] \n]..
14a20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
14a30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
14a40 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f       # NOTE: Sho
14a50 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20  w (and log) the
14a60 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f  shared connectio
14a70 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20  n flags...
14a80 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71  #..      if {!$q 14a90 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 14aa0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 14ab0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 14ac0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 ject invoke Syst 14ad0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S 14ae0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 QLiteConnection 14af0 53 68 61 72 65 64 46 6c 61 67 73 0d 0a 20 20 20 SharedFlags.. 14b00 20 20 20 20 20 7d 20 73 68 61 72 65 64 46 6c 61 } sharedFla 14b10 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b gs] == 0} then { 14b20 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 14b30 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 14b40 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 no(emitSharedFla 14b50 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 gs)] && \.. 14b60 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f (![info 14b70 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 exists ::no(emi 14b80 74 53 68 61 72 65 64 46 6c 61 67 73 49 66 4e 6f tSharedFlagsIfNo 14b90 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 ne)] || \.. 14ba0 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e ![hasN 14bb0 6f 46 6c 61 67 73 20 73 68 61 72 65 64 46 6c 61 oFlags sharedFla 14bc0 67 73 20 74 72 75 65 5d 29 7d 20 74 68 65 6e 20 gs true])} then 14bd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 14be0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
14bf0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
14c00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
14c10 20 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64      "---- shared
14c20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
14c30 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73  s for " $databas 14c40 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 14c50 20 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 " are: " [e 14c60 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 xpr {![hasNoFlag 14c70 73 20 73 68 61 72 65 64 46 6c 61 67 73 20 74 72 s sharedFlags tr 14c80 75 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 ue] ? \.. 14c90 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 [append 14ca0 41 72 67 73 20 5c 22 20 24 73 68 61 72 65 64 46 Args \"$sharedF
14cb0 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e  lags \"] : "<non
14cc0 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  e>"}] \n]..
14cd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
14ce0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
14cf0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
14d00 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53  xists ::no(emitS
14d10 68 61 72 65 64 46 6c 61 67 73 29 5d 20 26 26 20  haredFlags)] &&
14d20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
14d30 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   ![info exists :
14d40 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c  :no(emitSharedFl
14d50 61 67 73 49 66 55 6e 61 76 61 69 6c 61 62 6c 65  agsIfUnavailable
14d60 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
14d70 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 14d80 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 14d90 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 14db0 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 -- shared connec 14dc0 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 tion flags for " 14dd0 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20$database \..
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                "
14df0 61 72 65 3a 20 3c 75 6e 61 76 61 69 6c 61 62 6c  are: <unavailabl
14e00 65 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  e>\n"]..
14e10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
14e20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
14e30 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
14e40 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29  : Show (and log)
14e50 20 74 68 65 20 64 65 74 65 63 74 65 64 20 67 6c   the detected gl
14e60 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  obal connection
14e70 66 6c 61 67 73 2c 20 69 66 20 61 6e 79 2e 0d 0a  flags, if any...
14e80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
14e90 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 14ea0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 14eb0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 14ec0 6e 6f 28 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 no(emitGlobalFla 14ed0 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 gs)] && \.. 14ee0 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 (![info e 14ef0 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 xists ::no(emitG 14f00 6c 6f 62 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 lobalFlagsIfNone 14f10 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 )] || \.. 14f20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 ![hasNoFla 14f30 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f gs ::connection_ 14f40 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 flags false])} t 14f50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 14f60 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
14f70 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
14f80 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
14f90 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c      "---- global
14fa0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
14fb0 73 20 61 72 65 3a 20 22 20 5c 0d 0a 20 20 20 20  s are: " \..
14fc0 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20            [expr
14fd0 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 3a 3a  {![hasNoFlags ::
14fe0 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73  connection_flags
14ff0 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20   false] ? \..
15000 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65             [appe
15010 6e 64 41 72 67 73 20 5c 22 20 24 3a 3a 63 6f 6e  ndArgs \" $::con 15020 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 22 nection_flags \" 15030 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c ] : "<none>"}] \ 15040 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 n].. }.. 15050 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 15060 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 15070 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e If there are an 15080 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 20 74 65 y global (per te 15090 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 63 74 69 st run) connecti 150a0 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 65 6e 74 on flags current 150b0 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ly.. # 150c0 20 20 73 65 74 2c 20 75 73 65 20 74 68 65 6d 20 set, use them 150d0 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 63 6f 6d now (i.e. by com 150e0 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 69 74 68 bining them with 150f0 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 20 74 68 the ones for th 15100 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 is.. # 15110 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a connection)... 15120 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 15130 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 15140 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 ::connection_fla 15150 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 gs]} then {.. 15160 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 15170 23 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 # NOTE: Combine 15180 61 6e 64 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 and/or replace t 15190 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c he connection fl 151a0 61 67 73 20 61 6e 64 20 74 68 65 6e 20 73 68 6f ags and then sho 151b0 77 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 w the.. # 151c0 20 20 20 20 20 20 20 6e 65 77 20 76 61 6c 75 65 new value 151d0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 151e0 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 set flags 151f0 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 [combineFlags$f
15200 6c 61 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69  lags $::connecti 15210 6f 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 on_flags].... 15220 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 15230 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e # NOTE: Show (an 15240 64 20 6c 6f 67 29 20 74 68 65 20 6e 65 77 20 65 d log) the new e 15250 66 66 65 63 74 69 76 65 20 63 6f 6e 6e 65 63 74 ffective connect 15260 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 ion flags... 15270 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 15280 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
15290 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
152a0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
152b0 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65  ::no(emitCombine
152c0 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20  dFlags)] && \..
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b               (![
152e0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
152f0 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46 6c 61  (emitCombinedFla
15300 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d  gsIfNone)] || \.
15310 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
15320 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61  ![hasNoFlags fla
15330 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e  gs false])} then
15340 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
15350 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 15360 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 15370 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 15380 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 "---- combi 15390 6e 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 ned connection f 153a0 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 lags for "$data
153b0 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  base \..
153c0 20 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 22          " are: "
153d0 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46   [expr {![hasNoF
153e0 6c 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65  lags flags false
153f0 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ] ? \..
15400 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72         [appendAr
15410 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d  gs \" $flags \"] 15420 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e : "<none>"}] \n 15430 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 15440 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 15450 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 15460 72 6e 20 24 66 6c 61 67 73 0d 0a 20 20 20 20 7d rn$flags..    }
15470 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
15480 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79 20 7b  tFlagsProperty {
15490 20 7b 66 6c 61 67 73 20 22 22 7d 20 7b 71 75 69   {flags ""} {qui
154a0 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  et false} } {..
154b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
154c0 4e 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20  NOTE: Determine
154d0 77 68 61 74 20 74 68 65 20 63 6f 6d 62 69 6e 65  what the combine
154e0 64 20 28 67 6c 6f 62 61 6c 20 61 6e 64 20 6c 6f  d (global and lo
154f0 63 61 6c 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  cal) connection.
15500 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
15510 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65 2c 20  lags should be,
15520 70 6f 73 73 69 62 6c 79 20 71 75 69 65 74 6c 79  possibly quietly
15530 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
15540 20 20 73 65 74 20 66 6c 61 67 73 20 5b 67 65 74    set flags [get
15550 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags
15560 22 22 20 24 66 6c 61 67 73 20 24 71 75 69 65 74  "" $flags$quiet
15570 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
15580 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e      # NOTE: If n
15590 6f 20 67 6c 6f 62 61 6c 20 6f 72 20 6c 6f 63 61  o global or loca
155a0 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  l connection fla
155b0 67 73 20 77 65 72 65 20 73 70 65 63 69 66 69 65  gs were specifie
155c0 64 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  d, the..      #
155d0 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 63 6f        default co
155e0 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 73  nnection flags s
155f0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 3b 20 74  hould be used; t
15600 68 65 72 65 66 6f 72 65 2c 20 72 65 74 75 72 6e  herefore, return
15610 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
15620 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20  an empty string
15630 69 6e 20 74 68 61 74 20 63 61 73 65 2e 0d 0a 20  in that case...
15640 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
15650 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
15660 20 24 66 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74   $flags] == 0} t 15670 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 15680 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 eturn "".. 15690 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 156a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e 20 6f # NOTE: In o 156b0 72 64 65 72 20 74 6f 20 63 68 65 63 6b 20 69 66 rder to check if 156c0 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e the default con 156d0 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 nection flags ar 156e0 65 20 62 65 69 6e 67 20 75 73 65 64 0d 0a 20 20 e being used.. 156f0 20 20 20 20 23 20 20 20 20 20 20 20 69 74 20 69 # it i 15700 73 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 61 s necessary to a 15710 74 74 65 6d 70 74 20 61 20 63 6f 6e 76 65 72 73 ttempt a convers 15720 69 6f 6e 20 74 6f 20 74 68 65 20 61 63 74 75 61 ion to the actua 15730 6c 20 65 6e 75 6d 65 72 61 74 65 64 0d 0a 20 20 l enumerated.. 15740 20 20 20 20 23 20 20 20 20 20 20 20 74 79 70 65 # type 15750 2e 20 20 46 61 69 6c 69 6e 67 20 74 68 61 74 2c . Failing that, 15760 20 74 68 65 20 63 68 65 63 6b 20 61 67 61 69 6e the check again 15770 73 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 st the default v 15780 61 6c 75 65 20 77 69 6c 6c 20 62 65 0d 0a 20 20 alue will be.. 15790 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 # skip 157a0 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ped... #.. 157b0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 157c0 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 {.. set e 157d0 72 72 6f 72 20 6e 75 6c 6c 3b 20 23 20 49 47 4e rror null; # IGN 157e0 4f 52 45 44 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ORED.... 157f0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 55 74 object invoke Ut 15800 69 6c 69 74 79 20 54 72 79 50 61 72 73 65 46 6c ility TryParseFl 15810 61 67 73 45 6e 75 6d 20 22 22 20 5c 0d 0a 20 20 agsEnum "" \.. 15820 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 15830 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 15840 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 iteConnectionFla 15850 67 73 20 22 22 20 24 66 6c 61 67 73 20 6e 75 6c gs ""$flags nul
15860 6c 20 74 72 75 65 20 5c 0d 0a 20 20 20 20 20 20  l true \..
15870 20 20 20 20 20 20 74 72 75 65 20 74 72 75 65 20        true true
15880 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 7d 20 76  error..      } v
15890 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  alue]} then {..
158a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
158b0 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
158c0 74 69 6e 67 20 74 6f 20 70 61 72 73 65 20 74 68  ting to parse th
158d0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  e connection fla
158e0 67 73 20 63 61 75 73 65 64 20 61 20 73 63 72 69  gs caused a scri
158f0 70 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  pt..        #
15900 20 20 20 20 65 72 72 6f 72 2e 20 20 45 6d 69 74      error.  Emit
15910 20 61 20 77 61 72 6e 69 6e 67 20 74 6f 20 74 68   a warning to th
15920 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 20  e test log file
15930 61 6e 64 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20  and continue..
15940 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73        #       us
15950 69 6e 67 20 61 6e 20 65 6d 74 70 79 20 73 74 72  ing an emtpy str
15960 69 6e 67 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20  ing instead...
15970 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15980 20 74 6c 6f 67 20 5b 61 70 70 65 6e 64 41 72 67   tlog [appendArg
15990 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
159a0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
159b0 66 61 69 6c 65 64 20 74 6f 20 70 61 72 73 65 20  failed to parse
159c0 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
159d0 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20  , error: " \..
159e0 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24            \n\t $159f0 76 61 6c 75 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 value \n].... 15a00 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 22 set value " 15a10 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ".. }.... 15a20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 15a30 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 62 OTE: If the comb 15a40 69 6e 65 64 20 66 6c 61 67 73 20 73 74 72 69 6e ined flags strin 15a50 67 20 63 6f 75 6c 64 20 6e 6f 74 20 61 63 74 75 g could not actu 15a60 61 6c 6c 79 20 62 65 20 63 6f 6e 76 65 72 74 65 ally be converte 15a70 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 15a80 20 74 6f 20 74 68 65 20 65 6e 75 6d 65 72 61 74 to the enumerat 15a90 65 64 20 74 79 70 65 20 69 74 20 69 73 20 74 68 ed type it is th 15aa0 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c e default value, 15ab0 20 74 68 65 6e 20 6a 75 73 74 20 75 73 65 0d 0a then just use.. 15ac0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 # it 15ad0 20 76 65 72 62 61 74 69 6d 3b 20 6f 74 68 65 72 verbatim; other 15ae0 77 69 73 65 2c 20 6a 75 73 74 20 72 65 74 75 72 wise, just retur 15af0 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e n an empty strin 15b00 67 2e 20 20 49 6e 20 74 68 61 74 0d 0a 20 20 20 g. In that.. 15b10 20 20 20 23 20 20 20 20 20 20 20 63 61 73 65 2c # case, 15b20 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e the default con 15b30 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 nection flags wi 15b40 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 ll be used... 15b50 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 15b60 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
15b70 76 61 6c 75 65 5d 20 3d 3d 20 30 20 7c 7c 20 24  value] == 0 || $15b80 76 61 6c 75 65 20 6e 65 20 22 44 65 66 61 75 6c value ne "Defaul 15b90 74 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 t"} then {.. 15ba0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 15bb0 20 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 72 WARNING: This r 15bc0 65 74 75 72 6e 73 20 74 68 65 20 73 74 72 69 6e eturns the strin 15bd0 67 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 g value of the c 15be0 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73 2c 20 6e ombined flags, n 15bf0 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ot.. # 15c00 20 20 20 20 20 20 20 74 68 65 20 65 6e 75 6d 65 the enume 15c10 72 61 74 65 64 20 76 61 6c 75 65 2e 20 20 54 68 rated value. Th 15c20 69 73 20 69 73 20 62 79 20 64 65 73 69 67 6e 20 is is by design 15c30 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a and should not.. 15c40 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 15c50 20 20 20 62 65 20 63 68 61 6e 67 65 64 20 77 69 be changed wi 15c60 74 68 6f 75 74 20 63 61 72 65 66 75 6c 20 63 6f thout careful co 15c70 6e 73 69 64 65 72 61 74 69 6f 6e 20 28 65 2e 67 nsideration (e.g 15c80 2e 20 69 74 20 77 6f 75 6c 64 0d 0a 20 20 20 20 . it would.. 15c90 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 70 # p 15ca0 72 65 76 65 6e 74 20 74 68 65 20 53 51 4c 69 74 revent the SQLit 15cb0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6c 61 73 eConnection clas 15cc0 73 20 66 72 6f 6d 20 61 6c 6c 6f 77 69 6e 67 20 s from allowing 15cd0 69 6e 76 61 6c 69 64 0d 0a 20 20 20 20 20 20 20 invalid.. 15ce0 20 23 20 20 20 20 20 20 20 20 20 20 5b 22 6d 61 # ["ma 15cf0 67 69 63 61 6c 22 5d 20 6d 65 74 61 2d 66 6c 61 gical"] meta-fla 15d00 67 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d gs)... #. 15d10 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 15d20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 46 6c 61 [appendArgs "Fla 15d30 67 73 3d 22 20 24 66 6c 61 67 73 20 5c 3b 5d 0d gs="$flags \;].
15d40 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
15d50 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
15d60 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
15d70 67 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65  getTestPropertie
15d80 73 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d 20 7b  s { {flags ""} {
15d90 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
15da0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
15db0 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 74 20 77   # NOTE: Start w
15dc0 69 74 68 20 22 46 6c 61 67 73 22 20 70 72 6f 70  ith "Flags" prop
15dd0 65 72 74 79 20 66 6f 72 20 74 68 65 20 6e 65 77  erty for the new
15de0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 69 66 20   connection, if
15df0 61 6e 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  any...      #..
15e00 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20       set result
15e10 5b 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74  [getFlagsPropert
15e20 79 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d  y $flags$quiet]
15e30 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
15e40 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74     # NOTE: Add t
15e50 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
15e60 75 72 72 65 6e 74 20 74 65 73 74 20 66 69 6c 65  urrent test file
15e70 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 20  , if available.
15e80 20 54 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20   This is..
15e90 23 20 20 20 20 20 20 20 6f 6e 6c 79 20 75 73 65  #       only use
15ea0 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 2e  d for debugging.
15eb0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
15ec0 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
15ed0 73 20 3a 3a 74 65 73 74 5f 66 69 6c 65 5d 7d 20  s ::test_file]}
15ee0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
15ef0 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 54 65  append result Te
15f00 73 74 46 69 6c 65 3d 20 24 3a 3a 74 65 73 74 5f  stFile= $::test_ 15f10 66 69 6c 65 20 5c 3b 0d 0a 20 20 20 20 20 20 7d file \;.. } 15f20 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 15f30 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 # NOTE: Add t 15f40 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 he name of the c 15f50 75 72 72 65 6e 74 20 74 65 73 74 2c 20 69 66 20 urrent test, if 15f60 61 76 61 69 6c 61 62 6c 65 2e 20 20 54 68 69 73 available. This 15f70 20 69 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 is only.. 15f80 23 20 20 20 20 20 20 20 75 73 65 64 20 66 6f 72 # used for 15f90 20 64 65 62 75 67 67 69 6e 67 2e 0d 0a 20 20 20 debugging... 15fa0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 15fb0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 [info exists ::e 15fc0 61 67 6c 65 5f 74 65 73 74 73 28 43 75 72 72 65 agle_tests(Curre 15fd0 6e 74 4e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b ntName)]} then { 15fe0 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append 15ff0 20 72 65 73 75 6c 74 20 54 65 73 74 4e 61 6d 65 result TestName 16000 3d 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 =$::eagle_tests
16010 28 43 75 72 72 65 6e 74 4e 61 6d 65 29 20 5c 3b  (CurrentName) \;
16020 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
16030 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c     return $resul 16040 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 t.. }..... 16050 20 70 72 6f 63 20 65 6e 61 62 6c 65 53 68 61 72 proc enableShar 16060 65 64 43 61 63 68 65 20 7b 20 63 68 61 6e 6e 65 edCache { channe 16070 6c 20 65 6e 61 62 6c 65 20 7b 71 75 69 65 74 20 l enable {quiet 16080 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 16090 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 160a0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 160b0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 160c0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 160d0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 160e0 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 ta.SQLite.Unsafe 160f0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d NativeMethods \. 16100 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c . sql 16110 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 ite3_enable_shar 16120 65 64 5f 63 61 63 68 65 20 5b 65 78 70 72 20 69 ed_cache [expr i 16130 6e 74 28 24 65 6e 61 62 6c 65 29 5d 0d 0a 20 20 nt($enable)]..
16140 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d      } result] ==
16150 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
16160 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 16170 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 16180 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
16190 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
161a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
161b0 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65  ---- call sqlite
161c0 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f  3_enable_shared_
161d0 63 61 63 68 65 28 22 20 24 65 6e 61 62 6c 65 20  cache(" $enable 161e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 161f0 20 22 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 ")... ok: "$re
16200 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
16210 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
16220 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e {..        if
16230 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 16240 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 16250 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
16260 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
16270 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61          "---- ca
16280 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c  ll sqlite3_enabl
16290 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28 22  e_shared_cache("
162a0 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20   $enable \.. 162b0 20 20 20 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 ")... 162c0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 error: " \n\t$r
162d0 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
162e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }..
162f0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
16300 63 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 20  c setupDb {..
16310 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
16320 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 74  e {mode ""} {dat
16330 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d 20  eTimeFormat ""}
16340 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 22  {dateTimeKind ""
16350 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 20  } {flags ""}..
16360 20 20 20 20 20 20 20 20 20 20 7b 65 78 74 72 61            {extra
16370 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 72   ""} {qualify tr
16380 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 65  ue} {delete true
16390 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a 20  } {uri false}..
163a0 20 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70             {temp
163b0 6f 72 61 72 79 20 74 72 75 65 7d 20 7b 76 61 72  orary true} {var
163c0 4e 61 6d 65 20 64 62 7d 20 7b 71 75 69 65 74 20  Name db} {quiet
163d0 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
163e0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
163f0 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66  E: First, see if
16400 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20   our caller has
16410 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d  requested an in-
16420 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e  memory database.
16430 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
16440 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69   set isMemory [i
16450 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e  sMemoryDb $fileN 16460 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d ame].... #. 16470 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 16480 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 or now, all test 16490 20 64 61 74 61 62 61 73 65 73 20 75 73 65 64 20 databases used 164a0 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit 164b0 65 20 61 72 65 20 70 6c 61 63 65 64 0d 0a 20 20 e are placed.. 164c0 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f # into 164d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 64 69 the database di 164e0 72 65 63 74 6f 72 79 2e 20 20 45 61 63 68 20 64 rectory. Each d 164f0 61 74 61 62 61 73 65 20 61 6e 64 20 72 65 6c 61 atabase and rela 16500 74 65 64 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 ted files.. 16510 20 23 20 20 20 20 20 20 20 75 73 65 64 20 62 79 # used by 16520 20 61 20 74 65 73 74 20 73 68 6f 75 6c 64 20 62 a test should b 16530 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62 79 20 e cleaned up by 16540 74 68 61 74 20 74 65 73 74 20 75 73 69 6e 67 20 that test using 16550 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 16560 20 20 20 22 63 6c 65 61 6e 75 70 44 62 22 20 70 "cleanupDb" p 16570 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f 77 2e rocedure, below. 16580 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 16590 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 if {!$isMemory
165a0 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65  && $qualify} the 165b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 165c0 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 165d0 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 join [getDatabas 165e0 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c eDirectory] [fil 165f0 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
16600 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ]]..      }....
16610 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
16620 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74  NOTE: By default
16630 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65  , delete any pre
16640 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61  -existing databa
16650 73 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  se with the same
16660 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 20 20   file..      #
16670 20 20 20 20 20 6e 61 6d 65 20 69 66 20 69 74 20       name if it
16680 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73 74 73  currently exists
16690 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
166a0 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79    if {!$isMemory 166b0 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b &&$delete && [
166c0 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 166d0 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 166e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 166f0 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 16700 70 74 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 pt to delete any 16710 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 pre-existing da 16720 74 61 62 61 73 65 20 77 69 74 68 20 74 68 65 20 tabase with the 16730 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 same file.. 16740 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 2e # name. 16750 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 16760 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 16770 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 {file delete$fi
16780 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d 20  leName} error]}
16790 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
167a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
167b0 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f   NOTE: We someho
167c0 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65  w failed to dele
167d0 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70  te the file, rep
167e0 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20  ort why...
167f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
16800 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 16810 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16820 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
16830 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
16840 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
16850 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
16860 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
16870 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20  delete database
16880 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa 16890 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 168a0 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 "\" during 168b0 20 73 65 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 setup, error: " 168c0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
168d0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
168e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
168f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
16900 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
16910 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
16920 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
16930 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
16940 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
16950 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
16960 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65  ler.  The handle
16970 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20 64   to the opened d
16980 61 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20  atabase will be
16990 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20  stored there...
169a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70       #..      up
169b0 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64  var 1 $varName d 169c0 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 b.... #.. 169d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 # NOTE: Star 169e0 74 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 63 t building the c 169f0 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string 16a00 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 . The only requ 16a10 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 ired portion.. 16a20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t 16a30 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st 16a40 72 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 61 ring is the data 16a50 20 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 63 source, which c 16a60 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 ontains the.. 16a70 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 # datab 16a80 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 74 ase file name it 16a90 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 61 self. If our ca 16aa0 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 73 ller wants to us 16ab0 65 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 20 e a URI as.. 16ac0 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 61 # the da 16ad0 74 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 74 ta source, use t 16ae0 68 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 he FullUri conne 16af0 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f ction string pro 16b00 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 20 perty to.. 16b10 23 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 # prevent 16b20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 20 the data source 16b30 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 6e string from bein 16b40 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 g mangled... 16b50 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
16b60 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  uri} then {..
16b70 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74       set connect
16b80 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b 66  ion {FullUri=${f 16b90 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 ileName}}.. 16ba0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 16bb0 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f set connectio 16bc0 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d 24 n {Data Source=$
16bd0 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20  {fileName}}..
16be0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
16bf0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
16c00 69 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65 64  ince this proced
16c10 75 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63 69  ure has no speci
16c20 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20  al knowledge of
16c30 77 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  what the default
16c40 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
16c50 73 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20 74  setting is for t
16c60 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63 6f  he ToFullPath co
16c70 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
16c80 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73 0d  propery, always.
16c90 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
16ca0 64 64 20 74 68 65 20 76 61 6c 75 65 20 77 65 20  dd the value we
16cb0 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74 68  know about to th
16cc0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
16cd0 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ing...      #..
16ce0 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e       append conn
16cf0 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50  ection {;ToFullP
16d00 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d 0d  ath=${qualify}}. 16d10 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 16d20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 # NOTE: If our 16d30 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 caller specifie 16d40 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 d a journal mode 16d50 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 , add the necess 16d60 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 ary portion.. 16d70 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th 16d80 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str 16d90 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ing now... 16da0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st 16db0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 ring length$mod
16dc0 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
16dd0 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63          append c
16de0 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72  onnection {;Jour
16df0 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d  nal Mode=${mode} 16e00 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 16e10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 16e20 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c OTE: If our call 16e30 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44 er specified a D 16e40 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c 20 ateTime format, 16e50 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 add the necessar 16e60 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 16e70 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 portion of the 16e80 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 16e90 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d g now... #. 16ea0 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 16eb0 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 ng length$dateT
16ec0 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d 20  imeFormat] > 0}
16ed0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16ee0 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  append connectio
16ef0 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d  n {;DateTimeForm
16f00 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f 72  at=${dateTimeFor 16f10 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a mat}}.. }.. 16f20 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 16f30 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 # NOTE: If our 16f40 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified 16f50 20 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2c a DateTimeKind, 16f60 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 add the necessa 16f70 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 ry portion.. 16f80 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 # of the 16f90 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 16fa0 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # 16fb0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 16fc0 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 ing length$date
16fd0 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20 74  TimeKind] > 0} t
16fe0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
16ff0 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ppend connection
17000 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d   {;DateTimeKind=
17010 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d 7d  ${dateTimeKind}} 17020 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 17030 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 17040 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 TE: Figure out w 17050 68 61 74 20 74 68 65 20 66 69 6e 61 6c 20 66 6c hat the final fl 17060 61 67 73 20 66 6f 72 20 74 68 69 73 20 63 6f 6e ags for this con 17070 6e 65 63 74 69 6f 6e 20 6e 65 65 64 20 74 6f 20 nection need to 17080 62 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 be... #.. 17090 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 67 set flags [g 170a0 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 etConnectionFlag 170b0 73 20 24 66 69 6c 65 4e 61 6d 65 20 24 66 6c 61 s$fileName $fla 170c0 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 gs$quiet]....
170d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
170e0 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c  OTE: If our call
170f0 65 72 20 73 70 65 63 69 66 69 65 64 20 73 6f 6d  er specified som
17100 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e SQLiteConnecti
17110 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 74 68 65  onFlags, add the
17120 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
17130 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f  necessary portio
17140 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74  n of the connect
17150 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d  ion string now..
17160 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17170 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
17180 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 7d 20  th $flags] > 0} 17190 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 171a0 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f append connectio 171b0 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c 61 67 n {;Flags=${flag
171c0 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  s}}..      }....
171d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
171e0 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61   NOTE: If our ca
171f0 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61  ller specified a
17200 6e 20 65 78 74 72 61 20 70 61 79 6c 6f 61 64 20  n extra payload
17210 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  to the connectio
17220 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
17230 20 73 74 72 69 6e 67 2c 20 61 70 70 65 6e 64 20   string, append
17240 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23  it now...      #
17250 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
17260 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 74 72  ing length $extr 17270 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a a] > 0} then {.. 17280 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 append c 17290 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 65 78 onnection \;$ex
172a0 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  tra..      }....
172b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
172c0 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 6e   NOTE: Add the n
172d0 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65  ame of the curre
172e0 6e 74 20 74 65 73 74 20 66 69 6c 65 2c 20 69 66  nt test file, if
172f0 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 54 68 69   available.  Thi
17300 73 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20  s is..      #
17310 20 20 20 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f      only used fo
17320 72 20 64 65 62 75 67 67 69 6e 67 2e 0d 0a 20 20  r debugging...
17330 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
17340 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
17350 74 65 73 74 5f 66 69 6c 65 5d 7d 20 74 68 65 6e  test_file]} then
17360 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65   {..        appe
17370 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b  nd connection {;
17380 54 65 73 74 46 69 6c 65 3d 24 7b 3a 3a 74 65 73  TestFile=${::tes 17390 74 5f 66 69 6c 65 7d 7d 0d 0a 20 20 20 20 20 20 t_file}}.. 173a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 173b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 # NOTE: Add 173c0 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 the name of the 173d0 63 75 72 72 65 6e 74 20 74 65 73 74 2c 20 69 66 current test, if 173e0 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 54 68 69 available. Thi 173f0 73 20 69 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 s is only.. 17400 20 23 20 20 20 20 20 20 20 75 73 65 64 20 66 6f # used fo 17410 72 20 64 65 62 75 67 67 69 6e 67 2e 0d 0a 20 20 r debugging... 17420 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 17430 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 17440 65 61 67 6c 65 5f 74 65 73 74 73 28 43 75 72 72 eagle_tests(Curr 17450 65 6e 74 4e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 entName)]} then 17460 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e {.. appen 17470 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 d connection {;T 17480 65 73 74 4e 61 6d 65 3d 24 7b 3a 3a 65 61 67 6c estName=${::eagl
17490 65 5f 74 65 73 74 73 28 43 75 72 72 65 6e 74 4e  e_tests(CurrentN
174a0 61 6d 65 29 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d  ame)}}..      }.
174b0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
174c0 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 63 6c    # NOTE: For cl
174d0 61 72 69 74 79 2c 20 61 70 70 65 6e 64 20 61 20  arity, append a
174e0 66 69 6e 61 6c 20 73 65 6d 69 63 6f 6c 6f 6e 20  final semicolon
174f0 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  to the connectio
17500 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20  n string...
17510 20 23 0d 0a 20 20 20 20 20 20 61 70 70 65 6e 64   #..      append
17520 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 0d 0a   connection \;..
17530 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
17540 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68   # NOTE: Open th
17550 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
17560 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69  ction now, placi
17570 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61  ng the opaque ha
17580 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20  ndle value..
17590 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74    #       into t
175a0 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63  he variable spec
175b0 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c  ified by our cal
175c0 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ler...      #..
175d0 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c       set db [sql
175e0 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69   open -type SQLi
175f0 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65  te [subst $conne 17600 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 ction]].... 17610 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 17620 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20 : Configure the 17630 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 17640 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 6c ory for the newl 17650 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 y opened databas 17660 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 17670 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 connection now 17680 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 unless our calle 17690 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 r forbids it... 176a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 176b0 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 20 {$temporary &&
176c0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
176d0 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 44  no(setTemporaryD
176e0 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e  irectory)]} then
176f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20   {..        sql
17700 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70  execute $db [app 17710 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 17720 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 74 "PRAGMA t 17730 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 emp_store_direct 17740 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 65 ory = \"" [getTe 17750 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 mporaryDirectory 17760 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d ] \"\;].. } 17770 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 17780 20 20 20 23 20 4e 4f 54 45 3a 20 50 65 72 66 6f # NOTE: Perfo 17790 72 6d 20 61 6e 79 20 65 78 74 72 61 20 70 65 72 rm any extra per 177a0 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 65 74 75 -connection setu 177b0 70 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 p for the newly 177c0 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 opened.. # 177d0 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 6e database n 177e0 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 ow unless our ca 177f0 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e ller forbids it. 17800 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 17810 20 73 65 74 20 65 78 65 63 75 74 65 4f 6e 53 65 set executeOnSe 17820 74 75 70 20 5b 67 65 74 45 78 65 63 75 74 65 4f tup [getExecuteO 17830 6e 53 65 74 75 70 5d 0d 0a 0d 0a 20 20 20 20 20 nSetup].... 17840 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 17850 67 74 68 20 24 65 78 65 63 75 74 65 4f 6e 53 65 gth$executeOnSe
17860 74 75 70 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20  tup] > 0 && \..
17870 20 20 20 20 20 20 20 20 20 21 5b 69 6e 66 6f 20           ![info
17880 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65 63  exists ::no(exec
17890 75 74 65 4f 6e 53 65 74 75 70 29 5d 7d 20 74 68  uteOnSetup)]} th
178a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
178b0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
178c0 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6d 61   This command ma
178d0 79 20 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72  y raise an error
178e0 3b 20 69 66 20 73 6f 2c 20 74 68 61 74 20 69 73  ; if so, that is
178f0 20 66 69 6e 65 2c 20 61 73 0d 0a 20 20 20 20 20   fine, as..
17900 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 65     #       the e
17910 6e 63 6c 6f 73 69 6e 67 20 74 65 73 74 20 77 69  nclosing test wi
17920 6c 6c 20 74 68 65 6e 20 66 61 69 6c 2e 20 20 54  ll then fail.  T
17930 68 65 20 5b 73 75 62 73 74 5d 20 63 6f 6d 6d 61  he [subst] comma
17940 6e 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23  nd is..        #
17950 20 20 20 20 20 20 20 75 73 65 64 20 6f 6e 20 74         used on t
17960 68 65 20 53 51 4c 20 69 6e 20 63 61 73 65 20 69  he SQL in case i
17970 74 20 6e 65 65 64 73 20 74 6f 20 72 65 66 65 72  t needs to refer
17980 20 74 6f 20 73 74 61 74 65 20 69 6e 20 6f 75 72   to state in our
17990 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
179a0 20 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20    context...
179b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
179c0 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b  ql execute $db [ 179d0 73 75 62 73 74 20 24 65 78 65 63 75 74 65 4f 6e subst$executeOn
179e0 53 65 74 75 70 5d 0d 0a 20 20 20 20 20 20 7d 0d  Setup]..      }.
179f0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
17a00 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73    # NOTE: Always
17a10 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f 6e 6e   return the conn
17a20 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75 70  ection handle up
17a30 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20  on success...
17a40 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
17a50 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a 0c  rn $db.. }... 17a60 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 .. proc getDb 17a70 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 Connection { {va 17a80 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 rName db} } {.. 17a90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 17aa0 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 17ab0 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 17ac0 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" 17ad0 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context 17ae0 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # 17af0 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 caller. 17b00 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 The handle to th 17b10 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69 e database previ 17b20 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 ously opened via 17b30 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 17b40 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72 [setupDb] pr 17b50 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62 ocedure should b 17b60 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d e stored there.. 17b70 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 17b80 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
17b90 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a   db....      #..
17ba0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
17bb0 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 41  is returns the A
17bc0 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e 65 63  DO.NET IDbConnec
17bd0 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e 73 74  tion object inst
17be0 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a 20 20  ance for the..
17bf0 20 20 20 20 23 20 20 20 20 20 20 20 73 70 65 63      #       spec
17c00 69 66 69 65 64 20 64 61 74 61 62 73 65 20 68 61  ified databse ha
17c10 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 65 74  ndle.  Since get
17c20 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 63 74  ting this object
17c30 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a 20 20   relies upon..
17c40 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
17c50 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 72 65  e internals, gre
17c60 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62  at care should b
17c70 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f 69 64  e taken to avoid
17c80 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d 0a 20   disposing of..
17c90 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69       #       thi
17ca0 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 68 65  s object or othe
17cb0 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 69 74  rwise putting it
17cc0 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c 69 64   into an invalid
17cd0 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 20 23   state...      #
17ce0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
17cf0 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68  o exists db]} th
17d00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
17d10 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
17d20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
17d30 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
17d40 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c 61  ublic -objectfla
17d50 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 2d 61  gs +NoDispose -a
17d60 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  lias \..
17d70 20 20 20 20 20 20 49 6e 74 65 72 70 72 65 74 65        Interprete
17d80 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e  r.GetActive.conn
17d90 65 63 74 69 6f 6e 73 20 49 74 65 6d 20 24 64 62  ections Item $db 17da0 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 .. } resu 17db0 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b lt] == 0} then { 17dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 17dd0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 17de0 20 53 75 63 63 65 73 73 2c 20 72 65 74 75 72 6e Success, return 17df0 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 the opaque obje 17e00 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 ct handle... 17e10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 17e20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c return$resul
17e30 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  t..        } els
17e40 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  e {..          #
17e50 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
17e60 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 65 70  TE: Failure, rep
17e70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20  ort why...
17e80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
17e90 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 17ea0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 17eb0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 17ec0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 17ed0 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 G: failed to get 17ee0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 connection hand 17ef0 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 le for database 17f00 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 17f10 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65 72$db "\", er
17f20 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73  ror: " \n\t $res 17f30 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 17f40 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 17f50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 17f60 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 NOTE: Failure, r 17f70 65 74 75 72 6e 20 61 6e 20 6f 62 76 69 6f 75 73 eturn an obvious 17f80 6c 79 20 69 6e 76 61 6c 69 64 20 6f 70 61 71 75 ly invalid opaqu 17f90 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e e object handle. 17fa0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 17fb0 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 17fc0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 66 }..... proc f 17fd0 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 reeDbConnection 17fe0 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 { {varName conne 17ff0 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20 ction} } {.. 18000 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 18010 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 E: Refer to the 18020 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 specified variab 18030 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 le (e.g. "connec 18040 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d 0a 20 tion") in the.. 18050 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 18060 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c text of our call 18070 65 72 2e 20 20 54 68 65 20 6f 70 61 71 75 65 20 er. The opaque 18080 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 6f object handle fo 18090 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a 20 20 r an ADO.NET.. 180a0 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e # conn 180b0 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c ection previousl 180c0 79 20 72 65 74 75 72 6e 65 64 20 62 79 20 5b 67 y returned by [g 180d0 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20 etDbConnection] 180e0 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 should be.. 180f0 20 23 20 20 20 20 20 20 20 73 74 6f 72 65 64 20 # stored 18100 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d there... #. 18110 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
18120 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69  varName connecti
18130 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  on....      #..
18140 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
18150 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65 20 74  empt to remove t
18160 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74  he opaque object
18170 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65   handle from the
18180 20 69 6e 74 65 72 70 72 65 74 65 72 0d 0a 20 20   interpreter..
18190 20 20 20 20 23 20 20 20 20 20 20 20 6e 6f 77 2e      #       now.
181a0 20 20 54 68 69 73 20 5b 6f 62 6a 65 63 74 20 64    This [object d
181b0 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77 69 6c  ispose] call wil
181c0 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 64  l not actually d
181d0 69 73 70 6f 73 65 20 6f 66 20 74 68 65 0d 0a 20  ispose of the..
181e0 20 20 20 20 20 23 20 20 20 20 20 20 20 75 6e 64       #       und
181f0 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74 20 62  erlying object b
18200 65 63 61 75 73 65 20 74 68 65 20 2b 4e 6f 44 69  ecause the +NoDi
18210 73 70 6f 73 65 20 66 6c 61 67 20 77 61 73 20 73  spose flag was s
18220 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20 20 20  et on it..
18230 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 63  #       during c
18240 72 65 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f  reation of the o
18250 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
18260 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  dle...      #..
18270 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
18280 78 69 73 74 73 20 63 6f 6e 6e 65 63 74 69 6f 6e  xists connection
18290 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
182a0 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74    [catch {object
182b0 20 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e 65 63   dispose $connec 182c0 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20 74 68 tion} error]} th 182d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 182e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 182f0 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c We somehow fail 18300 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 ed to remove the 18310 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72 74 20 handle, report 18320 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d why... #. 18330 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
18340 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
18350 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
18360 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
18370 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
18380 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e 65 63  to remove connec
18390 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22 22 20  tion handle \""
183a0 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20  $connection \.. 183b0 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 "\", 183c0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 error: " \n\t$e
183d0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
183e0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
183f0 20 70 72 6f 63 20 61 64 64 44 62 43 6f 6e 6e 65   proc addDbConne
18400 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63 74 69  ction { connecti
18410 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20  on {varName db}
18420 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
18430 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
18440 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
18450 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
18460 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
18470 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
18480 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
18490 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ler...      #..
184a0 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 184b0 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 rName db.... 184c0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 184d0 45 3a 20 43 72 65 61 74 65 20 61 20 63 6f 72 72 E: Create a corr 184e0 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 ectly formatted 184f0 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74 name for the dat 18500 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e abase connection 18510 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 to.. # 18520 20 20 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 be added to t 18530 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 65 64 20 he list managed 18540 62 79 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 by the Eagle int 18550 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 erpreter... 18560 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62 #.. set db 18570 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 18580 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 18590 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 45 c \.. E 185a0 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 agle._Components 185b0 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d 61 74 4f .Private.FormatO 185c0 70 73 20 44 61 74 61 62 61 73 65 4f 62 6a 65 63 ps DatabaseObjec 185d0 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74 69 6f tName$connectio
185e0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53  n \..          S
185f0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection
18600 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49  [object invoke I
18610 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
18620 74 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d  tive NextId]]...
18630 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
18640 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20  # NOTE: Add the
18650 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
18660 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 79 20  ion provided by
18670 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f 20 74 68  our caller to th
18680 65 20 6c 69 73 74 0d 0a 20 20 20 20 20 20 23 20  e list..      #
18690 20 20 20 20 20 20 6f 66 20 74 68 6f 73 65 20 6b        of those k
186a0 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61 67 6c  nown to the Eagl
186b0 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  e interpreter...
186c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 6f        #..      o
186d0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
186e0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49  ags +NonPublic I
186f0 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
18700 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73  tive.connections
18710 20 41 64 64 20 5c 0d 0a 20 20 20 20 20 20 20 20   Add \..
18720 20 20 24 64 62 20 24 63 6f 6e 6e 65 63 74 69 6f    $db$connectio
18730 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  n..    }.....
18740 20 70 72 6f 63 20 72 65 6d 6f 76 65 44 62 54 72   proc removeDbTr
18750 61 6e 73 61 63 74 69 6f 6e 20 7b 20 74 72 61 6e  ansaction { tran
18760 73 61 63 74 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20  saction } {..
18770 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
18780 54 45 3a 20 52 65 6d 6f 76 65 20 74 68 65 20 64  TE: Remove the d
18790 61 74 61 62 61 73 65 20 74 72 61 6e 73 61 63 74  atabase transact
187a0 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 79 20  ion provided by
187b0 6f 75 72 20 63 61 6c 6c 65 72 20 66 72 6f 6d 20  our caller from
187c0 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
187d0 20 20 20 6c 69 73 74 20 6f 66 20 74 68 6f 73 65     list of those
187e0 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61   known to the Ea
187f0 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  gle interpreter.
18800 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
18810 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
18820 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
18830 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
18840 41 63 74 69 76 65 2e 74 72 61 6e 73 61 63 74 69  Active.transacti
18850 6f 6e 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ons \..
18860 20 52 65 6d 6f 76 65 20 24 74 72 61 6e 73 61 63   Remove $transac 18870 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a tion.. }..... 18880 20 20 20 20 70 72 6f 63 20 67 65 74 52 6f 77 73 proc getRows 18890 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b 20 FromDataTable { 188a0 64 61 74 61 54 61 62 6c 65 20 7b 76 61 6c 75 65 dataTable {value 188b0 43 61 6c 6c 62 61 63 6b 20 22 22 7d 20 7d 20 7b Callback ""} } { 188c0 0d 0a 20 20 20 20 20 20 73 65 74 20 72 6f 77 73 .. set rows 188d0 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 20 20 20 73 [list].. s 188e0 65 74 20 63 6f 75 6e 74 20 5b 24 64 61 74 61 54 et count [$dataT
188f0 61 62 6c 65 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75  able Columns.Cou
18900 6e 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72  nt]....      for
18910 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20 7b   {set index 0} {
18920 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d  $index <$count}
18930 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d   {incr index} {.
18940 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74  .        set dat
18950 61 43 6f 6c 75 6d 6e 20 5b 24 64 61 74 61 54 61  aColumn [$dataTa 18960 62 6c 65 20 2d 61 6c 69 61 73 20 43 6f 6c 75 6d ble -alias Colum 18970 6e 73 2e 67 65 74 5f 49 74 65 6d 20 24 69 6e 64 ns.get_Item$ind
18980 65 78 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ex]..        set
18990 20 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20 5b   names($index) [ 189a0 24 64 61 74 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75$dataColumn Colu
189b0 6d 6e 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d  mnName]..      }
189c0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
189d0 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75 70     # NOTE: Setup
189e0 20 73 6f 6d 65 20 54 63 6c 20 72 65 74 75 72 6e   some Tcl return
189f0 20 63 6f 64 65 20 63 6f 6e 73 74 61 6e 74 73 2e   code constants.
18a00 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
18a10 20 73 65 74 20 4f 6b 20 30 3b 20 73 65 74 20 45   set Ok 0; set E
18a20 72 72 6f 72 20 31 3b 20 73 65 74 20 52 65 74 75  rror 1; set Retu
18a30 72 6e 20 32 3b 20 73 65 74 20 42 72 65 61 6b 20  rn 2; set Break
18a40 33 3b 20 73 65 74 20 43 6f 6e 74 69 6e 75 65 20  3; set Continue
18a50 34 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63  4....      objec
18a60 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73  t foreach -alias
18a70 20 64 61 74 61 52 6f 77 20 5b 73 65 74 20 64 61   dataRow [set da
18a80 74 61 52 6f 77 73 20 5b 24 64 61 74 61 54 61 62  taRows [$dataTab 18a90 6c 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a 20 20 20 le Rows]] {.. 18aa0 20 20 20 20 20 73 65 74 20 72 6f 77 20 5b 6c 69 set row [li 18ab0 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 st].... f 18ac0 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d or {set index 0} 18ad0 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e {$index < $coun 18ae0 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 t} {incr index} 18af0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 18b00 20 76 61 6c 75 65 20 5b 24 64 61 74 61 52 6f 77 value [$dataRow
18b10 20 2d 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20   -create -alias
18b20 67 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d  get_Item $index] 18b30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 18b40 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 18b50 20 24 76 61 6c 75 65 43 61 6c 6c 62 61 63 6b 5d$valueCallback]
18b60 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
18b70 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f            set co
18b80 64 65 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  de [catch {..
18b90 20 20 20 20 20 20 20 20 20 20 20 24 76 61 6c 75             $valu 18ba0 65 43 61 6c 6c 62 61 63 6b 20 24 64 61 74 61 54 eCallback$dataT
18bb0 61 62 6c 65 20 24 64 61 74 61 52 6f 77 20 24 69  able $dataRow$i
18bc0 6e 64 65 78 20 24 76 61 6c 75 65 0d 0a 20 20 20  ndex $value.. 18bd0 20 20 20 20 20 20 20 20 20 7d 20 6e 65 77 56 61 } newVa 18be0 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 lue].... 18bf0 20 20 20 20 69 66 20 7b 24 63 6f 64 65 20 3d 3d if {$code ==
18c00 20 24 4f 6b 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   $Ok} then {.. 18c10 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 18c20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 18c30 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 18c40 63 69 66 69 65 64 20 28 6e 65 77 3f 29 20 72 6f cified (new?) ro 18c50 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 w value... 18c60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 18c70 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 lappend 18c80 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 row [list$name
18c90 73 28 24 69 6e 64 65 78 29 20 24 6e 65 77 56 61  s($index)$newVa
18ca0 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  lue]..
18cb0 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f 64    } elseif {$cod 18cc0 65 20 3d 3d 20 24 45 72 72 6f 72 7d 20 74 68 65 e ==$Error} the
18cd0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
18ce0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
18cf0 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
18d00 74 68 65 20 28 6e 65 77 3f 29 20 4e 55 4c 4c 20  the (new?) NULL
18d10 72 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  row value...
18d20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
18d30 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65             lappe
18d40 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61  nd row [list $na 18d50 6d 65 73 28 24 69 6e 64 65 78 29 5d 0d 0a 20 20 mes($index)]..
18d60 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
18d70 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 52 65  if {$code ==$Re
18d80 74 75 72 6e 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  turn} then {..
18d90 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
18db0 4f 54 45 3a 20 53 6b 69 70 20 72 65 6d 61 69 6e  OTE: Skip remain
18dc0 69 6e 67 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ing values for t
18dd0 68 69 73 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20  his row...
18de0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
18df0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 0d 0a           break..
18e00 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
18e10 73 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24  seif {$code ==$
18e20 42 72 65 61 6b 7d 20 74 68 65 6e 20 7b 0d 0a 20  Break} then {..
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
18e50 4e 4f 54 45 3a 20 53 6b 69 70 20 70 72 6f 63 65  NOTE: Skip proce
18e60 73 73 69 6e 67 20 74 68 69 73 20 72 6f 77 20 76  ssing this row v
18e70 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  alue...
18e80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
18e90 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63      } elseif {$c 18ea0 6f 64 65 20 3d 3d 20 24 43 6f 6e 74 69 6e 75 65 ode ==$Continue
18eb0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
18ec0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
18ed0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
18ee0 20 55 73 65 20 64 65 66 61 75 6c 74 20 72 6f 77   Use default row
18ef0 20 76 61 6c 75 65 20 68 61 6e 64 6c 69 6e 67 2e   value handling.
18f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18f10 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  #..            }
18f20 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
18f30 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
18f40 20 20 73 65 74 20 63 6f 64 65 20 24 43 6f 6e 74    set code $Cont 18f50 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 inue.. 18f60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 }.... i 18f70 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 43 6f 6e f {$code == $Con 18f80 74 69 6e 75 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 tinue} then {.. 18f90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 18fa0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
18fb0 61 6c 75 65 5d 20 3e 20 30 20 26 26 20 5c 0d 0a  alue] > 0 && \..
18fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18fd0 21 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20  ![object invoke
18fe0 43 6f 6e 76 65 72 74 20 49 73 44 42 4e 75 6c 6c  Convert IsDBNull
18ff0 20 24 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b   $value]} then { 19000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19010 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 lappend row [lis 19020 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 t$names($index) 19030 20 5b 24 76 61 6c 75 65 20 54 6f 53 74 72 69 6e [$value ToStrin
19040 67 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g]]..
19050 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
19060 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
19070 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65   row [list $name 19080 73 28 24 69 6e 64 65 78 29 5d 0d 0a 20 20 20 20 s($index)]..
19090 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
190a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
190b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 61 70  }....        lap
190c0 70 65 6e 64 20 72 6f 77 73 20 24 72 6f 77 0d 0a  pend rows $row.. 190d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 190e0 20 72 65 74 75 72 6e 20 24 72 6f 77 73 0d 0a 20 return$rows..
190f0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
19100 63 20 64 75 6d 70 52 6f 77 73 46 72 6f 6d 44 61  c dumpRowsFromDa
19110 74 61 54 61 62 6c 65 20 7b 20 63 68 61 6e 6e 65  taTable { channe
19120 6c 20 72 6f 77 73 20 7d 20 7b 0d 0a 20 20 20 20  l rows } {..
19130 20 20 73 65 74 20 73 65 71 75 65 6e 63 65 20 31    set sequence 1
19140 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63  ....      foreac
19150 68 20 72 6f 77 20 24 72 6f 77 73 20 7b 0d 0a 20  h row $rows {.. 19160 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
19170 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
19180 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
19190 20 5b 65 78 70 72 20 7b 24 73 65 71 75 65 6e 63   [expr {$sequenc 191a0 65 20 3e 20 31 20 3f 20 22 5c 6e 22 20 3a 20 22 e > 1 ? "\n" : " 191b0 22 7d 5d 20 22 2d 2d 2d 2d 20 52 4f 57 20 23 22 "}] "---- ROW #" 191c0 20 24 73 65 71 75 65 6e 63 65 20 3a 5c 6e 5d 0d$sequence :\n].
191d0 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61  ...        forea
191e0 63 68 20 70 61 69 72 20 24 72 6f 77 20 7b 0d 0a  ch pair $row {.. 191f0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c if {[l 19200 6c 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3e 3d length$pair] >=
19210 20 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   2} then {..
19220 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 19230 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 19240 67 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 gs \t \.. 19250 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b [list [ 19260 6c 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d lindex$pair 0]]
19270 20 22 3a 20 22 20 5b 6c 69 73 74 20 5b 6c 69 6e   ": " [list [lin
19280 64 65 78 20 24 70 61 69 72 20 31 5d 5d 20 5c 6e  dex $pair 1]] \n 19290 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 ].. } e 192a0 6c 73 65 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 lseif {[llength 192b0 24 70 61 69 72 5d 20 3d 3d 20 31 7d 20 74 68 65$pair] == 1} the
192c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
192d0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 192e0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c [appendArgs \t \ 192f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19300 20 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 [list [lindex 19310 24 70 61 69 72 20 30 5d 5d 20 22 3a 20 3c 6e 75$pair 0]] ": <nu
19320 6c 6c 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  ll>\n"]..
19330 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
19340 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $19350 63 68 61 6e 6e 65 6c 20 5c 74 3c 65 6d 70 74 79 channel \t<empty 19360 3e 5c 6e 3b 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 >\n; # NOTE: No 19370 64 61 74 61 3f 0d 0a 20 20 20 20 20 20 20 20 20 data?.. 19380 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 19390 0a 20 20 20 20 20 20 20 20 69 6e 63 72 20 73 65 . incr se 193a0 71 75 65 6e 63 65 0d 0a 20 20 20 20 20 20 7d 0d quence.. }. 193b0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 193c0 72 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 roc cleanupDb { 193d0 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d fileName {varNam 193e0 65 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 e db} {collect t 193f0 72 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 rue} {qualify tr 19400 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue}.. 19410 20 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74 {delet 19420 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 e true} } {.. 19430 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 19440 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 TE: Attempt to f 19450 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 orce all pending 19460 20 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 "garbage" objec 19470 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 ts to be collect 19480 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ed,.. # 19490 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c including SQL 194a0 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 ite statements a 194b0 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 nd backup object 194c0 73 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 s; this should a 194d0 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 llow.. # 194e0 20 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 the underlyi 194f0 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 ng database file 19500 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d to be deleted.. 19510 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 19520 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 if {$collect} th
19530 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f  en {..        co
19540 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a  llectGarbage $:: 19550 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 test_channel.. 19560 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 19570 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 19580 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 Refer to the spe 19590 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 cified variable 195a0 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 (e.g. "db") in t 195b0 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 he context of ou 195c0 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # 195d0 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 caller. The ha 195e0 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 ndle to the data 195f0 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 base previously 19600 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a opened via the.. 19610 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 # [s 19620 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 etupDb] procedur 19630 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 e should be stor 19640 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 ed there... 19650 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar 19660 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
19670 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
19680 23 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68  # NOTE: Close th
19690 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to
196a0 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f 77  the database now
196b0 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61  .  This should a
196c0 6c 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 20 23  llow us..      #
196d0 20 20 20 20 20 20 20 74 6f 20 64 65 6c 65 74 65         to delete
196e0 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying
196f0 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a  database file...
19700 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
19710 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
19720 64 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 73  db] && [catch {s
19730 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72  ql close $db} er 19740 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. 19750 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 19760 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 # NOTE: We some 19770 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63 6c how failed to cl 19780 6f 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 ose the database 19790 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... 197a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 197b0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
197c0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
197d0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
197e0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
197f0 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73  : failed to clos
19800 65 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24  e database \"" $19810 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 db "\", error: " 19820 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19830 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
19840 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
19850 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
19860 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66  E: First, see if
19870 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20   our caller has
19880 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d  requested an in-
19890 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e  memory database.
198a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
198b0 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69   set isMemory [i
198c0 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e  sMemoryDb $fileN 198d0 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d ame].... #. 198e0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 . # NOTE: B 198f0 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70 61 uild the full pa 19900 74 68 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 th to the databa 19910 73 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 se file name. F 19920 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 or now, all test 19930 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 19940 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 database files a 19950 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 re stored in the 19960 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 temporary direc 19970 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a tory... #.. 19980 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 if {!$isMe
19990 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79  mory && $qualify 199a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 199b0 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b set fileName [ 199c0 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 file join [getDa 199d0 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d tabaseDirectory] 199e0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
199f0 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d  eName]]..      }
19a00 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
19a10 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
19a20 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69   if the file sti
19a30 6c 6c 20 65 78 69 73 74 73 3b 20 69 6e 69 74 69  ll exists; initi
19a40 61 6c 6c 79 2c 20 61 73 73 75 6d 65 20 61 6c 6c  ally, assume all
19a50 20 66 69 6c 65 73 20 77 69 6c 6c 0d 0a 20 20 20   files will..
19a60 20 20 20 23 20 20 20 20 20 20 20 62 65 20 64 65     #       be de
19a70 6c 65 74 65 64 20 73 75 63 63 65 73 73 66 75 6c  leted successful
19a80 6c 79 2c 20 69 66 20 6e 65 63 65 73 73 61 72 79  ly, if necessary
19a90 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
19aa0 20 20 73 65 74 20 73 75 63 63 65 73 73 20 74 72    set success tr
19ab0 75 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  ue....      if {
19ac0 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64  !$isMemory &&$d
19ad0 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65  elete && [file e
19ae0 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] 19af0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 19b00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 19b10 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 OTE: Skip deleti 19b20 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 ng database file 19b30 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 s if somebody se 19b40 74 73 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 ts the global.. 19b50 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 # v 19b60 61 72 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65 ariable to preve 19b70 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 nt it... 19b80 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 19b90 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 19ba0 6f 28 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 73 o(cleanupDbFiles 19bb0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 19bc0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 19bd0 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 19be0 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 pt to delete the 19bf0 20 74 65 73 74 20 57 41 4c 20 66 69 6c 65 2c 20 test WAL file, 19c00 69 66 20 61 6e 79 2c 20 6e 6f 77 2e 0d 0a 20 20 if any, now... 19c10 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 19c20 20 20 20 20 20 73 65 74 20 77 61 6c 46 69 6c 65 set walFile 19c30 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 Name [appendArgs 19c40 20 24 66 69 6c 65 4e 61 6d 65 20 2d 77 61 6c 5d$fileName -wal]
19c50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
19c60 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $19c70 77 61 6c 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 walFileName]} th 19c80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19c90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 19ca0 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 72 # NOTE: If ther 19cb0 65 20 69 73 20 61 20 57 41 4c 20 66 69 6c 65 2c e is a WAL file, 19cc0 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20 7a 65 it should be ze 19cd0 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 69 73 ro bytes at this 19ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 19cf0 20 20 20 20 20 20 70 6f 69 6e 74 2e 0d 0a 20 20 point... 19d00 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 19d10 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 if {[se 19d20 74 20 73 69 7a 65 20 5b 66 69 6c 65 20 73 69 7a t size [file siz 19d30 65 20 24 77 61 6c 46 69 6c 65 4e 61 6d 65 5d 5d e$walFileName]]
19d40 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
19d50 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
19d70 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
19d80 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
19d90 65 20 74 68 65 20 57 41 4c 20 66 69 6c 65 2c 20  e the WAL file,
19da0 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
19db0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
19dd0 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c  [catch {file del
19de0 65 74 65 20 24 77 61 6c 46 69 6c 65 4e 61 6d 65  ete $walFileName 19df0 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b } error]} then { 19e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19e10 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
19e20 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
19e30 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
19e40 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
19e50 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
19e60 20 74 6f 20 64 65 6c 65 74 65 20 57 41 4c 20 66   to delete WAL f
19e70 69 6c 65 20 5c 22 22 20 24 77 61 6c 46 69 6c 65  ile \"" $walFile 19e80 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. 19e90 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 "\" 19ea0 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 during cleanup, 19eb0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 error: " \n\t$e
19ec0 72 72 6f 72 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  rror \n]....
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
19ee0 73 75 63 63 65 73 73 20 66 61 6c 73 65 0d 0a 20  success false..
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19f00 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
19f10 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
19f20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 19f30 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 19f40 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 19f50 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 19f60 20 57 41 52 4e 49 4e 47 3a 20 57 41 4c 20 66 69 WARNING: WAL fi 19f70 6c 65 20 5c 22 22 20 24 77 61 6c 46 69 6c 65 4e le \""$walFileN
19f80 61 6d 65 20 22 5c 22 20 69 73 20 22 20 24 73 69  ame "\" is " $si 19f90 7a 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ze \.. 19fa0 20 20 20 20 20 20 20 20 22 20 62 79 74 65 73 20 " bytes 19fb0 69 6e 20 73 69 7a 65 2c 20 73 6b 69 70 70 69 6e in size, skippin 19fc0 67 20 61 6c 6c 20 66 69 6c 65 20 64 65 6c 65 74 g all file delet 19fd0 69 6f 6e 73 2e 2e 2e 5c 6e 22 5d 0d 0a 0d 0a 20 ions...\n"].... 19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret 19ff0 75 72 6e 20 31 3b 20 23 20 65 72 72 6f 72 0d 0a urn 1; # error.. 1a000 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1a010 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 1a020 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a030 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att 1a040 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 empt to delete t 1a050 68 65 20 74 65 73 74 20 53 48 4d 20 66 69 6c 65 he test SHM file 1a060 2c 20 69 66 20 61 6e 79 2c 20 6e 6f 77 2e 0d 0a , if any, now... 1a070 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1a080 20 20 20 20 20 20 20 73 65 74 20 73 68 6d 46 69 set shmFi 1a090 6c 65 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 leName [appendAr 1a0a0 67 73 20 24 66 69 6c 65 4e 61 6d 65 20 2d 73 68 gs$fileName -sh
1a0b0 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  m]....
1a0c0 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
1a0d0 20 24 73 68 6d 46 69 6c 65 4e 61 6d 65 5d 20 26   $shmFileName] & 1a0e0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 1a0f0 20 20 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 [catch {file 1a100 64 65 6c 65 74 65 20 24 73 68 6d 46 69 6c 65 4e delete$shmFileN
1a110 61 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65  ame} error]} the
1a120 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1a130 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1a140 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68  # NOTE: We someh
1a150 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  ow failed to del
1a160 65 74 65 20 74 68 65 20 53 48 4d 20 66 69 6c 65  ete the SHM file
1a170 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20  , report why...
1a180 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1a190 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1a1a0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1a1b0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1a1d0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 1a1e0 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 53 iled to delete S 1a1f0 48 4d 20 66 69 6c 65 20 5c 22 22 20 24 73 68 6d HM file \""$shm
1a200 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  FileName \..
1a210 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
1a220 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20  during cleanup,
1a230 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 1a240 72 72 6f 72 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 rror \n].... 1a250 20 20 20 20 20 20 20 20 73 65 74 20 73 75 63 63 set succ 1a260 65 73 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 ess false.. 1a270 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1a280 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1a290 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 1a2a0 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 to delete the t 1a2b0 65 73 74 20 64 61 74 61 62 61 73 65 20 66 69 6c est database fil 1a2c0 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 e now... 1a2d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 1a2e0 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 f {[catch {file 1a2f0 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 delete$fileName
1a300 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b  } error]} then {
1a310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
1a320 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
1a330 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20  OTE: We somehow
1a340 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65  failed to delete
1a350 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72   the file, repor
1a360 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20  t why...
1a370 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1a380 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1a390 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1a3a0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1a3b0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 1a3c0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 1a3d0 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 delete database 1a3e0 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
1a3f0 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
1a400 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e         "\" durin
1a410 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72  g cleanup, error
1a420 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 1a430 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 \n].... 1a440 20 20 20 73 65 74 20 73 75 63 63 65 73 73 20 66 set success f 1a450 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 alse.. 1a460 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 1a470 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 e {.. # 1a480 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 1a490 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 TE: Show that we 1a4a0 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e skipped deletin 1a4b0 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 g the file... 1a4c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1a4d0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1a4e0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1a4f0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1a500 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
1a510 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65  NING: skipped de
1a520 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  leting database
1a530 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa 1a540 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 1a550 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c 1a560 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 leanup\n"].. 1a570 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 1a580 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b .. return [ 1a590 65 78 70 72 20 7b 24 73 75 63 63 65 73 73 20 3f expr {$success ?
1a5a0 20 30 20 3a 20 31 7d 5d 0d 0a 20 20 20 20 7d 0d   0 : 1}]..    }.
1a5b0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76  ....    proc sav
1a5c0 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69  eEnvironmentVari
1a5d0 61 62 6c 65 73 20 7b 20 6e 61 6d 65 73 20 7b 76  ables { names {v
1a5e0 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a  arName ""} } {..
1a5f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
1a600 20 4e 4f 54 45 3a 20 46 6f 72 20 65 61 63 68 20   NOTE: For each
1a610 6e 61 6d 65 2c 20 64 6f 65 73 20 74 68 65 20 6c  name, does the l
1a620 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  ive environment
1a630 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 3f 20  variable exist?
1a640 20 49 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20   If..      #
1a650 20 20 20 73 6f 2c 20 73 61 76 65 20 74 68 65 20     so, save the
1a660 76 61 6c 75 65 20 66 6f 72 20 6c 61 74 65 72 3b  value for later;
1a670 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65   otherwise, make
1a680 20 73 75 72 65 20 74 68 65 20 73 61 76 65 64 0d   sure the saved.
1a690 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76  .      #       v
1a6a0 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 65 78  alue does not ex
1a6b0 69 73 74 20 65 69 74 68 65 72 2e 20 20 54 68 65  ist either.  The
1a6c0 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e   live environmen
1a6d0 74 20 76 61 72 69 61 62 6c 65 73 0d 0a 20 20 20  t variables..
1a6e0 20 20 20 23 20 20 20 20 20 20 20 41 52 45 20 4e     #       ARE N
1a6f0 4f 54 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  OT changed by th
1a700 69 73 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20  is procedure...
1a710 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
1a720 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
1a730 20 24 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d   $varName] == 0} 1a740 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1a750 20 73 65 74 20 76 61 72 4e 61 6d 65 20 73 61 76 set varName sav 1a760 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a edEnv.. }.. 1a770 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 1a780 24 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e$varName savedEn
1a790 76 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61  v....      forea
1a7a0 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b  ch name $names { 1a7b0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 .. if {[i 1a7c0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 nfo exists ::env 1a7d0 28 24 6e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b ($name)]} then {
1a7e0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
1a7f0 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 20  savedEnv($name) 1a800 24 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 0d 0a 20$::env($name).. 1a810 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 1a820 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 . unset 1a830 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 -nocomplain sav 1a840 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 edEnv($name)..
1a850 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
1a860 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
1a870 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
1a880 69 73 20 73 65 6c 66 2d 63 6c 65 61 6e 69 6e 67  is self-cleaning
1a890 2e 20 20 49 66 20 6e 6f 20 73 61 76 65 64 20 65  .  If no saved e
1a8a0 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
1a8b0 62 6c 65 73 20 6e 6f 77 0d 0a 20 20 20 20 20 20  bles now..
1a8c0 23 20 20 20 20 20 20 20 65 78 69 73 74 2c 20 72  #       exist, r
1a8d0 65 6d 6f 76 65 20 74 68 65 20 61 72 72 61 79 2e  emove the array.
1a8e0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1a8f0 20 69 66 20 7b 5b 61 72 72 61 79 20 73 69 7a 65   if {[array size
1a900 20 73 61 76 65 64 45 6e 76 5d 20 3d 3d 20 30 7d   savedEnv] == 0}
1a910 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1a920 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
1a930 69 6e 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20  in savedEnv..
1a940 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
1a950 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65      proc restore
1a960 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61  EnvironmentVaria
1a970 62 6c 65 73 20 7b 20 6e 61 6d 65 73 20 7b 76 61  bles { names {va
1a980 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20  rName ""} } {..
1a990 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
1a9a0 4e 4f 54 45 3a 20 46 6f 72 20 65 61 63 68 20 6e  NOTE: For each n
1a9b0 61 6d 65 2c 20 64 6f 65 73 20 74 68 65 20 73 61  ame, does the sa
1a9c0 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  ved environment
1a9d0 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 3f 20  variable exist?
1a9e0 20 49 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20   If..      #
1a9f0 20 20 20 73 6f 2c 20 72 65 73 74 6f 72 65 20 74     so, restore t
1aa00 68 65 20 73 61 76 65 64 20 76 61 6c 75 65 20 61  he saved value a
1aa10 6e 64 20 75 6e 73 65 74 20 69 74 3b 20 6f 74 68  nd unset it; oth
1aa20 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72  erwise, make sur
1aa30 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
1aa40 20 74 68 65 20 6c 69 76 65 20 65 6e 76 69 72 6f   the live enviro
1aa50 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 64  nment variable d
1aa60 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 65 69  oes not exist ei
1aa70 74 68 65 72 20 28 69 2e 65 2e 20 69 74 0d 0a 20  ther (i.e. it..
1aa80 20 20 20 20 20 23 20 20 20 20 20 20 20 77 61 73       #       was
1aa90 20 6e 6f 74 20 73 65 74 20 74 6f 20 62 65 67 69   not set to begi
1aaa0 6e 20 77 69 74 68 29 2e 20 20 42 6f 74 68 20 73  n with).  Both s
1aab0 61 76 65 64 20 61 6e 64 20 6c 69 76 65 20 65 6e  aved and live en
1aac0 76 69 72 6f 6e 6d 65 6e 74 0d 0a 20 20 20 20 20  vironment..
1aad0 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c   #       variabl
1aae0 65 73 20 41 52 45 20 63 68 61 6e 67 65 64 20 62  es ARE changed b
1aaf0 79 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  y this procedure
1ab00 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1ab10 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
1ab20 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3d  ngth $varName] = 1ab30 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1ab40 20 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 set varName 1ab50 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 savedEnv.. 1ab60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 75 70 76 61 }.... upva 1ab70 72 20 31 20 24 76 61 72 4e 61 6d 65 20 73 61 76 r 1$varName sav
1ab80 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 66  edEnv....      f
1ab90 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d  oreach name $nam 1aba0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 es {.. if 1abb0 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 73 {[info exists s 1abc0 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 5d 7d avedEnv($name)]}
1abd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1abe0 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 24 6e 61     set ::env($na 1abf0 6d 65 29 20 24 73 61 76 65 64 45 6e 76 28 24 6e me)$savedEnv($n 1ac00 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ame).. 1ac10 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 1ac20 6e 20 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 n savedEnv($name
1ac30 29 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  )..        } els
1ac40 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75  e {..          u
1ac50 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
1ac60 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 0d 0a 20   ::env($name).. 1ac70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1ac80 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 1ac90 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 1aca0 20 69 73 20 73 65 6c 66 2d 63 6c 65 61 6e 69 6e is self-cleanin 1acb0 67 2e 20 20 49 66 20 6e 6f 20 73 61 76 65 64 20 g. If no saved 1acc0 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 environment vari 1acd0 61 62 6c 65 73 20 6e 6f 77 0d 0a 20 20 20 20 20 ables now.. 1ace0 20 23 20 20 20 20 20 20 20 65 78 69 73 74 2c 20 # exist, 1acf0 72 65 6d 6f 76 65 20 74 68 65 20 61 72 72 61 79 remove the array 1ad00 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1ad10 20 20 69 66 20 7b 5b 61 72 72 61 79 20 73 69 7a if {[array siz 1ad20 65 20 73 61 76 65 64 45 6e 76 5d 20 3d 3d 20 30 e savedEnv] == 0 1ad30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1ad40 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c unset -nocompl 1ad50 61 69 6e 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 ain savedEnv.. 1ad60 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 1ad70 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 45 61 . proc saveEa 1ad80 67 6c 65 53 68 65 6c 6c 45 6e 76 69 72 6f 6e 6d gleShellEnvironm 1ad90 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ent {} {.. 1ada0 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 upvar 1 savedEnv 1adb0 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 savedEnv.... 1adc0 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 saveEnvironme 1add0 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 ntVariables [lis 1ade0 74 20 4e 6f 4d 75 74 65 78 65 73 5d 20 73 61 76 t NoMutexes] sav 1adf0 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d edEnv.. }.... 1ae00 0a 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 . proc restor 1ae10 65 45 61 67 6c 65 53 68 65 6c 6c 45 6e 76 69 72 eEagleShellEnvir 1ae20 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 onment {} {.. 1ae30 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 upvar 1 saved 1ae40 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a Env savedEnv.... 1ae50 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 restoreEnv 1ae60 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 ironmentVariable 1ae70 73 20 5b 6c 69 73 74 20 4e 6f 4d 75 74 65 78 65 s [list NoMutexe 1ae80 73 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 s] savedEnv.. 1ae90 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1aea0 73 61 76 65 4d 64 61 43 6f 6e 66 69 67 45 6e 76 saveMdaConfigEnv 1aeb0 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 ironment {} {.. 1aec0 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 upvar 1 sav 1aed0 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a edEnv savedEnv.. 1aee0 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 .. saveEnvi 1aef0 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 ronmentVariables 1af00 20 5b 6c 69 73 74 20 43 4f 4d 50 4c 55 53 5f 4d [list COMPLUS_M 1af10 44 41 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 DA] savedEnv.. 1af20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 1af30 20 72 65 73 74 6f 72 65 4d 64 61 43 6f 6e 66 69 restoreMdaConfi 1af40 67 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 gEnvironment {} 1af50 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 {.. upvar 1 1af60 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 savedEnv savedE 1af70 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73 74 nv.... rest 1af80 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 oreEnvironmentVa 1af90 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 43 4f riables [list CO 1afa0 4d 50 4c 55 53 5f 4d 44 41 5d 20 73 61 76 65 64 MPLUS_MDA] saved 1afb0 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 Env.. }..... 1afc0 20 20 20 70 72 6f 63 20 73 61 76 65 47 65 74 53 proc saveGetS 1afd0 65 74 74 69 6e 67 56 61 6c 75 65 45 6e 76 69 72 ettingValueEnvir 1afe0 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 onment {} {.. 1aff0 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 upvar 1 saved 1b000 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a Env savedEnv.... 1b010 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f saveEnviro 1b020 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b nmentVariables [ 1b030 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 list \.. 1b040 20 20 4e 6f 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 No_Expand No_S 1b050 51 4c 69 74 65 47 65 74 53 65 74 74 69 6e 67 56 QLiteGetSettingV 1b060 61 6c 75 65 20 4e 6f 5f 53 51 4c 69 74 65 58 6d alue No_SQLiteXm 1b070 6c 43 6f 6e 66 69 67 46 69 6c 65 5d 20 5c 0d 0a lConfigFile] \.. 1b080 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 45 savedE 1b090 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 nv.. }..... 1b0a0 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 47 65 proc restoreGe 1b0b0 74 53 65 74 74 69 6e 67 56 61 6c 75 65 45 6e 76 tSettingValueEnv 1b0c0 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 ironment {} {.. 1b0d0 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 upvar 1 sav 1b0e0 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a edEnv savedEnv.. 1b0f0 0d 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 .. restoreE 1b100 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 nvironmentVariab 1b110 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 les [list \.. 1b120 20 20 20 20 20 20 20 4e 6f 5f 45 78 70 61 6e 64 No_Expand 1b130 20 4e 6f 5f 53 51 4c 69 74 65 47 65 74 53 65 74 No_SQLiteGetSet 1b140 74 69 6e 67 56 61 6c 75 65 20 4e 6f 5f 53 51 4c tingValue No_SQL 1b150 69 74 65 58 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 iteXmlConfigFile 1b160 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 ] \.. s 1b170 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a avedEnv.. }.. 1b180 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 ... proc save 1b190 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 1b1a0 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b Environment {} { 1b1b0 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 1b1c0 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e savedEnv savedEn 1b1d0 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 45 v.... saveE 1b1e0 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 nvironmentVariab 1b1f0 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 les [list \.. 1b200 20 20 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c DefaultFl 1b210 61 67 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ags_SQLiteConnec 1b220 74 69 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f tion No_SQLiteCo 1b230 6e 6e 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 nnectionNewParse 1b240 72 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 r] \.. 1b250 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d savedEnv.. }. 1b260 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 73 .... proc res 1b270 74 6f 72 65 53 51 4c 69 74 65 43 6f 6e 6e 65 63 toreSQLiteConnec 1b280 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 tionEnvironment 1b290 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 {} {.. upva 1b2a0 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 r 1 savedEnv sav 1b2b0 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 edEnv.... r 1b2c0 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e estoreEnvironmen 1b2d0 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 tVariables [list 1b2e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65 \.. De 1b2f0 66 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74 faultFlags_SQLit 1b300 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53 eConnection No_S 1b310 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e QLiteConnectionN 1b320 65 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20 20 ewParser] \.. 1b330 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d savedEnv. 1b340 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 1b350 72 6f 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f roc saveSQLiteCo 1b360 6e 76 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 nvertEnvironment 1b370 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 {} {.. upv 1b380 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 ar 1 savedEnv sa 1b390 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 vedEnv.... 1b3a0 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 saveEnvironmentV 1b3b0 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c ariables [list \ 1b3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 55 73 65 5f .. Use_ 1b3d0 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 SQLiteConvert_De 1b3e0 66 61 75 6c 74 44 62 54 79 70 65 20 55 73 65 5f faultDbType Use_ 1b3f0 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 SQLiteConvert_De 1b400 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 5d 20 5c faultTypeName] \ 1b410 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65 .. save 1b420 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a dEnv.. }..... 1b430 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 proc restore 1b440 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e 76 SQLiteConvertEnv 1b450 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 ironment {} {.. 1b460 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 upvar 1 sav 1b470 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a edEnv savedEnv.. 1b480 0d 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 .. restoreE 1b490 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 nvironmentVariab 1b4a0 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 les [list \.. 1b4b0 20 20 20 20 20 20 20 55 73 65 5f 53 51 4c 69 74 Use_SQLit 1b4c0 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 eConvert_Default 1b4d0 44 62 54 79 70 65 20 55 73 65 5f 53 51 4c 69 74 DbType Use_SQLit 1b4e0 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 eConvert_Default 1b4f0 54 79 70 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 TypeName] \.. 1b500 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d savedEnv. 1b510 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 1b520 72 6f 63 20 73 65 74 75 70 44 62 49 6e 74 65 72 roc setupDbInter 1b530 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 7b 20 63 ruptCallback { c 1b540 68 61 6e 6e 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a hannel log } {.. 1b550 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1b560 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 73 65 74 74 69  nnel "---- setti
1b570 6e 67 20 75 70 20 64 65 62 75 67 67 65 72 20 69  ng up debugger i
1b580 6e 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63  nterrupt callbac
1b590 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  k... "....
1b5a0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1b5b0 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f        saveEnviro
1b5c0 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b  nmentVariables [
1b5d0 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
1b5e0 20 20 20 20 71 75 69 65 74 46 69 6e 64 49 6e 74      quietFindInt
1b5f0 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68  erpreterTestPath
1b600 20 71 75 69 65 74 53 65 74 75 70 49 6e 74 65 72   quietSetupInter
1b610 70 72 65 74 65 72 54 65 73 74 50 61 74 68 5d 0d  preterTestPath].
1b620 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b  ...        try {
1b630 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1b640 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1b650 20 50 72 65 76 65 6e 74 20 74 68 65 20 76 65 6e   Prevent the ven
1b660 64 6f 72 20 73 63 72 69 70 74 20 66 72 6f 6d 20  dor script from
1b670 62 65 69 6e 67 20 6e 6f 69 73 79 20 77 68 65 6e  being noisy when
1b680 20 63 72 65 61 74 69 6e 67 0d 0a 20 20 20 20 20   creating..
1b690 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
1b6a0 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70   isolated interp
1b6b0 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  reter...
1b6c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
1b6d0 65 74 20 3a 3a 65 6e 76 28 71 75 69 65 74 46 69  et ::env(quietFi
1b6e0 6e 64 49 6e 74 65 72 70 72 65 74 65 72 54 65 73  ndInterpreterTes
1b6f0 74 50 61 74 68 29 20 31 0d 0a 20 20 20 20 20 20  tPath) 1..
1b700 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 71 75      set ::env(qu
1b710 69 65 74 53 65 74 75 70 49 6e 74 65 72 70 72 65  ietSetupInterpre
1b720 74 65 72 54 65 73 74 50 61 74 68 29 20 31 0d 0a  terTestPath) 1..
1b730 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1b740 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1b750 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 73   Make sure the s
1b760 63 72 69 70 74 20 64 65 62 75 67 67 65 72 20 61  cript debugger a
1b770 6e 64 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20  nd the isolated
1b780 69 6e 74 65 72 70 72 65 74 65 72 0d 0a 20 20 20  interpreter..
1b790 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
1b7a0 72 65 20 73 65 74 75 70 20 61 6e 64 20 72 65 61  re setup and rea
1b7b0 64 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20  dy for use...
1b7c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1b7d0 20 20 20 20 64 65 62 75 67 20 73 65 74 75 70 20      debug setup
1b7e0 74 72 75 65 20 74 72 75 65 0d 0a 0d 0a 20 20 20  true true....
1b7f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1b800 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64      # NOTE: Load
1b810 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70   the necessary p
1b820 61 63 6b 61 67 65 73 20 69 6e 74 6f 20 74 68 65  ackages into the
1b830 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70   isolated interp
1b840 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  reter...
1b850 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64    #..          d
1b860 65 62 75 67 20 65 76 61 6c 20 7b 0d 0a 20 20 20  ebug eval {..
1b870 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
1b880 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 0d 0a   require Eagle..
1b890 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
1b8a0 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c  age require Eagl
1b8b0 65 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 20 20  e.Library..
1b8c0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72         package r
1b8d0 65 71 75 69 72 65 20 45 61 67 6c 65 2e 54 65 73  equire Eagle.Tes
1b8e0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  t..          }..
1b8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1b900 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1b910 20 43 6f 70 79 20 74 68 65 20 6e 65 63 65 73 73   Copy the necess
1b920 61 72 79 20 76 61 72 69 61 62 6c 65 73 20 69 6e  ary variables in
1b930 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20  to the isolated
1b940 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20  interpreter...
1b950 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1b960 20 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b       debug invok
1b970 65 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 63  e 0 set ::test_c
1b980 68 61 6e 6e 65 6c 20 24 63 68 61 6e 6e 65 6c 3b  hannel $channel; 1b990 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 70 # NOTE: For [tp 1b9a0 75 74 73 5d 2e 0d 0a 20 20 20 20 20 20 20 20 20 uts]... 1b9b0 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 debug invoke 0 1b9c0 73 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 set ::test_log$
1b9d0 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72  log; # NOTE: For
1b9e0 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20   [tlog].....
1b9f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1ba00 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61     # NOTE: Insta
1ba10 6c 6c 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20  ll the callback
1ba20 73 63 72 69 70 74 20 74 6f 20 62 65 20 65 76 61  script to be eva
1ba30 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20 69 73  luated in the is
1ba40 6f 6c 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  olated..
1ba50 20 20 23 20 20 20 20 20 20 20 69 6e 74 65 72 70    #       interp
1ba60 72 65 74 65 72 20 77 68 65 6e 20 74 68 69 73 20  reter when this
1ba70 69 6e 74 65 72 70 72 65 74 65 72 20 69 73 20 69  interpreter is i
1ba80 6e 74 65 72 72 75 70 74 65 64 20 62 79 20 73 63  nterrupted by sc
1ba90 72 69 70 74 0d 0a 20 20 20 20 20 20 20 20 20 20  ript..
1baa0 23 20 20 20 20 20 20 20 63 61 6e 63 65 6c 6c 61  #       cancella
1bab0 74 69 6f 6e 2c 20 65 74 63 2e 0d 0a 20 20 20 20  tion, etc...
1bac0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1bad0 20 20 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63     debug callbac
1bae0 6b 20 61 70 70 6c 79 20 7b 7b 73 65 6e 64 65 72  k apply {{sender
1baf0 20 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20   e} {..
1bb00 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1bb10 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
1bb20 69 66 20 74 68 69 73 20 64 65 62 75 67 67 65 72  if this debugger
1bb30 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 6f 6e 65   callback is one
1bb40 20 74 68 61 74 20 77 65 20 63 61 72 65 20 61 62   that we care ab
1bb50 6f 75 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  out...
1bb60 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1bb70 20 73 65 74 20 69 6e 74 65 72 72 75 70 74 54 79   set interruptTy
1bb80 70 65 73 20 5b 73 70 6c 69 74 20 5b 24 65 20 49  pes [split [$e I 1bb90 6e 74 65 72 72 75 70 74 54 79 70 65 5d 20 22 2c nterruptType] ", 1bba0 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 "].... 1bbb0 20 20 20 69 66 20 7b 22 43 61 6e 63 65 6c 65 64 if {"Canceled 1bbc0 22 20 69 6e 20 24 69 6e 74 65 72 72 75 70 74 54 " in$interruptT
1bbd0 79 70 65 73 20 7c 7c 20 5c 0d 0a 20 20 20 20 20  ypes || \..
1bbe0 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 77 6f             "Unwo
1bbf0 75 6e 64 22 20 69 6e 20 24 69 6e 74 65 72 72 75  und" in $interru 1bc00 70 74 54 79 70 65 73 7d 20 74 68 65 6e 20 7b 0d ptTypes} then {. 1bc10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1bc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1bc30 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 # NOTE: Make sur 1bc40 65 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 e the [object] c 1bc50 6f 6d 6d 61 6e 64 20 69 73 20 61 76 61 69 6c 61 ommand is availa 1bc60 62 6c 65 2e 20 20 53 69 6e 63 65 0d 0a 20 20 20 ble. Since.. 1bc70 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 1bc80 20 20 20 74 68 69 73 20 69 73 20 61 6e 20 69 73 this is an is 1bc90 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 olated interpret 1bca0 65 72 2c 20 63 68 65 63 6b 20 66 6f 72 20 69 74 er, check for it 1bcb0 20 74 68 65 20 68 61 72 64 0d 0a 20 20 20 20 20 the hard.. 1bcc0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1bcd0 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 way... 1bce0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1bcf0 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 if {[lleng 1bd00 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 th [info command 1bd10 73 20 6f 62 6a 65 63 74 5d 5d 20 3e 20 30 7d 20 s object]] > 0} 1bd20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1bd30 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1bd40 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1bd50 45 3a 20 49 74 65 72 61 74 65 20 74 68 72 6f 75 E: Iterate throu 1bd60 67 68 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 gh all database 1bd70 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 connections know 1bd80 6e 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 n to the.. 1bd90 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1bda0 20 20 70 61 72 65 6e 74 20 69 6e 74 65 72 70 72 parent interpr 1bdb0 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 eter... 1bdc0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1bdd0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 1bde0 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 foreach -alias 1bdf0 70 61 69 72 20 5b 6f 62 6a 65 63 74 20 69 6e 76 pair [object inv 1be00 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 1be10 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 1be20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 65 20$e
1be30 49 6e 74 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e  Interpreter.conn
1be40 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20  ections] {..
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
1be60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1be70 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
1be80 70 74 20 74 6f 20 63 61 6e 63 65 6c 20 61 6e 79  pt to cancel any
1be90 20 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20   SQL queries in
1bea0 70 72 6f 67 72 65 73 73 20 6f 6e 0d 0a 20 20 20  progress on..
1beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
1bec0 20 20 20 20 20 20 20 74 68 69 73 20 64 61 74 61         this data
1bed0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
1bee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1bef0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1bf00 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
1bf10 74 63 68 20 7b 24 70 61 69 72 20 56 61 6c 75 65  tch {$pair Value 1bf20 2e 43 61 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 7d .Cancel} error]} 1bf30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1bf40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 1bf50 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1bf60 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
1bf70 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
1bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
1bf90 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
1bfa0 65 64 20 74 6f 20 63 61 6e 63 65 6c 20 71 75 65  ed to cancel que
1bfb0 72 79 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20  ry for " \..
1bfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bfd0 20 20 20 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20      "connection
1bfe0 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20  \"" [$pair Key] 1bff0 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "\", error: " \n 1c000 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 \t \.. 1c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 65$e
1c020 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
1c030 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1c040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c060 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
1c070 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1c080 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1c090 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c [appendArgs \n \ 1c0a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c0b0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 1c0c0 49 4e 47 3a 20 63 61 6e 6e 6f 74 20 63 61 6e 63 ING: cannot canc 1c0d0 65 6c 20 61 6e 79 20 71 75 65 72 69 65 73 3a 20 el any queries: 1c0e0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1c0f0 20 20 20 20 20 20 20 20 20 22 74 68 65 20 5c 22 "the \" 1c100 6f 62 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 object\" command 1c110 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c is not availabl 1c120 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 e\n"].. 1c130 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1c140 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1c150 20 7d 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 66 }}.. } f 1c160 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 inally {.. 1c170 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 restoreEnvir 1c180 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 onmentVariables 1c190 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 [list \.. 1c1a0 20 20 20 20 20 20 20 71 75 69 65 74 46 69 6e 64 quietFind 1c1b0 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50 InterpreterTestP 1c1c0 61 74 68 20 71 75 69 65 74 53 65 74 75 70 49 6e ath quietSetupIn 1c1d0 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74 terpreterTestPat 1c1e0 68 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 h].. }.. 1c1f0 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d } error] == 1c200 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1c210 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 1c220 74 20 69 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 t interruptCallb 1c230 61 63 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 ack.sqlite3.... 1c240 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1c250 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20  annel yes\n..
1c260 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1c270 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1c280 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1c290 22 6e 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "no, error: " \n 1c2a0 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
1c2b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
1c2c0 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e  ..    proc clean
1c2d0 75 70 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d  upFile { fileNam
1c2e0 65 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d  e {collect true}
1c2f0 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d   {force false} }
1c300 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
1c310 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
1c320 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20  pt to force all
1c330 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65  pending "garbage
1c340 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20  " objects to be
1c350 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20  collected,..
1c360 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64    #       includ
1c370 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65  ing SQLite state
1c380 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70  ments and backup
1c390 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73   objects; this s
1c3a0 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20  hould allow..
1c3b0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75     #       the u
1c3c0 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61  nderlying databa
1c3d0 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65  se file to be de
1c3e0 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  leted...      #.
1c3f0 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c  .      if {$coll 1c400 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ect} then {.. 1c410 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 collectGarb 1c420 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e age$::test_chan
1c430 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  nel..      }....
1c440 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
1c450 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
1c460 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65  the file still e
1c470 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d  xists...      #.
1c480 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65  .      if {[file
1c490 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam 1c4a0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 1c4b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1c4c0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 NOTE: Skip dele 1c4d0 74 69 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20 ting test files 1c4e0 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 if somebody sets 1c4f0 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 the global vari 1c500 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 able.. # 1c510 20 20 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74 to prevent 1c520 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 1c530 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f . if {$fo
1c540 72 63 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78  rce || ![info ex
1c550 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75  ists ::no(cleanu
1c560 70 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  pFile)]} then {.
1c570 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1c580 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1c590 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74  Attempt to delet
1c5a0 65 20 74 68 65 20 74 65 73 74 20 66 69 6c 65 20  e the test file
1c5b0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  now...
1c5c0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  #..          if
1c5d0 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63  {[set code [catc
1c5e0 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $1c5f0 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d fileName} error] 1c600 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1c610 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1c620 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We 1c630 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 somehow failed 1c640 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 to delete the fi 1c650 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d le, report why.. 1c660 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 1c670 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1c680 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1c690 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1c6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1c6b0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
1c6c0 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65  failed to delete
1c6d0 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24   test file \"" $1c6e0 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 fileName \.. 1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 "\" 1c700 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 during cleanup, 1c710 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 error: " \n\t$e
1c720 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
1c730 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1c740 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1c750 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1c760 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61  # NOTE: Show tha
1c770 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c  t we skipped del
1c780 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d  eting the file..
1c790 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1c7a0 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65          set code
1c7b0 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   0....
1c7c0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1c7d0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1c7e0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1c7f0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 1c800 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 : skipped deleti 1c810 6e 67 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 ng test file \"" 1c820 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
1c830 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
1c840 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e  during cleanup\n
1c850 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  "]..        }..
1c860 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1c870 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1c880 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69    # NOTE: The fi
1c890 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  le does not exis
1c8a0 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20  t, success!..
1c8b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1c8c0 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20  set code 0..
1c8d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
1c8e0 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d  urn $code.. } 1c8f0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c ..... proc cl 1c900 65 61 6e 75 70 4d 65 6d 6f 72 79 20 7b 20 76 61 eanupMemory { va 1c910 72 4e 61 6d 65 20 7b 71 75 69 65 74 20 66 61 6c rName {quiet fal 1c920 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 se} } {.. i 1c930 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 f {[haveSQLiteOb 1c940 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 jectCommand] && 1c950 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 1c960 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 ring length$var
1c970 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
1c980 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1c990 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
1c9a0 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69  fer to the speci
1c9b0 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65  fied variable (e
1c9c0 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22  .g. "connection"
1c9d0 29 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  ) in the..
1c9e0 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78    #       contex
1c9f0 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e  t of our caller.
1ca00 20 20 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a    The opaque obj
1ca10 65 63 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61  ect handle for a
1ca20 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
1ca30 20 20 20 41 44 4f 2e 4e 45 54 20 63 6f 6e 6e 65     ADO.NET conne
1ca40 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79  ction previously
1ca50 20 72 65 74 75 72 6e 65 64 20 62 79 20 5b 67 65   returned by [ge
1ca60 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a  tDbConnection]..
1ca70 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1ca80 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64  should be stored
1ca90 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 20   there...
1caa0 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61   #..        upva
1cab0 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e  r 1 $varName con 1cac0 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 nection.... 1cad0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 1cae0 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 1caf0 74 20 69 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 t invoke$connec
1cb00 74 69 6f 6e 20 52 65 6c 65 61 73 65 4d 65 6d 6f  tion ReleaseMemo
1cb10 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65  ry..        } re
1cb20 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  sult]} then {..
1cb30 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1cb40 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1cb50 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1cb60 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1cb70 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1cb90 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
1cba0 69 6c 65 64 20 74 6f 20 72 65 6c 65 61 73 65 20  iled to release
1cbb0 64 61 74 61 62 61 73 65 20 6d 65 6d 6f 72 79 2c  database memory,
1cbc0 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20   error: " \..
1cbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c               \n\
1cbe0 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  t $result \n].. 1cbf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1cc00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 1cc10 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 .. if {[lle 1cc20 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 ngth [info comma 1cc30 6e 64 73 20 64 65 62 75 67 5d 5d 20 3e 20 30 7d nds debug]] > 0} 1cc40 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1cc50 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1cc60 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c uplevel 1cc70 20 31 20 5b 6c 69 73 74 20 64 65 62 75 67 20 70 1 [list debug p 1cc80 75 72 67 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d urge].. } 1cc90 20 72 65 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b result]} then { 1cca0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1ccb0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1ccc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1ccd0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1cce0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1ccf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1cd00 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 1cd10 20 66 61 69 6c 65 64 20 74 6f 20 70 75 72 67 65 failed to purge 1cd20 20 63 61 6c 6c 20 66 72 61 6d 65 2c 20 65 72 72 call frame, err 1cd30 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 1cd40 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 \n\t$r
1cd50 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
1cd60 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1cd70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
1cd80 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
1cd90 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b       uplevel 1 [
1cda0 6c 69 73 74 20 64 65 62 75 67 20 63 6c 65 61 6e  list debug clean
1cdb0 75 70 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72  up]..        } r
1cdc0 65 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a  esult]} then {..
1cdd0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$1cde0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 1cdf0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1ce00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1ce10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ce30 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
1ce40 61 69 6c 65 64 20 74 6f 20 63 6c 65 61 6e 75 70  ailed to cleanup
1ce50 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20 65 72   interpreter, er
1ce60 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ror: " \..
1ce70 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24            \n\t $1ce80 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 result \n].. 1ce90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1cea0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 1ceb0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1cec0 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 uplevel 1 1ced0 5b 6c 69 73 74 20 64 65 62 75 67 20 63 6f 6c 6c [list debug coll 1cee0 65 63 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 ect].. } 1cef0 72 65 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d result]} then {. 1cf00 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 1cf10 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1cf30 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1cf40 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1cf50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1cf60 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 1cf70 66 61 69 6c 65 64 20 74 6f 20 63 6f 6c 6c 65 63 failed to collec 1cf80 74 20 67 61 72 62 61 67 65 2c 20 65 72 72 6f 72 t garbage, error 1cf90 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 1cfa0 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 \n\t$res
1cfb0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
1cfc0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1cfd0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1cfe0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74  ....    proc set
1cff0 75 70 4d 65 6d 6f 72 79 43 6f 75 6e 74 65 72 73  upMemoryCounters
1d000 20 7b 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a   { varName } {..
1d010 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
1d020 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
1d030 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  nd]} then {..
1d040 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 1d050 72 4e 61 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d rName counter... 1d060 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 . set cou 1d070 6e 74 65 72 28 31 29 20 5b 6f 62 6a 65 63 74 20 nter(1) [object 1d080 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d create -alias \. 1d090 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 . Sys 1d0a0 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e tem.Diagnostics. 1d0b0 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 PerformanceCount 1d0c0 65 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 er Process \.. 1d0d0 20 20 20 20 20 20 20 20 20 20 22 57 6f 72 6b 69 "Worki 1d0e0 6e 67 20 53 65 74 22 20 5b 66 69 6c 65 20 72 6f ng Set" [file ro 1d0f0 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 otname [file tai 1d100 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d l$::bin_file]]]
1d110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
1d120 63 6f 75 6e 74 65 72 28 32 29 20 5b 6f 62 6a 65  counter(2) [obje
1d130 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73  ct create -alias
1d140 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1d150 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69  System.Diagnosti
1d160 63 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f  cs.PerformanceCo
1d170 75 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d  unter Process \.
1d180 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 57 6f  .            "Wo
1d190 72 6b 69 6e 67 20 53 65 74 20 50 65 61 6b 22 20  rking Set Peak"
1d1a0 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b  [file rootname [
1d1b0 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e  file tail $::bin 1d1c0 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 _file]]].... 1d1d0 20 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 set counter( 1d1e0 33 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 3) [object creat 1d1f0 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 e -alias \.. 1d200 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1d210 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f iagnostics.Perfo 1d220 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 rmanceCounter Pr 1d230 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 ocess \.. 1d240 20 20 20 20 20 22 50 72 69 76 61 74 65 20 42 79 "Private By 1d250 74 65 73 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e tes" [file rootn 1d260 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 ame [file tail$
1d270 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 20  ::bin_file]]]..
1d280 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1d290 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d  return ""..    }
1d2a0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65  .....    proc re
1d2b0 70 6f 72 74 4d 65 6d 6f 72 79 43 6f 75 6e 74 65  portMemoryCounte
1d2c0 72 73 20 7b 20 63 68 61 6e 6e 65 6c 20 76 61 72  rs { channel var
1d2d0 4e 61 6d 65 20 70 72 65 66 69 78 20 7d 20 7b 0d  Name prefix } {.
1d2e0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
1d2f0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
1d300 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  and]} then {..
1d310 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76        upvar 1 $v 1d320 61 72 4e 61 6d 65 20 63 6f 75 6e 74 65 72 0d 0a arName counter.. 1d330 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 1d340 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1d350 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1d360 20 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65      "---- " $pre 1d370 66 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 fix " counter \" 1d380 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1d390 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 1d3a0 24 63 6f 75 6e 74 65 72 28 31 29 20 43 6f 75 6e$counter(1) Coun
1d3b0 74 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c  terName] "\" val
1d3c0 75 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20  ue is " \..
1d3d0 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69         [object i
1d3e0 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 31  nvoke $counter(1 1d3f0 29 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d ) RawValue] \n]. 1d400 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs 1d410 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1d420 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1d430 20 20 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72       "---- " $pr 1d440 65 66 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c efix " counter \ 1d450 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 1d460 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 [object invoke 1d470 20 24 63 6f 75 6e 74 65 72 28 32 29 20 43 6f 75$counter(2) Cou
1d480 6e 74 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61  nterName] "\" va
1d490 6c 75 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20  lue is " \..
1d4a0 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20          [object
1d4b0 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28  invoke $counter( 1d4c0 32 29 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 2) RawValue] \n] 1d4d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 .... tput 1d4e0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1d4f0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1d500 20 20 20 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70        "---- " $p 1d510 72 65 66 69 78 20 22 20 63 6f 75 6e 74 65 72 20 refix " counter 1d520 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 1d530 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b [object invok 1d540 65 20 24 63 6f 75 6e 74 65 72 28 33 29 20 43 6f e$counter(3) Co
1d550 75 6e 74 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76  unterName] "\" v
1d560 61 6c 75 65 20 69 73 20 22 20 5c 0d 0a 20 20 20  alue is " \..
1d570 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74           [object
1d580 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72   invoke $counter 1d590 28 33 29 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e (3) RawValue] \n 1d5a0 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 1d5b0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 1d5c0 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 7b 20 ollectGarbage { 1d5d0 63 68 61 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 channel {millise 1d5e0 63 6f 6e 64 73 20 31 30 30 30 7d 20 7b 71 75 69 conds 1000} {qui 1d5f0 65 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 et true} } {.. 1d600 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c if {[haveSQL 1d610 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand 1d620 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1d630 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 1d640 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 1d650 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 t invoke GC GetT 1d660 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 otalMemory false 1d670 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 .. } resu 1d680 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b lt] == 0} then { 1d690 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1d6a0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
1d6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1d6c0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1d6d0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1d6e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1d6f0 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 memory in use b 1d700 79 20 74 68 65 20 43 4c 52 20 62 65 66 6f 72 65 y the CLR before 1d710 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 collection... " 1d720 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d730 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79$result " by
1d740 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  tes\n"]..
1d750 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
1d760 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1d770 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1d780 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1d790 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1d7a0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1d7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1d7c0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
1d7d0 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c  failed to get CL
1d7e0 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20  R memory usage,
1d7f0 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20  error: " \..
1d800 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74              \n\t
1d810 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 1d820 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1d830 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1d840 0a 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 . ######### 1d850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1d860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1d870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1d880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1d890 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 1d8a0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 65 61 # NOTE: Repea 1d8b0 74 65 64 6c 79 20 61 74 74 65 6d 70 74 20 74 6f tedly attempt to 1d8c0 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 collect garbage 1d8d0 20 75 6e 74 69 6c 20 74 68 65 20 61 6c 6c 6f 74 until the allot 1d8e0 74 65 64 20 6e 75 6d 62 65 72 0d 0a 20 20 20 20 ted number.. 1d8f0 20 20 23 20 20 20 20 20 20 20 6f 66 20 6d 69 6c # of mil 1d900 6c 69 73 65 63 6f 6e 64 73 20 68 61 73 20 65 6c liseconds has el 1d910 61 70 73 65 64 2e 20 20 41 6c 77 61 79 73 20 61 apsed. Always a 1d920 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 ttempt to collec 1d930 74 20 67 61 72 62 61 67 65 0d 0a 20 20 20 20 20 t garbage.. 1d940 20 23 20 20 20 20 20 20 20 61 74 20 6c 65 61 73 # at leas 1d950 74 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20 20 23 t once... # 1d960 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 1d970 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 1d980 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mand]} then {.. 1d990 20 20 20 20 20 20 20 73 65 74 20 73 74 61 72 74 set start 1d9a0 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d [clock seconds] 1d9b0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 74 .. set st 1d9c0 6f 70 20 5b 65 78 70 72 20 7b 24 73 74 61 72 74 op [expr {$start
1d9d0 20 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f 6e 64   + ($millisecond 1d9e0 73 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20 s / 1000)}].... 1d9f0 20 20 20 20 20 20 20 64 6f 20 7b 0d 0a 20 20 20 do {.. 1da00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1da10 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 1da20 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 20 66 mpt to force a f 1da30 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c ull garbage coll 1da40 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 ection now. Rep 1da50 6f 72 74 20 61 6e 79 0d 0a 20 20 20 20 20 20 20 ort any.. 1da60 20 20 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 # error 1da70 20 74 68 61 74 20 69 73 20 65 6e 63 6f 75 6e 74 that is encount 1da80 65 72 65 64 20 69 66 20 77 65 20 66 61 69 6c 2e ered if we fail. 1da90 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 1daa0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 1dab0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 1dac0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 1dad0 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f GC GetTotalMemo 1dae0 72 79 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 ry true.. 1daf0 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 } error]} the 1db00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1db10 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1db20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1db30 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1db40 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1db50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1db60 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 1db70 47 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 67 G: failed full g 1db80 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f arbage collectio 1db90 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 n, error: " \.. 1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1dbb0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
1dbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1dbd0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
1dbe0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f            set no
1dbf0 77 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73  w [clock seconds
1dc00 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69  ]..        } whi
1dc10 6c 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e  le {$start <=$n
1dc20 6f 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74  ow && $now <$st
1dc30 6f 70 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  op}..      }....
1dc40 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23        ##########
1dc50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dc60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dc70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1dc80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
1dc90 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  ...      if {[ha
1dca0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
1dcb0 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  mmand]} then {..
1dcc0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1dcd0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1dce0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43  object invoke GC
1dcf0 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20   GetTotalMemory
1dd00 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d  false..        }
1dd10 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
1dd20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1dd30 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1dd40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1dd50 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1dd60 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dd80 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20  "---- memory in
1dd90 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 61  use by the CLR a
1dda0 66 74 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e  fter collection.
1ddb0 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
1ddc0 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20          $result 1ddd0 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 " bytes\n"].. 1dde0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1ddf0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1de00 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
1de10 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
1de20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1de30 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1de40 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1de50 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 1de60 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 NG: failed to ge 1de70 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 t CLR memory usa 1de80 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a ge, error: " \.. 1de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1dea0 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d \n\t$result \n]
1deb0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1dec0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1ded0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
1dee0 20 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 48   proc getSQLiteH
1def0 61 6e 64 6c 65 43 6f 75 6e 74 73 20 7b 20 63 68  andleCounts { ch
1df00 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c  annel {quiet fal
1df10 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  se} } {..      s
1df20 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d  et result [list]
1df30 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68  ....      if {[h
1df40 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  aveSQLiteObjectC
1df50 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20  ommand] && \..
1df60 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c          [haveSQL
1df70 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  iteDefineConstan
1df80 74 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d  t COUNT_HANDLE]}
1df90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1dfa0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1dfb0 54 45 3a 20 41 64 64 20 65 61 63 68 20 63 72 69  TE: Add each cri
1dfc0 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75  tical handle cou
1dfd0 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  nt to the result
1dfe0 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20  ing list...
1dff0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f     #..        fo
1e000 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69 73 74  reach name [list
1e010 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1e020 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75 6e 74 20  connectionCount
1e030 73 74 61 74 65 6d 65 6e 74 43 6f 75 6e 74 20 62  statementCount b
1e040 61 63 6b 75 70 43 6f 75 6e 74 20 62 6c 6f 62 43  ackupCount blobC
1e050 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ount] {..
1e060 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
1e070 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
1e080 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
1e090 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e0b0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1e0c0 74 65 2e 44 65 62 75 67 44 61 74 61 20 24 6e 61  te.DebugData $na 1e0d0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 me.. } 1e0e0 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 value] == 0} the 1e0f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1e100 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1e110 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1e120 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1e130 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1e140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e150 20 20 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 "---- critic 1e160 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 al handle count 1e170 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 69 73 \""$name "\" is
1e180 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20   " $value \n].. 1e190 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 lapp 1e1b0 65 6e 64 20 72 65 73 75 6c 74 20 24 76 61 6c 75 end result$valu
1e1c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  e..          } e
1e1d0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1e1e0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1e1f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1e200 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1e210 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1e220 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1e230 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1e240 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67  ING: failed to g
1e250 65 74 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64  et critical hand
1e260 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20 5c 0d 0a  le count \"" \..
1e270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e280 20 20 24 6e 61 6d 65 20 22 5c 22 2c 20 65 72 72    $name "\", err 1e290 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 76 61 6c 75 or: " \n\t$valu
1e2a0 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  e \n]..
1e2b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1e2c0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
1e2d0 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 24      } elseif {!$1e2e0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 1e2f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1e300 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 61 63 # NOTE: The ac 1e310 74 75 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e tual handle coun 1e320 74 73 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c ts are not avail 1e330 61 62 6c 65 3b 20 74 68 65 72 65 66 6f 72 65 2c able; therefore, 1e340 20 6a 75 73 74 0d 0a 20 20 20 20 20 20 20 20 23 just.. # 1e350 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 6e return an 1e360 20 65 6d 70 74 79 20 6c 69 73 74 2e 0d 0a 20 20 empty list... 1e370 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1e380 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1e390 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68  "---- critical h
1e3a0 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 75 6e 61  andle counts una
1e3b0 76 61 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20 20 20  vailable\n"..
1e3c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
1e3d0 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result.. 1e3e0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 1e3f0 20 73 68 75 74 64 6f 77 6e 53 51 4c 69 74 65 20 shutdownSQLite 1e400 7b 20 63 68 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 { channel {force 1e410 20 66 61 6c 73 65 7d 20 7b 71 75 69 65 74 20 66 false} {quiet f 1e420 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 1e430 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 1e440 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 : Make sure that 1e450 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 1e460 72 61 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65 rary is complete 1e470 6c 79 20 73 68 75 74 64 6f 77 6e 2e 20 20 54 68 ly shutdown. Th 1e480 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 is.. # 1e490 20 20 69 73 20 75 73 65 64 20 62 79 20 74 65 73 is used by tes 1e4a0 74 73 20 74 68 61 74 20 63 68 61 6e 67 65 20 63 ts that change c 1e4b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 onfiguration opt 1e4c0 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 74 68 6f 73 ions and/or thos 1e4d0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 1e4e0 20 74 68 61 74 20 6e 65 65 64 20 74 6f 20 6d 61 that need to ma 1e4f0 6b 65 20 73 75 72 65 20 6c 6f 67 67 69 6e 67 20 ke sure logging 1e500 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 28 is initialized ( 1e510 69 2e 65 2e 20 6a 75 73 74 20 69 6e 20 63 61 73 i.e. just in cas 1e520 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 1e530 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 the SQLite core 1e540 20 6c 69 62 72 61 72 79 20 77 61 73 20 69 6e 69 library was ini 1e550 74 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 tialized in the 1e560 70 72 6f 63 65 73 73 20 70 72 69 6f 72 20 74 6f process prior to 1e570 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1e580 74 68 65 20 53 51 4c 69 74 65 4c 6f 67 20 63 6c the SQLiteLog cl 1e590 61 73 73 20 62 65 69 6e 67 20 61 62 6c 65 20 74 ass being able t 1e5a0 6f 20 73 65 74 75 70 20 69 74 73 20 6c 6f 67 67 o setup its logg 1e5b0 69 6e 67 20 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a ing callback)... 1e5c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f # No 1e5d0 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 73 68 6f rmally, this sho 1e5e0 75 6c 64 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 uld only be perf 1e5f0 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 ormed if SQLite 1e600 69 73 20 6c 6f 61 64 65 64 20 61 6e 64 0d 0a 20 is loaded and.. 1e610 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 61 # rea 1e620 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 dy for use by th 1e630 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 e test suite... 1e640 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 1e650 20 7b 24 66 6f 72 63 65 20 7c 7c 20 5b 69 73 53 {$force || [isS
1e660 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65  QLiteReady]} the
1e670 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
1e680 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58          # BUGFIX
1e690 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74  : Make sure that
1e6a0 20 61 6e 79 20 22 6c 65 61 6b 65 64 22 20 74 72   any "leaked" tr
1e6b0 61 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 2f 6f  ansactions and/o
1e6c0 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20  r connections..
1e6d0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
1e6e0 20 61 72 65 20 63 6c 65 61 6e 65 64 20 75 70 20   are cleaned up
1e6f0 62 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74  before calling t
1e700 68 65 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f  he native shutdo
1e710 77 6e 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20  wn function...
1e720 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1e730 20 66 6f 72 65 61 63 68 20 74 72 61 6e 73 61 63   foreach transac
1e740 74 69 6f 6e 20 5b 69 6e 66 6f 20 74 72 61 6e 73  tion [info trans
1e750 61 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20  actions] {..
1e760 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
1e770 67 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20  g match \..
1e780 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 23           System#
1e790 44 61 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69  Data#SQLite#SQLi
1e7a0 74 65 54 72 61 6e 73 61 63 74 69 6f 6e 23 2a 20  teTransaction#*
1e7b0 24 74 72 61 6e 73 61 63 74 69 6f 6e 5d 7d 20 74  $transaction]} t 1e7c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1e7d0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 1e7e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 . s 1e7f0 71 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 ql transaction r 1e800 6f 6c 6c 62 61 63 6b 20 24 74 72 61 6e 73 61 63 ollback$transac
1e810 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..
1e820 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d    } error] == 0}
1e830 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1e840 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1e850 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1e860 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1e870 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1e880 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1e890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
1e8a0 2d 2d 2d 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20  --- rolled back
1e8b0 6c 65 61 6b 65 64 20 74 72 61 6e 73 61 63 74 69  leaked transacti
1e8c0 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  on \"" \..
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74                $t 1e8e0 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 5c 6e 5d ransaction \"\n] 1e8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e900 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 1e910 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1e920 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1e930 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1e940 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1e950 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1e960 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1e980 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 1e990 6c 65 64 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 led to rollback 1e9a0 6c 65 61 6b 65 64 20 74 72 61 6e 73 61 63 74 69 leaked transacti 1e9b0 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 on \"" \.. 1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74$t
1e9d0 72 61 6e 73 61 63 74 69 6f 6e 20 22 5c 22 2c 20  ransaction "\",
1e9e0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 1e9f0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 1ea00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1ea10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1ea20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1ea30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 .... fore 1ea40 61 63 68 20 64 62 20 5b 69 6e 66 6f 20 63 6f 6e ach db [info con 1ea50 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 nections] {.. 1ea60 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 1ea70 6e 67 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 ng match \.. 1ea80 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1ea90 23 44 61 74 61 23 53 51 4c 69 74 65 23 53 51 4c #Data#SQLite#SQL 1eaa0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 23 2a 20 iteConnection#* 1eab0 24 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20$db]} then {..
1eac0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
1ead0 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20  atch {sql close
1eae0 24 64 62 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30  $db} error] == 0 1eaf0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1eb00 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1eb10 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1eb30 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1eb40 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1eb60 2d 2d 2d 2d 20 63 6c 6f 73 65 64 20 6c 65 61 6b ---- closed leak 1eb70 65 64 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 ed database \"" 1eb80 24 64 62 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20$db \"\n]..
1eb90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1eba0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
1ebb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ebc0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1ebd0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1ebe0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1ebf0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1ec00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1ec10 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
1ec20 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
1ec30 63 6c 6f 73 65 20 6c 65 61 6b 65 64 20 64 61 74  close leaked dat
1ec40 61 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20  abase \"" \..
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ec60 20 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a   $db "\", error: 1ec70 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c " \n\t$error \
1ec80 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
1ec90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
1eca0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
1ecb0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1ecc0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1ecd0 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72   # BUGFIX: Befor
1ece0 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61  e calling the na
1ecf0 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75  tive shutdown fu
1ed00 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75 72  nction, make sur
1ed10 65 20 62 6f 74 68 0d 0a 20 20 20 20 20 20 20 20  e both..
1ed20 23 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65  #         of the
1ed30 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20   PRAGMA related
1ed40 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20  directory names
1ed50 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20  are freed...
1ed60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63      #..        c
1ed70 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72  heckForSQLiteDir
1ed80 65 63 74 6f 72 69 65 73 20 24 63 68 61 6e 6e 65  ectories $channe 1ed90 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 l true.... 1eda0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1edb0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 1edc0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 1edd0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 1ede0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 1edf0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e m.Data.SQLite.Un 1ee00 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 safeNativeMethod 1ee10 73 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f s sqlite3_shutdo 1ee20 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 wn.. } re 1ee30 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 1ee40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 1ee50 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1ee60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1ee70 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1ee80 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 1eea0 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f -- call sqlite3_ 1eeb0 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b shutdown()... ok 1eec0 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d : "$result \n].
1eed0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1eee0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1eef0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$1ef00 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 1ef10 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1ef20 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1ef30 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1ef40 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
1ef50 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74  all sqlite3_shut
1ef60 64 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a  down()... error:
1ef70 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20   " \n\t $result 1ef80 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 1ef90 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 1efa0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 1efb0 20 20 20 20 70 72 6f 63 20 67 65 74 53 65 74 74 proc getSett 1efc0 69 6e 67 52 65 61 64 43 6f 75 6e 74 20 7b 20 6e ingReadCount { n 1efd0 61 6d 65 20 7b 76 69 61 46 69 6c 65 20 66 61 6c ame {viaFile fal 1efe0 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 se} } {.. i 1eff0 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 f {[haveConstrai 1f000 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 nt buildConfigur 1f010 61 74 69 6f 6e 2e 44 65 62 75 67 5d 20 26 26 20 ation.Debug] && 1f020 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1f030 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 1f040 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 1f050 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 c -alias \.. 1f060 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1f070 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 ata.SQLite.Debug 1f080 44 61 74 61 20 47 65 74 53 65 74 74 69 6e 67 52 Data GetSettingR 1f090 65 61 64 43 6f 75 6e 74 73 20 24 76 69 61 46 69 eadCounts$viaFi
1f0a0 6c 65 0d 0a 20 20 20 20 20 20 7d 20 73 65 74 74  le..      } sett
1f0b0 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 5d 20 3d  ingReadCounts] =
1f0c0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
1f0d0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
1f0e0 20 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d 20 3e   length $name] > 1f0f0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1f100 20 20 20 20 20 20 69 66 20 7b 5b 24 73 65 74 74 if {[$sett
1f110 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 54 72  ingReadCounts Tr
1f120 79 47 65 74 56 61 6c 75 65 20 24 6e 61 6d 65 20  yGetValue $name 1f130 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a value]} then {.. 1f140 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1f150 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1f160 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1f170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1f180 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c   "---- setting \
1f190 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 77 61 73  "" $name "\" was 1f1a0 20 72 65 61 64 20 22 20 24 76 61 6c 75 65 20 22 read "$value "
1f1b0 20 74 69 6d 65 73 22 20 5c 0d 0a 20 20 20 20 20   times" \..
1f1c0 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72             [expr
1f1d0 20 7b 24 76 69 61 46 69 6c 65 20 3f 20 22 20 66   {$viaFile ? " f 1f1e0 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 rom the configur 1f1f0 61 74 69 6f 6e 20 66 69 6c 65 22 20 3a 20 22 22 ation file" : "" 1f200 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 }] \n].... 1f210 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 76 61 return$va
1f220 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  lue..          }
1f230 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
1f240 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
1f250 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 73 65  t nameCount [$se 1f260 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 ttingReadCounts 1f270 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 Count].. 1f280 20 20 73 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 set valueCount 1f290 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 0.... 1f2a0 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d object foreach - 1f2b0 61 6c 69 61 73 20 70 61 69 72 20 24 73 65 74 74 alias pair$sett
1f2c0 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d  ingReadCounts {.
1f2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63  .            inc
1f2e0 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70  r valueCount [$p 1f2f0 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 air Value].... 1f300 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1f310 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1f320 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1f340 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22  ---- setting \""
1f350 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22   [$pair Key] "\" 1f360 20 77 61 73 20 72 65 61 64 20 22 20 5b 24 70 61 was read " [$pa
1f370 69 72 20 56 61 6c 75 65 5d 20 5c 0d 0a 20 20 20  ir Value] \..
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 74               " t
1f390 69 6d 65 73 22 20 5b 65 78 70 72 20 7b 24 76 69  imes" [expr {$vi 1f3a0 61 46 69 6c 65 20 3f 20 22 20 66 72 6f 6d 20 74 aFile ? " from t 1f3b0 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e he configuration 1f3c0 20 66 69 6c 65 22 20 3a 20 5c 0d 0a 20 20 20 20 file" : \.. 1f3d0 20 20 20 20 20 20 20 20 20 20 20 20 22 22 7d 5d ""}] 1f3e0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 1f3f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 }.... r 1f400 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 6e 61 6d eturn [list$nam
1f410 65 43 6f 75 6e 74 20 24 76 61 6c 75 65 43 6f 75  eCount $valueCou 1f420 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a nt].. }.. 1f430 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1f440 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 1f450 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 gth$name] > 0}
1f460 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1f470 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1f480 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1f490 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1f4a0 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c "---- setting \ 1f4b0 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 77 61 73 ""$name "\" was
1f4c0 20 6e 6f 74 20 72 65 61 64 22 20 5b 65 78 70 72   not read" [expr
1f4d0 20 7b 24 76 69 61 46 69 6c 65 20 3f 20 5c 0d 0a   {$viaFile ? \.. 1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 22 20 66 72 " fr 1f4f0 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 om the configura 1f500 74 69 6f 6e 20 66 69 6c 65 22 20 3a 20 22 22 7d tion file" : ""} 1f510 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 ] \n].. } e 1f520 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t 1f530 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
1f540 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1f550 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f560 22 2d 2d 2d 2d 20 6e 6f 20 73 65 74 74 69 6e 67  "---- no setting
1f570 73 20 77 65 72 65 20 72 65 61 64 22 20 5b 65 78  s were read" [ex
1f580 70 72 20 7b 24 76 69 61 46 69 6c 65 20 3f 20 5c  pr {$viaFile ? \ 1f590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 20 .. " 1f5a0 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 from the configu 1f5b0 72 61 74 69 6f 6e 20 66 69 6c 65 22 20 3a 20 22 ration file" : " 1f5c0 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d "}] \n].. } 1f5d0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 1f5e0 20 2d 31 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 -1.. }..... 1f5f0 20 20 20 70 72 6f 63 20 67 65 74 4f 74 68 65 72 proc getOther 1f600 43 6f 75 6e 74 20 7b 20 6e 61 6d 65 20 7d 20 7b Count { name } { 1f610 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 1f620 65 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c eConstraint buil 1f630 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 dConfiguration.D 1f640 65 62 75 67 5d 20 26 26 20 5b 63 61 74 63 68 20 ebug] && [catch 1f650 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec 1f660 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 1f670 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 +NonPublic -alia 1f680 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1f690 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 1f6a0 69 74 65 2e 44 65 62 75 67 44 61 74 61 20 47 65 ite.DebugData Ge 1f6b0 74 4f 74 68 65 72 43 6f 75 6e 74 73 0d 0a 20 20 tOtherCounts.. 1f6c0 20 20 20 20 7d 20 6f 74 68 65 72 43 6f 75 6e 74 } otherCount 1f6d0 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. 1f6e0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st 1f6f0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d ring length$nam
1f700 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
1f710 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 24            if {[$1f720 6f 74 68 65 72 43 6f 75 6e 74 73 20 54 72 79 47 otherCounts TryG 1f730 65 74 56 61 6c 75 65 20 24 6e 61 6d 65 20 76 61 etValue$name va
1f740 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  lue]} then {..
1f750 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1f760 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1f770 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1f790 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74 ---- other count 1f7a0 65 72 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 er \""$name "\"
1f7b0 20 68 61 73 20 76 61 6c 75 65 20 22 20 24 76 61   has value " $va 1f7c0 6c 75 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 lue \n].... 1f7d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 76 return$v
1f7e0 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..
1f7f0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
1f800 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e {..          s
1f810 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 6f  et nameCount [$o 1f820 74 68 65 72 43 6f 75 6e 74 73 20 43 6f 75 6e 74 therCounts Count 1f830 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ].. set 1f840 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d valueCount 0... 1f850 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 1f860 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 t foreach -alias 1f870 20 70 61 69 72 20 24 6f 74 68 65 72 43 6f 75 6e pair$otherCoun
1f880 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ts {..
1f890 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e    incr valueCoun
1f8a0 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 0d  t [$pair Value]. 1f8b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 ... t 1f8c0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
1f8d0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1f8e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f8f0 20 20 20 20 22 2d 2d 2d 2d 20 6f 74 68 65 72 20      "---- other
1f900 63 6f 75 6e 74 65 72 20 5c 22 22 20 5b 24 70 61  counter \"" [$pa 1f910 69 72 20 4b 65 79 5d 20 22 5c 22 20 68 61 73 20 ir Key] "\" has 1f920 76 61 6c 75 65 20 22 20 5c 0d 0a 20 20 20 20 20 value " \.. 1f930 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 [$pai
1f940 72 20 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20  r Value] \n]..
1f950 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1f960 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
1f970 69 73 74 20 24 6e 61 6d 65 43 6f 75 6e 74 20 24  ist $nameCount$
1f980 76 61 6c 75 65 43 6f 75 6e 74 5d 0d 0a 20 20 20  valueCount]..
1f990 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
1f9a0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  ...      if {[st
1f9b0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d  ring length $nam 1f9c0 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 1f9d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1f9e0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1f9f0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1fa00 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6f           "---- o
1fa10 74 68 65 72 20 63 6f 75 6e 74 65 72 20 5c 22 22  ther counter \""
1fa20 20 24 6e 61 6d 65 20 22 5c 22 20 68 61 73 20 6e   $name "\" has n 1fa30 6f 20 76 61 6c 75 65 5c 6e 22 5d 0d 0a 20 20 20 o value\n"].. 1fa40 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1fa50 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1fa60 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  st_channel "----
1fa70 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74   there are no ot
1fa80 68 65 72 20 63 6f 75 6e 74 65 72 73 5c 6e 22 0d  her counters\n".
1fa90 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
1faa0 20 20 72 65 74 75 72 6e 20 2d 31 0d 0a 20 20 20    return -1..
1fab0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1fac0 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f  reportSQLiteReso
1fad0 75 72 63 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  urces {..
1fae0 20 20 20 20 20 63 68 61 6e 6e 65 6c 20 7b 71 75       channel {qu
1faf0 69 65 74 20 66 61 6c 73 65 7d 20 7b 72 65 73 65  iet false} {rese
1fb00 74 20 74 72 75 65 7d 20 7b 63 6f 6c 6c 65 63 74  t true} {collect
1fb10 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20   true} } {..
1fb20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
1fb30 45 3a 20 49 66 20 70 6f 73 73 69 62 6c 65 2c 20  E: If possible,
1fb40 61 6c 77 61 79 73 20 72 65 73 65 74 20 74 68 65  always reset the
1fb50 20 63 61 63 68 65 64 20 61 73 73 65 6d 62 6c 79   cached assembly
1fb60 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20   directory..
1fb70 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 74 68    #       and th
1fb80 65 20 63 61 63 68 65 64 20 58 4d 4c 20 63 6f 6e  e cached XML con
1fb90 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 20  figuration file
1fba0 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  name...      #..
1fbb0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
1fbc0 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
1fbd0 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  nd]} then {..
1fbe0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1fbf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
1fc00 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
1fc10 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
1fc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
1fc30 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1fc40 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  .UnsafeNativeMet
1fc50 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  hods \..
1fc60 20 20 20 20 20 20 52 65 73 65 74 43 61 63 68 65        ResetCache
1fc70 64 41 73 73 65 6d 62 6c 79 44 69 72 65 63 74 6f  dAssemblyDirecto
1fc80 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72  ry..        } er
1fc90 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ror] == 0} then
1fca0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
1fcb0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1fcc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1fcd0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d uts$channel "--
1fce0 2d 2d 20 72 65 73 65 74 20 63 61 63 68 65 64 20  -- reset cached
1fcf0 61 73 73 65 6d 62 6c 79 20 64 69 72 65 63 74 6f  assembly directo
1fd00 72 79 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 20  ry\n"..
1fd10 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
1fd20 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
1fd30 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1fd40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1fd50 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1fd60 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1fd80 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
1fd90 69 6c 65 64 20 74 6f 20 72 65 73 65 74 20 63 61  iled to reset ca
1fda0 63 68 65 64 20 61 73 73 65 6d 62 6c 79 20 64 69  ched assembly di
1fdb0 72 65 63 74 6f 72 79 2c 20 22 20 5c 0d 0a 20 20  rectory, " \..
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65                "e
1fdd0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 1fde0 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 1fdf0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 1fe00 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 1fe10 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1fe20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 1fe30 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 1fe40 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 1fe50 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 1fe60 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 1fe70 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 iveMethods \.. 1fe80 20 20 20 20 20 20 20 20 20 20 20 20 52 65 73 65 Rese 1fe90 74 43 61 63 68 65 64 58 6d 6c 43 6f 6e 66 69 67 tCachedXmlConfig 1fea0 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 FileName.. 1feb0 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d } error] == 0} 1fec0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1fed0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
1fee0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1fef0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1ff00 65 6c 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 63 el "---- reset c 1ff10 61 63 68 65 64 20 58 4d 4c 20 63 6f 6e 66 69 67 ached XML config 1ff20 75 72 61 74 69 6f 6e 20 66 69 6c 65 20 6e 61 6d uration file nam 1ff30 65 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 e\n".. 1ff40 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 1ff50 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 e {.. i 1ff60 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1ff70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1ff80 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 1ff90 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1ffb0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 1ffc0 6c 65 64 20 74 6f 20 72 65 73 65 74 20 63 61 63 led to reset cac 1ffd0 68 65 64 20 58 4d 4c 20 63 6f 6e 66 69 67 75 72 hed XML configur 1ffe0 61 74 69 6f 6e 20 22 20 5c 0d 0a 20 20 20 20 20 ation " \.. 1fff0 20 20 20 20 20 20 20 20 20 20 20 22 66 69 6c 65 "file 20000 20 6e 61 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 name, error: " 20010 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
20020 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
20030 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
20040 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
20050 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76     # NOTE: If av
20060 61 69 6c 61 62 6c 65 2c 20 72 65 70 6f 72 74 20  ailable, report
20070 6f 6e 20 28 61 6e 64 20 70 6f 73 73 69 62 6c 79  on (and possibly
20080 20 72 65 73 65 74 29 20 74 68 65 20 72 75 6e 74   reset) the runt
20090 69 6d 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ime..      #
200a0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
200b0 20 73 74 61 74 69 73 74 69 63 73 2e 0d 0a 20 20   statistics...
200c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
200d0 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
200e0 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d  ctCommand] && \.
200f0 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65  .          [have
20100 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64  Constraint build
20110 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65  Configuration.De
20120 62 75 67 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bug]} then {..
20130 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
20140 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
20150 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
20160 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61  gs +NonPublic -a
20170 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  lias \..
20180 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
20190 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61  a.SQLite.DebugDa
201a0 74 61 20 47 65 74 53 65 74 74 69 6e 67 52 65 61  ta GetSettingRea
201b0 64 43 6f 75 6e 74 73 20 66 61 6c 73 65 0d 0a 20  dCounts false..
201c0 20 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67         } setting
201d0 52 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30  ReadCounts] == 0
201e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
201f0 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e      set nameCoun
20200 74 20 5b 24 73 65 74 74 69 6e 67 52 65 61 64 43  t [$settingReadC 20210 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 ounts Count].. 20220 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 set valu 20230 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 eCount 0.... 20240 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 20250 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 each -alias pair 20260 20 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75$settingReadCou
20270 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  nts {..
20280 20 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75     incr valueCou
20290 6e 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d  nt [$pair Value] 202a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 202b0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
202c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
202d0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 202e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 202f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 20300 20 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 "---- setting 20310 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d \"" [$pair Key]
20320 20 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 20   "\" was read "
20330 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
20340 20 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75       [$pair Valu 20350 65 5d 20 22 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a e] " times\n"].. 20360 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 20370 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 20380 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 if {$res
20390 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
203a0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
203b0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
203c0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
203d0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
203e0 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20  lic -alias \..
203f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20400 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
20410 74 65 2e 44 65 62 75 67 44 61 74 61 20 43 6c 65  te.DebugData Cle
20420 61 72 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75  arSettingReadCou
20430 6e 74 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20  nts false..
20440 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20         } error]
20450 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
20460 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
20470 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 20480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 20490 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
204a0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
204b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
204c0 20 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 73     "---- reset s
204d0 65 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 63  etting statistic
204e0 73 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f  s for the previo
204f0 75 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  us " \..
20500 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d              $nam 20510 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 eCount " names a 20520 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 nd "$valueCount
20530 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 5c 6e   " values read\n
20540 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
20550 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
20560 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
20570 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 20580 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 20590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 205a0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
205b0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
205c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
205d0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
205e0 61 69 6c 65 64 20 74 6f 20 72 65 73 65 74 20 73  ailed to reset s
205f0 65 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 63  etting statistic
20600 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20  s for " \..
20610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
20620 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 24  the previous " $20630 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 nameCount " name 20640 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f s and "$valueCo
20650 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  unt \..
20660 20 20 20 20 20 20 20 20 20 20 20 22 20 76 61 6c             " val
20670 75 65 73 20 72 65 61 64 2c 20 65 72 72 6f 72 3a  ues read, error:
20680 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ 20690 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 206a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 206b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 206c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 206d0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 206e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 206f0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 20700 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 gs +NonPublic -a 20710 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 lias \.. 20720 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 20730 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 a.SQLite.DebugDa 20740 74 61 20 47 65 74 53 65 74 74 69 6e 67 52 65 61 ta GetSettingRea 20750 64 43 6f 75 6e 74 73 20 74 72 75 65 0d 0a 20 20 dCounts true.. 20760 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 46 } settingF 20770 69 6c 65 52 65 61 64 43 6f 75 6e 74 73 5d 20 3d ileReadCounts] = 20780 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 20790 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 set nameC 207a0 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 46 69 ount [$settingFi
207b0 6c 65 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75  leReadCounts Cou
207c0 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73  nt]..          s
207d0 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d  et valueCount 0.
207e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  ...          obj
207f0 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69  ect foreach -ali
20800 61 73 20 70 61 69 72 20 24 73 65 74 74 69 6e 67  as pair $setting 20810 46 69 6c 65 52 65 61 64 43 6f 75 6e 74 73 20 7b FileReadCounts { 20820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e .. in 20830 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 cr valueCount [$
20840 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20  pair Value]....
20850 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
20860 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 20870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 20880 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
20890 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
208a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
208b0 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20  --- setting \""
208c0 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 20  [$pair Key] "\" 208d0 77 61 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 20 was read " \.. 208e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 208f0 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 20 22 20 [$pair Value] "
20900 74 69 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 63  times from the c
20910 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c  onfiguration fil
20920 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  e\n"]..
20930 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
20940 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
20950 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20  f {$reset} then 20960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 20970 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 20980 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 20990 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 209a0 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 +NonPublic -alia 209b0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 209c0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 209d0 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 ta.SQLite.DebugD 209e0 61 74 61 20 43 6c 65 61 72 53 65 74 74 69 6e 67 ata ClearSetting 209f0 52 65 61 64 43 6f 75 6e 74 73 20 74 72 75 65 0d ReadCounts true. 20a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e 20a10 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e rror] == 0} then 20a20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 20a30 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
20a40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
20a50 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 20a60 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 20a70 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 20a80 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 "---- r 20a90 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 eset setting sta 20aa0 74 69 73 74 69 63 73 20 66 6f 72 20 74 68 65 20 tistics for the 20ab0 70 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 previous " \.. 20ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20ad0 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e$nameCount " n
20ae0 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75  ames and " $valu 20af0 65 43 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 20 eCount " values 20b00 72 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 read " \.. 20b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 "f 20b20 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 rom the configur 20b30 61 74 69 6f 6e 20 66 69 6c 65 5c 6e 22 5d 0d 0a ation file\n"].. 20b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 20b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e 20b60 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 20b70 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
20b80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
20b90 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
20ba0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 20bb0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 20bc0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 20bd0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 20be0 64 20 74 6f 20 72 65 73 65 74 20 73 65 74 74 69 d to reset setti 20bf0 6e 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f ng statistics fo 20c00 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 r " \.. 20c10 20 20 20 20 20 20 20 20 20 20 20 22 74 68 65 20 "the 20c20 70 72 65 76 69 6f 75 73 20 22 20 24 6e 61 6d 65 previous "$name
20c30 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e  Count " names an
20c40 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20  d " $valueCount 20c50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20c60 20 20 20 20 20 20 20 22 20 76 61 6c 75 65 73 20 " values 20c70 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 63 6f read from the co 20c80 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 nfiguration file 20c90 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 20ca0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20cb0 20 20 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e$error \n
20cc0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..
20cd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
20ce0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
20cf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
20d00 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
20d10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
20d20 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
20d30 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c  s +NonPublic -al
20d40 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ias \..
20d50 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
20d60 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74  .SQLite.DebugDat
20d70 61 20 47 65 74 4f 74 68 65 72 43 6f 75 6e 74 73  a GetOtherCounts
20d80 0d 0a 20 20 20 20 20 20 20 20 7d 20 6f 74 68 65  ..        } othe
20d90 72 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74  rCounts] == 0} t
20da0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
20db0 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b   set nameCount [
20dc0 24 6f 74 68 65 72 43 6f 75 6e 74 73 20 43 6f 75  $otherCounts Cou 20dd0 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 nt].. s 20de0 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d et valueCount 0. 20df0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a ... obj 20e00 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 ect foreach -ali 20e10 61 73 20 70 61 69 72 20 24 6f 74 68 65 72 43 6f as pair$otherCo
20e20 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  unts {..
20e30 20 20 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f      incr valueCo
20e40 75 6e 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65  unt [$pair Value 20e50 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... 20e60 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
20e70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
20e80 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 20e90 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 20ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 20eb0 20 20 20 20 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 "---- other 20ec0 63 6f 75 6e 74 65 72 20 5c 22 22 20 5b 24 70 61 counter \"" [$pa
20ed0 69 72 20 4b 65 79 5d 20 22 5c 22 20 68 61 73 20  ir Key] "\" has
20ee0 76 61 6c 75 65 20 22 20 5c 0d 0a 20 20 20 20 20  value " \..
20ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 70               [$p 20f00 61 69 72 20 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a air Value] \n].. 20f10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 20f20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 20f30 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 if {$res
20f40 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
20f50 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
20f60 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
20f70 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
20f80 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
20f90 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20  lic -alias \..
20fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20fb0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
20fc0 74 65 2e 44 65 62 75 67 44 61 74 61 20 43 6c 65  te.DebugData Cle
20fd0 61 72 4f 74 68 65 72 43 6f 75 6e 74 73 0d 0a 20  arOtherCounts..
20fe0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72             } err
20ff0 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  or] == 0} then {
21000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21010 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 21020 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 21030 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
21040 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
21050 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
21060 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73         "---- res
21070 65 74 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72  et other counter
21080 73 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f  s for the previo
21090 75 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  us " \..
210a0 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d              $nam 210b0 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 eCount " names a 210c0 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 nd "$valueCount
210d0 20 22 20 76 61 6c 75 65 73 5c 6e 22 5d 0d 0a 20   " values\n"]..
210e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
210f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
21100 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
21110 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 21120 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 21130 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
21140 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
21150 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
21160 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
21170 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
21180 20 74 6f 20 72 65 73 65 74 20 6f 74 68 65 72 20   to reset other
21190 63 6f 75 6e 74 65 72 73 20 66 6f 72 20 22 20 5c  counters for " \
211a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
211b0 20 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69        "the previ
211c0 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74  ous " $nameCount 211d0 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 " names and "$
211e0 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20  valueCount \..
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21200 20 20 22 20 76 61 6c 75 65 73 2c 20 65 72 72 6f    " values, erro
21210 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 21220 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 21230 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 21240 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 21250 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 21260 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 21270 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 f {[haveSQLiteOb 21280 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 jectCommand] && 21290 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 \.. [ha 212a0 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f veSQLiteDefineCo 212b0 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f 56 nstant INTEROP_V 212c0 49 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 IRTUAL_TABLE] && 212d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 \.. [h 212e0 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 aveSQLiteDefineC 212f0 6f 6e 73 74 61 6e 74 20 54 52 41 43 4b 5f 4d 45 onstant TRACK_ME 21300 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 68 65 MORY_BYTES]} the 21310 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 21320 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
21330 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
21340 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- 21350 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 current memory 21360 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 in use by SQLite 21370 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 Memory... ".. 21380 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 21390 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 213a0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 213b0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 213c0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 213d0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 213e0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ 213f0 4c 69 74 65 4d 65 6d 6f 72 79 20 62 79 74 65 73 LiteMemory bytes 21400 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 Allocated.. 21410 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 } memory] == 21420 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 21430 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
21440 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
21450 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 21460 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 21470 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73$memory " bytes
21480 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
21490 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
214a0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e {..          s
214b0 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77  et memory unknow
214c0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n....          i
214d0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 214e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 214f0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
21500 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 21510 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ry \n].. 21520 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 21530 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 .. if {!$
21540 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
21550 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $21560 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 channel "---- ma 21570 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 ximum memory in 21580 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d use by SQLiteMem 21590 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 ory... ".. 215a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 215b0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 215c0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 215d0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 215e0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 215f0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 21600 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit 21610 65 4d 65 6d 6f 72 79 20 6d 61 78 69 6d 75 6d 42 eMemory maximumB 21620 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 ytesAllocated.. 21630 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d } memory] 21640 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 21650 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
21660 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
21670 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
21680 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 21690 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 Args$memory " b
216a0 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  ytes\n"]..
216b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
216c0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
216d0 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e     set memory un
216e0 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  known....
216f0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 21700 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 21710 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
21720 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $21730 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. 21740 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 21750 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 21760 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
21770 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
21780 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 21790 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d "---- current m 217a0 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 217b0 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 SQLite... ".. 217c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 217d0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 217e0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 217f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 21800 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 21810 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 21820 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 21830 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 21840 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 21850 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 21860 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c ativeMethods sql 21870 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 ite3_memory_used 21880 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f .. } memo 21890 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ry] == 0} then { 218a0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 218b0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
218c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
218d0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 218e0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
218f0 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20  " bytes\n"]..
21900 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
21910 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
21920 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
21930 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65     # NOTE: Maybe
21940 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
21950 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76   library is unav
21960 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20  ailable?..
21970 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
21980 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e   set memory unkn
21990 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  own....
219a0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 219b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 219c0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
219d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 219e0 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 219f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 21a00 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 21a10 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 .. set me 21a20 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 mory unavailable 21a30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 21a40 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
21a50 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
21a60 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 21a70 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e dArgs$memory \n
21a80 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
21a90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73      }....      s
21aa0 65 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72  et result $memor 21ab0 79 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 y; # NOTE: Retur 21ac0 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 n memory in-use 21ad0 74 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a to our caller... 21ae0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
21af0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
21b00 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 21b10 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 nel "---- maximu 21b20 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 m memory in use 21b30 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a by SQLite... ".. 21b40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 21b50 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 if {[haveSQLite 21b60 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 ObjectCommand]} 21b70 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 21b80 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 21b90 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 21ba0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 21bb0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 21bc0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 21bd0 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa 21be0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods 21bf0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21c00 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f sqlite3_memory_ 21c10 68 69 67 68 77 61 74 65 72 20 30 0d 0a 20 20 20 highwater 0.. 21c20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d } memory] = 21c30 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 21c40 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
21c50 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
21c60 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 21c70 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 21c80 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 gs$memory " byt
21c90 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
21ca0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
21cb0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
21cc0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
21cd0 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20  NOTE: Maybe the
21ce0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
21cf0 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62  ary is unavailab
21d00 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 23  le?..          #
21d10 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
21d20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a  memory unknown..
21d30 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
21d40 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 21d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 21d60 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
21d70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 21d80 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 21d90 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 21da0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 21db0 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 set memory 21dc0 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 unavailable.... 21dd0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
21de0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
21df0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 21e00 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 21e10 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20$memory \n]..
21e20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
21e30 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63  ....      if {$c 21e40 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a ollect} then {.. 21e50 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 collectG 21e60 61 72 62 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d arbage$channel.
21e70 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
21e80 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 21e90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t 21ea0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
21eb0 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f  --- current memo
21ec0 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65  ry in use by the
21ed0 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20   CLR... "..
21ee0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
21ef0 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
21f00 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
21f10 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
21f20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
21f30 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
21f40 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f   GC GetTotalMemo
21f50 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ry false..
21f60 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30    } memory] == 0
21f70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
21f80 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
21f90 69 73 20 69 6e 74 65 67 65 72 20 2d 73 74 72 69  is integer -stri
21fa0 63 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74 68 65  ct $memory]} the 21fb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 21fc0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
21fd0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
21fe0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 21ff0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
22000 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e  memory " bytes\n
22010 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
22020 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  }..          } e
22030 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
22040 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 69 6e     set memory in
22050 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 20 20  valid....
22060 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 22070 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 22080 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
22090 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
220a0 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a  gs $memory \n].. 220b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 220c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 220d0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 220e0 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f set memo 220f0 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 ry unknown.... 22100 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
22110 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
22120 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $22130 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 22140 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d rgs$memory \n].
22150 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
22160 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
22170 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
22180 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76   set memory unav
22190 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20  ailable....
221a0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 221b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 221c0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
221d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 221e0 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 221f0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 22200 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
22210 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
22220 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f      proc checkFo
22230 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69  rSQLiteDirectori
22240 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 65  es { channel {re
22250 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  set false} } {..
22260 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
22270 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
22280 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33  the sqlite3_win3
22290 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20  2_set_directory
222a0 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69  function is avai
222b0 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d  lable...      #.
222c0 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch 222d0 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 222e0 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e "---- checkin 222f0 67 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 73 g for function s 22300 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 22310 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 22 0d _directory... ". 22320 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 22330 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 # NOTE: This c 22340 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c 69 74 all to the sqlit 22350 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 22360 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 ectory function 22370 75 73 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 uses the.. 22380 23 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 20 # invalid 22390 76 61 6c 75 65 20 30 20 66 6f 72 20 74 68 65 20 value 0 for the 223a0 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 20 first argument. 223b0 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 64 65 This code is de 223c0 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 signed.. # 223d0 20 20 20 20 20 20 74 6f 20 63 68 65 63 6b 20 69 to check i 223e0 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 f calling the fu 223f0 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 69 73 nction will rais 22400 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 28 e an exception ( 22410 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 i.e... # 22420 20 20 20 20 74 68 65 20 61 63 74 75 61 6c 20 72 the actual r 22430 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e esult of the fun 22440 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 6d ction does not m 22450 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 61 73 atter as long as 22460 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 no.. # 22470 20 20 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 directory is 22480 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 20 20 changed)... 22490 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 224a0 73 57 69 6e 64 6f 77 73 5d 20 26 26 20 5b 63 61 sWindows] && [ca 224b0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f tch {.. o 224c0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 224d0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 224e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 .. Sy 224f0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 22500 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 .UnsafeNativeMet 22510 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 hods \.. 22520 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 sqlite3_win3 22530 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 22540 30 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 5d 0 null.. }] 22550 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 22560 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 22570 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c 6c 69 6e # NOTE: Callin 22580 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 g the sqlite3_wi 22590 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 225a0 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 y function does 225b0 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 not.. # 225c0 20 20 20 20 20 63 61 75 73 65 20 61 6e 20 65 78 cause an ex 225d0 63 65 70 74 69 6f 6e 3b 20 74 68 65 72 65 66 6f ception; therefo 225e0 72 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 61 re, it must be a 225f0 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 0d 0a vailable (i.e... 22600 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 22610 65 76 65 6e 20 74 68 6f 75 67 68 20 69 74 20 73 even though it s 22620 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 61 20 66 hould return a f 22630 61 69 6c 75 72 65 20 72 65 74 75 72 6e 20 63 6f ailure return co 22640 64 65 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 de in this.. 22650 20 20 20 20 23 20 20 20 20 20 20 20 63 61 73 65 # case 22660 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 22670 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 22680 61 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 69 6e aint sqlite3_win 22690 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 226a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 .... tput 226b0 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e s$channel yes\n
226c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
226d0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44         # NOTE: D
226e0 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77  oes our caller w
226f0 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 65  ant to reset the
22700 20 64 69 72 65 63 74 6f 72 69 65 73 3f 0d 0a 20   directories?..
22710 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
22720 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68    if {$reset} th 22730 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 22740 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 22750 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 OTE: Now make su 22760 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 re the database 22770 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 and temporary di 22780 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 rectories are.. 22790 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 227a0 20 72 65 73 65 74 20 74 68 65 69 72 20 64 65 66 reset their def 227b0 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 ault values, whi 227c0 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c ch should be nul 227d0 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 l for both... 227e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 # S 227f0 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 33 ince the sqlite3 22800 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 _win32_set_direc 22810 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 tory function is 22820 20 61 76 61 69 6c 61 62 6c 65 2c 0d 0a 20 20 20 available,.. 22830 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 # u 22840 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 se it... 22850 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 66 #.. f 22860 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d or {set index 1} 22870 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20 7b 69 {$index < 3} {i
22880 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20  ncr index} {..
22890 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
228a0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
228b0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
228c0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
228d0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
228e0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
228f0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
22900 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
22910 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
22920 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77         sqlite3_w
22930 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
22940 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 0d 0a  ry $index null.. 22950 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 72 65 } re 22960 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 22970 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 22980 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
22990 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
229a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
229b0 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c    "---- call sql
229c0 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
229d0 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65  irectory(" $inde 229e0 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x \.. 229f0 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e ", null). 22a00 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 .. ok: "$result
22a10 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
22a20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
22a30 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
22a40 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 22a50 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 22a60 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 22a70 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e call sqlite3_win 22a80 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 22a90 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 ("$index \..
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22ab0 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72  , null)... error
22ac0 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74  : " \n\t $result 22ad0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 22ae0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 22af0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 22b00 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 22b10 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
22b20 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20  nel no\n....
22b30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
22b40 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20   NOTE: Does our
22b50 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72  caller want to r
22b60 65 73 65 74 20 74 68 65 20 64 69 72 65 63 74 6f  eset the directo
22b70 72 69 65 73 3f 20 20 54 68 69 73 20 63 61 6e 20  ries?  This can
22b80 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20  only..        #
22b90 20 20 20 20 20 20 62 65 20 70 65 72 66 6f 72 6d        be perform
22ba0 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  ed if SQLite is
22bb0 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 61 64 79  loaded and ready
22bc0 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the
22bd0 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  test..        #
22be0 20 20 20 20 20 20 73 75 69 74 65 2e 0d 0a 20 20        suite...
22bf0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
22c00 20 69 66 20 7b 24 72 65 73 65 74 20 26 26 20 5b   if {$reset && [ 22c10 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 isSQLiteReady]} 22c20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 22c30 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 22c40 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 NOTE: Now make 22c50 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 sure the databas 22c60 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 e and temporary 22c70 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d directories are. 22c80 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 22c90 20 20 20 72 65 73 65 74 20 74 68 65 69 72 20 64 reset their d 22ca0 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 efault values, w 22cb0 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e hich should be n 22cc0 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 ull for both... 22cd0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 22ce0 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 Since the sqlit 22cf0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 22d00 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 ectory function 22d10 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 does not.. 22d20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70 65 # appe 22d30 61 72 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 ar to be availab 22d40 6c 65 2c 20 75 73 65 20 74 68 65 20 61 73 73 6f le, use the asso 22d50 63 69 61 74 65 64 20 50 52 41 47 4d 41 20 63 6f ciated PRAGMA co 22d60 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20 20 20 20 mmands.. 22d70 20 20 23 20 20 20 20 20 20 20 69 6e 73 74 65 61 # instea 22d80 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d d... #. 22d90 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 . forea 22da0 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 ch directory [li 22db0 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 st data_store_di 22dc0 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f rectory temp_sto 22dd0 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d re_directory] {. 22de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set 22df0 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 sql [appendArgs 22e00 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 "PRAGMA "$dire
22e10 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c 22 3b 22  ctory " = \"\";"
22e20 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
22e30 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65   if {[catch {exe
22e40 63 75 74 65 53 71 6c 20 24 73 71 6c 7d 20 72 65  cuteSql $sql} re 22e50 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 22e60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 22e70 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
22e80 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22ea0 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20    "---- execute
22eb0 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74  PRAGMA " $direct 22ec0 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 ory "... ok: \"" 22ed0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22ee0 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 5c 22$result \"
22ef0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
22f00 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
22f10 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $22f20 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 22f30 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 22f40 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 "---- e 22f50 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 xecute PRAGMA " 22f60 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20$directory "...
22f70 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20  error: " \..
22f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e                \n
22f90 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 22fa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 22fb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 22fc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 22fd0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 22fe0 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 # NOTE: Finally 22ff0 2c 20 73 68 6f 77 20 74 68 65 20 63 75 72 72 65 , show the curre 23000 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 nt value of the 23010 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d database and tem 23020 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 porary.. # 23030 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 69 65 directorie 23040 73 2e 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c s. This can onl 23050 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 y be performed i 23060 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 f SQLite is load 23070 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # 23080 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 and ready for 23090 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 use by the test 230a0 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d suite... #. 230b0 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 53 51 . if {[isSQ 230c0 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e LiteReady]} then 230d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 {.. fore 230e0 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c ach directory [l 230f0 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 ist data_store_d 23100 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 irectory temp_st 23110 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b ore_directory] { 23120 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 23130 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
23140 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65  ndArgs "---- che
23150 63 6b 69 6e 67 20 22 20 24 64 69 72 65 63 74 6f  cking " $directo 23160 72 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 ry "... "].... 23170 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 set sql 23180 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 [appendArgs "PRA 23190 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 GMA "$directory
231a0 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   \;]....
231b0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78    if {[catch {ex
231c0 65 63 75 74 65 53 71 6c 20 24 73 71 6c 20 73 63  ecuteSql $sql sc 231d0 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d alar} result] == 231e0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 231f0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
23200 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
23210 67 73 20 22 6f 6b 3a 20 5c 22 22 20 24 72 65 73  gs "ok: \"" $res 23220 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ult \"\n].. 23230 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 23240 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 23250 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
23260 64 41 72 67 73 20 22 65 72 72 6f 72 3a 20 22 20  dArgs "error: "
23270 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d  \n\t $result \n] 23280 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 23290 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 232a0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 232b0 20 70 72 6f 63 20 6c 6f 61 64 53 51 4c 69 74 65 proc loadSQLite 232c0 54 65 73 74 53 65 74 74 69 6e 67 73 20 7b 20 63 TestSettings { c 232d0 68 61 6e 6e 65 6c 20 7b 73 75 66 66 69 78 20 22 hannel {suffix " 232e0 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d "} {quiet false} 232f0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 23300 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 23310 70 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 73 65 p loading the se 23320 74 74 69 6e 67 73 20 69 66 20 74 68 65 69 72 20 ttings if their 23330 75 73 61 67 65 20 68 61 73 20 62 65 65 6e 20 64 usage has been d 23340 69 73 61 62 6c 65 64 2e 0d 0a 20 20 20 20 20 20 isabled... 23350 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 #.. if {![i 23360 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 23370 73 71 6c 69 74 65 54 65 73 74 53 65 74 74 69 6e sqliteTestSettin 23380 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 gs)]} then {.. 23390 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 233a0 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 # NOTE: Load cu 233b0 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e stom per-user an 233c0 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 d/or per-host te 233d0 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e st settings now. 233e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 233f0 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 23400 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 xists ::tcl_plat 23410 66 6f 72 6d 28 75 73 65 72 29 5d 7d 20 74 68 65 form(user)]} the 23420 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 23430 65 74 20 75 73 65 72 53 65 74 74 69 6e 67 73 46 et userSettingsF 23440 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ileName [file jo 23450 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 in [getCommonDir 23460 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 ectory] \.. 23470 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 [append 23480 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 Args settings$s
23490 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70  uffix . $::tcl_p 234a0 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 20 2e 65 latform(user) .e 234b0 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 agle]].... 234c0 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 234d0 69 73 74 73 20 24 75 73 65 72 53 65 74 74 69 6e ists$userSettin
234e0 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65  gsFileName]} the
234f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
23500 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 23510 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 23520 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
23530 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
23540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
23550 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e      "---- loadin
23560 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20  g per-user test
23570 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
23580 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
23590 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74         $userSett 235a0 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e ingsFileName \". 235b0 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ..\n].. 235c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 235d0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 235e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 235f0 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list 23600 73 6f 75 72 63 65 20 24 75 73 65 72 53 65 74 74 source$userSett
23610 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20  ingsFileName]..
23620 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72             } err
23630 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
23640 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
23650 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 23660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23670 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
23680 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
23690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
236a0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
236b0 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20   failed to load
236c0 70 65 72 2d 75 73 65 72 20 73 65 74 74 69 6e 67  per-user setting
236d0 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20  s file \"" \..
236e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
236f0 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46    $userSettingsF 23700 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 ileName "\", err 23710 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
23720 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
23730 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
23740 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
23750 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
23760 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 23770 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 23780 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 23790 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
237a0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
237b0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
237c0 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20  skipped loading
237d0 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65  per-user test se
237e0 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20  ttings file \""
237f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
23800 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e       $userSettin 23810 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 gsFileName "\", 23820 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 23830 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 t\n"].. 23840 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 23850 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 23860 20 20 20 20 20 20 20 20 23 23 23 23 23 23 23 23 ######## 23870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 23880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 23890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 238a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d ###############. 238b0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 238c0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 info exists ::tc 238d0 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 l_platform(host) 238e0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 238f0 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 65 74 set hostSet 23900 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 tingsFileName [f 23910 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d ile join [getCom 23920 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d monDirectory] \. 23930 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 23940 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 69 appendArgs setti 23950 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a ngs$suffix . $: 23960 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f :tcl_platform(ho 23970 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a st) .eagle]].... 23980 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 if {[f 23990 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f 73 74 ile exists$host
239a0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
239b0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
239c0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 239d0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 239e0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 239f0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
23a00 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
23a10 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
23a20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74  loading per-host
23a30 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66   test settings f
23a40 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ile \"" \..
23a50 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f               $ho 23a60 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 stSettingsFileNa 23a70 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 me \"...\n].. 23a80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 23a90 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 23aa0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 23ab0 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 uplevel 1 23ac0 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 68 6f [list source$ho
23ad0 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  stSettingsFileNa
23ae0 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me]..
23af0 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20   } error]} then
23b00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
23b10 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 23b20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 23b30 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
23b40 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
23b50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
23b60 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
23b70 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
23b80 20 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74 20 73   load per-host s
23b90 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
23ba0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
23bb0 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74          $hostSet 23bc0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c tingsFileName "\ 23bd0 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 23be0 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
23bf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
23c00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
23c10 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
23c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
23c30 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 23c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23c50 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
23c60 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
23c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23c80 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f  "---- skipped lo
23c90 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74  ading per-host t
23ca0 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c  est settings fil
23cb0 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
23cc0 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74             $host 23cd0 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName 23ce0 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f "\", it does no 23cf0 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 t exist\n"].. 23d00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 23d10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 23d20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. }.. 23d30 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 23d40 63 6f 70 79 53 61 6d 70 6c 65 44 61 74 61 62 61 copySampleDataba 23d50 73 65 46 69 6c 65 73 20 7b 7d 20 7b 0d 0a 20 20 seFiles {} {.. 23d60 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b 0d uplevel 1 {. 23d70 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 23d80 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 # NOTE: Copy 23d90 20 28 6f 72 20 72 65 2d 63 6f 70 79 29 20 74 68 (or re-copy) th 23da0 65 20 72 65 66 65 72 65 6e 63 65 20 64 61 74 61 e reference data 23db0 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 66 base file used f 23dc0 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 or this.. 23dd0 20 23 20 20 20 20 20 20 20 75 6e 69 74 20 74 65 # unit te 23de0 73 74 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 st to the build 23df0 64 69 72 65 63 74 6f 72 79 20 69 6e 20 63 61 73 directory in cas 23e00 65 20 69 74 20 68 61 73 20 62 65 65 6e 20 63 68 e it has been ch 23e10 61 6e 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23 anged.. # 23e20 20 20 20 20 20 20 20 62 79 20 61 20 70 72 65 76 by a prev 23e30 69 6f 75 73 20 74 65 73 74 20 72 75 6e 2e 0d 0a ious test run... 23e40 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 23e50 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f file copy -fo 23e60 72 63 65 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 rce$northwindEf
23e70 44 62 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  DbFile \..
23e80 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
23e90 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72  getBuildDirector
23ea0 79 20 66 61 6c 73 65 5d 20 5b 66 69 6c 65 20 74  y false] [file t
23eb0 61 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66  ail $northwindEf 23ec0 44 62 46 69 6c 65 5d 5d 0d 0a 20 20 20 20 20 20 DbFile]].. 23ed0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 23ee0 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 proc runSQLiteT 23ef0 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b estPrologue {} { 23f00 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 23f10 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 # NOTE: Skip ru 23f20 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d nning our custom 23f30 20 70 72 6f 6c 6f 67 75 65 20 69 66 20 74 68 65 prologue if the 23f40 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 main one has be 23f50 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 en.. # 23f60 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 skipped... 23f70 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 23f80 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 23f90 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61 67 6c 65 o(prologue.eagle 23fa0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 23fb0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 23fc0 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 NOTE: Load the 23fd0 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74 72 61 69 "before-constrai 23fe0 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d nts" custom per- 23ff0 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d user and/or per- 24000 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 host.. # 24010 20 20 20 20 20 20 74 65 73 74 20 73 65 74 74 69 test setti 24020 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ngs now... 24030 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c #.. upl 24040 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 evel 1 [list loa 24050 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 dSQLiteTestSetti 24060 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ngs$::test_chan
24070 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d 0a 0d 0a  nel .before]....
24080 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
24090 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
240a0 20 69 66 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d   if the [object]
240b0 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 76 61 69   command is avai
240c0 6c 61 62 6c 65 3b 20 69 66 20 6e 6f 74 2c 20 61  lable; if not, a
240d0 64 64 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20  dd some..
240e0 20 23 20 20 20 20 20 20 20 73 68 69 6d 73 20 74   #       shims t
240f0 6f 20 6d 61 6b 65 20 74 68 65 20 74 65 73 74 20  o make the test
24100 73 75 69 74 65 20 72 75 6e 20 73 6d 6f 6f 74 68  suite run smooth
24110 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  er...        #..
24120 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
24130 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
24140 61 6e 64 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  and $::test_chan 24150 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 nel.... # 24160 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 24170 3a 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 : Determine the 24180 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 6e 61 74 names of the nat 24190 69 76 65 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 ive platform and 241a0 20 61 72 63 68 69 74 65 63 74 75 72 65 2e 0d 0a architecture... 241b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 241c0 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 241d0 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 [getBuildPlatfor 241e0 6d 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 m true].. 241f0 20 73 65 74 20 61 72 63 68 69 74 65 63 74 75 72 set architectur 24200 65 20 5b 61 72 63 68 69 74 65 63 74 75 72 65 46 e [architectureF 24210 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 orPlatform$plat
24220 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  form]....
24230 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
24240 54 45 3a 20 53 68 6f 77 20 74 68 65 20 70 6c 61  TE: Show the pla
24250 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69 74  tform and archit
24260 65 63 74 75 72 65 20 75 73 65 64 20 74 6f 20 68  ecture used to h
24270 65 6c 70 20 6c 6f 63 61 74 65 20 74 68 65 0d 0a  elp locate the..
24280 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
24290 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c  native build fil
242a0 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  es...        #..
242b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 242c0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 242d0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 242e0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 70 "---- p 242f0 6c 61 74 66 6f 72 6d 20 66 6f 72 20 6c 6f 63 61 latform for loca 24300 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 6c ting native buil 24310 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 5c d files is \"" \ 24320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 70 ..$p
24330 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d  latform \"\n]...
24340 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $24350 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 24360 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 24370 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 24380 61 72 63 68 69 74 65 63 74 75 72 65 20 66 6f 72 architecture for 24390 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 65 locating native 243a0 20 62 75 69 6c 64 20 66 69 6c 65 73 20 69 73 20 build files is 243b0 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 243c0 20 20 20 24 61 72 63 68 69 74 65 63 74 75 72 65$architecture
243d0 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20   \"\n]....
243e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
243f0 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73  OTE: Build a lis
24400 74 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 74 69  t of configurati
24410 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  on files that we
24420 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20   handle...
24430 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
24440 20 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73   configFileNames
24450 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
24460 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
24470 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e  a.SQLite.dll.con
24480 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  fig]....
24490 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
244a0 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20  E: Build a list
244b0 6f 66 20 61 75 78 69 6c 69 61 72 79 20 4d 61 6e  of auxiliary Man
244c0 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 20 41  aged Debugging A
244d0 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29 0d  ssistants (MDA).
244e0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
244f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
24500 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
24510 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  dle...        #.
24520 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 64 61  .        set mda
24530 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20  ConfigFileNames
24540 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
24550 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 33       EagleShell3
24560 32 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  2.exe.mda.config
24570 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d   Installer.exe.m
24580 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20  da.config \..
24590 20 20 20 20 20 20 20 20 20 74 65 73 74 2e 65 78           test.ex
245a0 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65 73  e.mda.config tes
245b0 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 6f  tlinq.exe.mda.co
245c0 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20 20  nfig \..
245d0 20 20 20 20 74 65 73 74 65 66 36 2e 65 78 65 2e      testef6.exe.
245e0 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20  mda.config]....
245f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
24600 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
24610 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 74 65  the list of exte
24620 72 6e 61 6c 20 66 69 6c 65 73 20 74 68 61 74 20  rnal files that
24630 77 65 20 68 61 6e 64 6c 65 2e 20 20 53 6f 6d 65  we handle.  Some
24640 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20   of..        #
24650 20 20 20 20 20 74 68 65 73 65 20 66 69 6c 65 73       these files
24660 20 6d 61 79 20 62 65 20 6e 61 74 69 76 65 20 61   may be native a
24670 6e 64 2f 6f 72 20 6d 61 6e 61 67 65 64 20 61 73  nd/or managed as
24680 73 65 6d 62 6c 69 65 73 20 74 68 61 74 20 61 72  semblies that ar
24690 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
246a0 20 20 20 72 65 71 75 69 72 65 64 20 74 6f 20 70     required to p
246b0 65 72 66 6f 72 6d 20 76 61 72 69 6f 75 73 20 74  erform various t
246c0 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ests...        #
246d0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 78  ..        set ex
246e0 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20  ternalFileNames
246f0 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
24700 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20       [file join
24710 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 20  EntityFramework
24720 6c 69 62 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  lib [string map
24730 5b 6c 69 73 74 20 46 78 20 22 22 5d 20 5c 0d 0a  [list Fx ""] \..
24740 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
24750 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 6e 65  ing map [list ne
24760 74 46 78 34 35 31 20 6e 65 74 46 78 34 35 20 6e  tFx451 netFx45 n
24770 65 74 46 78 34 35 32 20 6e 65 74 46 78 34 35 20  etFx452 netFx45
24780 6e 65 74 46 78 34 36 20 5c 0d 0a 20 20 20 20 20  netFx46 \..
24790 20 20 20 20 20 20 20 6e 65 74 46 78 34 35 20 6e         netFx45 n
247a0 65 74 46 78 34 36 31 20 6e 65 74 46 78 34 35 20  etFx461 netFx45
247b0 6e 65 74 46 78 34 36 32 20 6e 65 74 46 78 34 35  netFx462 netFx45
247c0 20 6e 65 74 46 78 34 37 20 6e 65 74 46 78 34 35   netFx47 netFx45
247d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
247e0 6e 65 74 46 78 34 37 31 20 6e 65 74 46 78 34 35  netFx471 netFx45
247f0 5d 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 78  ] [getBuildNetFx
24800 5d 5d 5d 20 45 6e 74 69 74 79 46 72 61 6d 65 77  ]]] EntityFramew
24810 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20  ork.dll]]....
24820 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
24830 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68  # NOTE: Build th
24840 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65  e list of native
24850 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20   assembly files
24860 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d  that we handle..
24870 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
24880 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 46 69      set nativeFi
24890 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a  leNames [list]..
248a0 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c  ..        eval l
248b0 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46 69 6c  append nativeFil
248c0 65 4e 61 6d 65 73 20 5b 67 65 74 4e 61 74 69 76  eNames [getNativ
248d0 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65  eLibraryFileName
248e0 73 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20 20 20 20  sOnly]..
248f0 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e 61 74  eval lappend nat
24900 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b 67 65  iveFileNames [ge
24910 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79  tInteropAssembly
24920 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a  FileNamesOnly]..
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 42 75 69       # NOTE: Bui
24950 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d  ld the list of m
24960 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
24970 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  ly files that we
24980 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20   handle...
24990 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
249a0 20 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20   mixedFileNames
249b0 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20  [list]....
249c0 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d    if {[hasRuntim
249d0 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d  eOption native]}
249e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
249f0 20 20 20 6c 61 70 70 65 6e 64 20 6d 69 78 65 64     lappend mixed
24a00 46 69 6c 65 4e 61 6d 65 73 20 53 79 73 74 65 6d  FileNames System
24a10 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
24a20 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
24a30 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
24a40 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
24a50 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61  the list of mana
24a60 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c  ged assembly fil
24a70 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c  es that we handl
24a80 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
24a90 20 20 20 20 20 20 20 73 65 74 20 6d 61 6e 61 67         set manag
24aa0 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  edFileNames [lis
24ab0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
24ac0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
24ad0 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 53 79 73  ite.Linq.dll Sys
24ae0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
24af0 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20  EF6.dll]....
24b00 20 20 20 20 69 66 20 7b 21 5b 68 61 73 52 75 6e      if {![hasRun
24b10 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76  timeOption nativ
24b20 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
24b30 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 61        lappend ma
24b40 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 53  nagedFileNames S
24b50 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
24b60 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d  e.dll..        }
24b70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
24b80 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
24b90 68 6f 77 20 74 68 65 20 76 61 72 69 6f 75 73 20  how the various
24ba0 6c 69 73 74 73 20 6f 66 20 66 69 6c 65 20 6e 61  lists of file na
24bb0 6d 65 73 20 74 68 61 74 20 61 72 65 20 68 61 6e  mes that are han
24bc0 64 6c 65 64 20 62 79 20 74 68 69 73 0d 0a 20 20  dled by this..
24bd0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
24be0 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20  ocedure...
24bf0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
24c00 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 24c10 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 24c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 24c30 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 63 6f --- list of \"co 24c40 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 66 69 nfiguration\" fi 24c50 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 5c le names is: " \ 24c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 63 ..$c
24c70 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5c  onfigFileNames \
24c80 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70  n]....        tp
24c90 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 24ca0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 24cb0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 24cc0 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 4d ---- list of \"M 24cd0 44 41 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e DA configuration 24ce0 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 \" file names is 24cf0 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 24d00 20 20 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c$mdaConfigFil
24d10 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20  eNames \n]....
24d20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 24d30 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 24d40 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 24d50 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 "---- lis 24d60 74 20 6f 66 20 5c 22 65 78 74 65 72 6e 61 6c 5c t of \"external\ 24d70 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a " file names is: 24d80 20 22 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 "$externalFile
24d90 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20  Names \n]....
24da0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 24db0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 24dc0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 24dd0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 "---- list 24de0 20 6f 66 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 of \"native\" f 24df0 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 ile names is: " 24e00 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73$nativeFileNames
24e10 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   \n]....
24e20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 24e30 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 24e40 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 24e50 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c "---- list of \ 24e60 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 20 6e 61 "mixed\" file na 24e70 6d 65 73 20 69 73 3a 20 22 20 24 6d 69 78 65 64 mes is: "$mixed
24e80 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d  FileNames \n]...
24e90 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $24ea0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 24eb0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 24ec0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 24ed0 6c 69 73 74 20 6f 66 20 5c 22 6d 61 6e 61 67 65 list of \"manage 24ee0 64 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 d\" file names i 24ef0 73 3a 20 22 20 24 6d 61 6e 61 67 65 64 46 69 6c s: "$managedFil
24f00 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20  eNames \n]....
24f10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
24f20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20   # NOTE: Remove
24f30 61 6e 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61  any test constra
24f40 69 6e 74 73 20 74 68 61 74 20 72 65 66 65 72 20  ints that refer
24f50 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20 61 6e  to the native an
24f60 64 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20  d/or..        #
24f70 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 73        managed as
24f80 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61  sembly files tha
24f90 74 20 77 65 20 68 61 6e 64 6c 65 20 75 6e 6c 65  t we handle unle
24fa0 73 73 20 66 6f 72 62 69 64 64 65 6e 20 66 72 6f  ss forbidden fro
24fb0 6d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  m..        #
24fc0 20 20 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a 20 20     doing so...
24fd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
24fe0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
24ff0 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 52 65  ts ::no(sqliteRe
25000 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 73 29  moveConstraints)
25010 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
25020 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
25030 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c  eName $configFil 25040 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 25050 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 removeCons 25060 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 25070 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 gs file_$fileNa
25080 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  me]..          }
25090 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f  ....          fo
250a0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $250b0 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d mdaConfigFileNam 250c0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 250d0 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 removeConstrai 250e0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 250f0 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d ile_$fileName].
25100 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
25110 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
25120 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65  h fileName $exte 25130 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d rnalFileNames {. 25140 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 25150 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 oveConstraint [a 25160 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 25170 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
25180 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20  Name]]..
25190 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
251a0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
251b0 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  e $nativeFileNam 251c0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 251d0 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 removeConstrai 251e0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 251f0 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d ile_$fileName].
25200 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
25210 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
25220 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65  h fileName $mixe 25230 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 dFileNames {.. 25240 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 remove 25250 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 25260 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 ndArgs file_$fi
25270 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
25280 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
25290 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
252a0 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e  me $managedFileN 252b0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 252c0 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 removeConstr 252d0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 252e0 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 file_$fileName
252f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
25300 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
25310 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
25320 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c  # NOTE: Skip all
25330 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
25340 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65  ite related file
25350 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74   handling (delet
25360 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  ing,..        #
25370 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61        copying, a
25380 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69  nd loading) if i
25390 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20  nstructed...
253a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
253b0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
253c0 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65   ::no(sqliteFile
253d0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
253e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
253f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
25400 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74   trying to delet
25410 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69  e any files if i
25420 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20  nstructed...
25430 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
25440 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
25450 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
25460 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74  SqliteFiles)]} t
25470 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
25480 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
25490 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65  ists ::no(delete
254a0 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65  SqliteConfigFile
254b0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
254c0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
254d0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e  ch fileName $con 254e0 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a figFileNames {.. 254f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25500 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 tryDeleteBinaryF 25510 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 ile$fileName..
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
25530 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25540 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
25550 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
25560 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
25570 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d  ExternalFiles)]}
25580 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
25590 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
255a0 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66  ileName $mdaConf 255b0 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 igFileNames {.. 255c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 255d0 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c ryDeleteBuildFil 255e0 65 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 e$fileName fals
255f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
25600 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
25610 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
25620 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69  Name $externalFi 25630 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 25640 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 25650 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 leteBinaryFile$
25660 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..
25670 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
25680 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
25690 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
256a0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
256b0 65 6c 65 74 65 53 71 6c 69 74 65 4e 61 74 69 76  eleteSqliteNativ
256c0 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  eFiles)]} then {
256d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
256e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
256f0 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
25700 69 74 65 49 6d 70 6c 69 63 69 74 4e 61 74 69 76  iteImplicitNativ
25710 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  eFiles)]} then {
25720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
25730 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
25740 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61  me $nativeFileNa 25750 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 25760 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 tryDele 25770 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 teAssembly$file
25780 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
25790 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
257a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
257b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
257c0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
257d0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e  (deleteSqliteNon
257e0 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d  ImplicitFiles)]}
257f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
25800 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
25810 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
25820 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74  deleteSqlitePlat
25830 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c  formFiles)] && \
25840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
25850 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
25860 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20  ngth $platform] 25870 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 25880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f 25890 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 258a0 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73$nativeFileNames
258b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
258c0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
258d0 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 258e0 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 ame$platform..
258f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25900 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
25910 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
25920 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
25930 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
25940 64 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68  deleteSqliteArch
25950 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20  itectureFiles)]
25960 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
25970 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
25980 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 25990 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 259a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 259b0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 259c0 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
259d0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
259e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
259f0 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c  tryDeleteAssembl
25a00 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63  y $fileName$arc
25a10 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20  hitecture..
25a20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
25a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25a40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
25a50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
25a60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
25a70 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
25a80 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
25a90 6c 69 74 65 4d 69 78 65 64 46 69 6c 65 73 29 5d  liteMixedFiles)]
25aa0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
25ab0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
25ac0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
25ad0 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22   If the "native"
25ae0 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20   runtime option
25af0 69 73 20 73 65 74 2c 20 64 65 6c 65 74 65 20 69  is set, delete i
25b00 6d 70 6c 69 63 69 74 0d 0a 20 20 20 20 20 20 20  mplicit..
25b10 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d         #       m
25b20 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
25b30 6c 79 20 66 69 6c 65 73 20 61 73 20 77 65 6c 6c  ly files as well
25b40 2e 20 20 54 68 69 73 20 72 75 6e 74 69 6d 65 20  .  This runtime
25b50 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  option..
25b60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 68        #       ch
25b70 65 63 6b 20 69 73 20 68 61 6e 64 6c 65 64 20 77  eck is handled w
25b80 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 74 68 65  hen building the
25b90 20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64 2d 6d   list of mixed-m
25ba0 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ode..
25bb0 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d     #       assem
25bc0 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 2e 0d  bly file names..
25bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
25be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
25bf0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
25c00 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
25c10 69 74 65 49 6d 70 6c 69 63 69 74 4d 69 78 65 64  iteImplicitMixed
25c20 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
25c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
25c40 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
25c50 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65  e $mixedFileName 25c60 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 25c70 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 25c80 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
25c90 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..
25ca0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
25cb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
25cc0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
25cd0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
25ce0 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 6d  eleteSqliteNonIm
25cf0 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74  plicitFiles)]} t
25d00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
25d10 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
25d20 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65  o exists ::no(de
25d30 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66 6f  leteSqlitePlatfo
25d40 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a  rmFiles)] && \..
25d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25d60 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
25d70 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20  th $platform] > 25d80 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 25d90 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 25da0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d each fileName$m
25db0 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  ixedFileNames {.
25dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
25dd0 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73       tryDeleteAs
25de0 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65  sembly $fileName 25df0 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20$platform..
25e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
25e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
25e20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
25e30 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
25e40 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c   exists ::no(del
25e50 65 74 65 53 71 6c 69 74 65 41 72 63 68 69 74 65  eteSqliteArchite
25e60 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20  ctureFiles)] &&
25e70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
25e80 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
25e90 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74  ength $architect 25ea0 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ure] > 0} then { 25eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 25ec0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 25ed0 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e Name$mixedFileN
25ee0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
25ef0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44              tryD
25f00 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66  eleteAssembly $f 25f10 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69 74 65 ileName$archite
25f20 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20  cture..
25f30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
25f40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
25f50 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
25f60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
25f80 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
25f90 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
25fa0 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20  ManagedFiles)]}
25fb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
25fc0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
25fd0 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46  leName $managedF 25fe0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 25ff0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 26000 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 eleteAssembly$f
26010 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
26020 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
26030 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
26040 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
26050 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
26060 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72   NOTE: Check for
26070 20 74 68 65 20 22 61 75 74 6f 53 65 6c 65 63 74   the "autoSelect
26080 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e  " runtime option
26090 2e 20 20 49 66 20 70 72 65 73 65 6e 74 2c 0d 0a  .  If present,..
260a0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
260b0 20 20 61 74 74 65 6d 70 74 20 74 6f 20 61 75 74    attempt to aut
260c0 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65 63  omatically selec
260d0 74 20 74 68 65 20 66 69 72 73 74 20 61 76 61 69  t the first avai
260e0 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  lable..
260f0 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 28   #       build (
26100 6f 72 20 22 72 65 6c 65 61 73 65 22 29 20 6f 66  or "release") of
26110 20 53 51 4c 69 74 65 20 61 6e 64 20 53 79 73 74   SQLite and Syst
26120 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a  em.Data.SQLite..
26130 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
26140 20 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 74    for use with t
26150 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a  he test suite...
26160 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
26170 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52         if {[hasR
26180 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61 75 74  untimeOption aut
26190 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e 20 7b  oSelect]} then {
261a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
261b0 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69   {![checkForSQLi
261c0 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74  teBuilds $::test 261d0 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 _channel true]} 261e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 261f0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 26200 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a LiteReleases$::
26210 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75  test_channel tru
26220 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
26230 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
26240 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
26250 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
26260 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 76  Skip trying to v
26270 65 72 69 66 79 20 74 68 65 20 62 75 69 6c 64 20  erify the build
26280 64 69 72 65 63 74 6f 72 79 20 69 66 20 69 6e 73  directory if ins
26290 74 72 75 63 74 65 64 3b 0d 0a 20 20 20 20 20 20  tructed;..
262a0 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 68 65      #       othe
262b0 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65  rwise, make sure
262c0 20 69 74 20 61 63 74 75 61 6c 6c 79 20 65 78 69   it actually exi
262d0 73 74 73 20 6f 72 20 68 61 6c 74 20 74 68 65 20  sts or halt the
262e0 65 6e 74 69 72 65 0d 0a 20 20 20 20 20 20 20 20  entire..
262f0 20 20 23 20 20 20 20 20 20 20 74 65 73 74 69 6e    #       testin
26300 67 20 70 72 6f 63 65 73 73 20 69 66 20 69 74 20  g process if it
26310 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d  does not exist..
26320 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
26330 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
26340 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 76  fo exists ::no(v
26350 65 72 69 66 79 42 75 69 6c 64 44 69 72 65 63 74  erifyBuildDirect
26360 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ory)]} then {..
26370 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
26380 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
26390 3a 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c  : At this point,
263a0 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
263b0 74 6f 72 79 20 4d 55 53 54 20 65 78 69 73 74 20  tory MUST exist
263c0 61 73 20 61 0d 0a 20 20 20 20 20 20 20 20 20 20  as a..
263d0 20 20 23 20 20 20 20 20 20 20 76 61 6c 69 64 20    #       valid
263e0 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68  directory for th
263f0 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73  e testing proces
26400 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a  s to continue...
26410 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
26420 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64             set d
26430 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75 69  irectory [getBui
26440 6c 64 44 69 72 65 63 74 6f 72 79 20 66 61 6c 73  ldDirectory fals
26450 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e]....
26460 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
26470 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d 20  sts $directory] 26480 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 || \.. 26490 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 64 ![file isd 264a0 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 irectory$direct
264b0 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
264c0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
264d0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
264e0 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72 20  OTE: Just prior
264f0 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c 74  to actually halt
26500 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20  ing the testing
26510 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20 20  process,..
26520 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
26530 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f 20  add an error to
26540 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c  the test log fil
26550 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...
26560 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
26570 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 26580 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 26590 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 265a0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 265b0 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 could not verify 265c0 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 build directory 265d0 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 \""$directory
265e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
265f0 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65       "\", all te
26600 73 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e 22 5d  sting halted\n"]
26610 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
26620 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
26630 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 73 69     # NOTE: Raisi
26640 6e 67 20 61 20 73 63 72 69 70 74 20 65 72 72 6f  ng a script erro
26650 72 20 66 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e  r from this poin
26660 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d 0a 20  t should halt..
26670 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
26680 20 20 20 20 20 74 68 65 20 74 65 73 74 69 6e 67       the testing
26690 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20   process...
266a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
266b0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error
266c0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
266d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
266e0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69   "could not veri
266f0 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f  fy build directo
26700 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72  ry \"" $director 26710 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 26720 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 "\", all 26730 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 5d testing halted"] 26740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 26750 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 26760 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 26770 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 26780 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f kip trying to co 26790 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 py any files if 267a0 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 instructed... 267b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 267c0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 267d0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 267e0 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 qliteFiles)]} th 267f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 26800 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 26810 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 26820 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d iteConfigFiles)] 26830 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 26840 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
26850 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d  :test_channel \.
26860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
26870 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67     "---- copying
26880 20 5c 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   \"configuration
26890 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a  \" files...\n"..
268a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
268b0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
268c0 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65   $configFileName 268d0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 268e0 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c tryCopyBuil 268f0 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 dFile$fileName
26900 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  false..
26910 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
26920 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
26930 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
26940 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79  exists ::no(copy
26950 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69  SqliteExternalFi
26960 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
26970 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
26980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
26990 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 4d  NOTE: Copy the M
269a0 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67  anaged Debugging
269b0 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41   Assistants (MDA
269c0 29 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d  ) configuration.
269d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
269e0 20 20 20 20 20 20 20 66 69 6c 65 20 66 6f 72 20         file for
269f0 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 20  the Eagle shell
26a00 74 6f 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74  to the build out
26a10 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  put directory,..
26a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
26a30 20 20 20 20 20 20 77 68 69 6c 65 20 75 73 69 6e        while usin
26a40 67 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e 61  g each of the na
26a50 6d 65 73 20 6f 66 20 74 68 65 20 76 61 72 69 6f  mes of the vario
26a60 75 73 20 6c 65 67 61 63 79 20 74 65 73 74 0d 0a  us legacy test..
26a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
26a80 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c 65        executable
26a90 73 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 68 65  s.  This will he
26aa0 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  lp to make sure
26ab0 74 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a 20 20  that all the..
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
26ad0 20 20 20 20 6c 65 67 61 63 79 20 74 65 73 74 73      legacy tests
26ae0 20 72 75 6e 20 77 69 74 68 20 65 78 61 63 74 6c   run with exactl
26af0 79 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f  y the same set o
26b00 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20  f Managed..
26b10 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
26b20 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73   Debugging Assis
26b30 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 65 64  tants configured
26b40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
26b50 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
26b60 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 26b70 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 26b80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 26b90 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 4d 44 41 -- copying \"MDA 26ba0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 configuration\" 26bb0 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a files...\n".... 26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 26bd0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
26be0 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d  mdaConfigFileNam
26bf0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
26c00 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e        tryCopyBin
26c10 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65  aryFile EagleShe
26c20 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  ll.exe.mda.confi
26c30 67 20 74 72 75 65 20 22 22 20 24 66 69 6c 65 4e  g true "" $fileN 26c40 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ame.. 26c50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 26c60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 26c70 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 26c80 6f 70 79 20 74 68 65 20 65 78 74 65 72 6e 61 6c opy the external 26c90 20 62 69 6e 61 72 69 65 73 2c 20 69 66 20 61 6e binaries, if an 26ca0 79 2c 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 y, to the direct 26cb0 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 20 20 20 ory that.. 26cc0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 26cd0 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 45 61 67 contains the Eag 26ce0 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 69 73 20 le shell. This 26cf0 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75 73 65 is typically use 26d00 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 20 20 d to make.. 26d10 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 26d20 20 73 75 72 65 20 61 73 73 65 6d 62 6c 69 65 73 sure assemblies 26d30 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 referenced by t 26d40 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 20 74 65 he ones being te 26d50 73 74 65 64 20 61 72 65 0d 0a 20 20 20 20 20 20 sted are.. 26d60 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 26d70 61 76 61 69 6c 61 62 6c 65 20 64 75 72 69 6e 67 available during 26d80 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f the testing pro 26d90 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 cess... 26da0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 26db0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
26dc0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  est_channel "---
26dd0 2d 20 63 6f 70 79 69 6e 67 20 5c 22 65 78 74 65  - copying \"exte
26de0 72 6e 61 6c 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c  rnal\" files...\
26df0 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n"....
26e00 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
26e10 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69  Name $externalFi 26e20 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 26e30 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 26e40 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 24 pyExternalFile$
26e50 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..
26e60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
26e70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
26e80 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
26e90 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
26ea0 6f 70 79 53 71 6c 69 74 65 4e 61 74 69 76 65 46  opySqliteNativeF
26eb0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
26ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
26ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
26ee0 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 65   NOTE: If the te
26ef0 73 74 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6c  st platform is l
26f00 69 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c  ikely the defaul
26f10 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20  t for this..
26f20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
26f30 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c 73 6f 20    machine, also
26f40 74 72 79 20 74 6f 20 63 6f 70 79 20 74 68 65 20  try to copy the
26f50 6e 61 74 69 76 65 20 66 69 6c 65 73 20 74 6f 20  native files to
26f60 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..
26f70 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72     #       binar
26f80 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 20 20  y location...
26f90 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
26fb0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
26fc0 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70  no(copySqliteImp
26fd0 6c 69 63 69 74 4e 61 74 69 76 65 46 69 6c 65 73  licitNativeFiles
26fe0 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  )] && \..
26ff0 20 20 20 20 20 20 20 20 20 20 20 5b 69 73 44 65             [isDe
27000 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f  faultBuildPlatfo
27010 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  rm]} then {..
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
27030 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 27040 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 27050 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 27060 63 6f 70 79 69 6e 67 20 69 6d 70 6c 69 63 69 74 copying implicit 27070 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c 65 \"native\" file 27080 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 s...\n".... 27090 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 270a0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 ch fileName$nat
270b0 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  iveFileNames {..
270c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
270d0 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c    tryCopyAssembl
270e0 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73  y $fileName fals 270f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 27100 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 27110 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 27120 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 27130 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 27140 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 pySqliteNonImpli 27150 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e citFiles)]} then 27160 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 27170 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 27180 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 27190 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c qlitePlatformFil 271a0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 271b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 271c0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 string length$p
271d0 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68  latform] > 0} th
271e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
271f0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 27200 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 27210 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 27220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27230 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 "---- copying 27240 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c 65 \"native\" file 27250 73 20 66 6f 72 20 70 6c 61 74 66 6f 72 6d 20 5c s for platform \ 27260 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 27270 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61$pla
27280 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a  tform \"...\n]..
27290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
272a0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
272b0 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 272c0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 272d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 272e0 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 CopyAssembly$fi
272f0 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 70 6c  leName false $pl 27300 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 atform.. 27310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 27320 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 27330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27340 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 27350 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 27360 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46 iteArchitectureF 27370 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 iles)] && \.. 27380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27390 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 273a0 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e$architecture] >
273b0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
273c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
273d0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 273e0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 273f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 27400 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 27410 6f 70 79 69 6e 67 20 5c 22 6e 61 74 69 76 65 5c opying \"native\ 27420 22 20 66 69 6c 65 73 20 66 6f 72 20 61 72 63 68 " files for arch 27430 69 74 65 63 74 75 72 65 20 5c 22 22 20 5c 0d 0a itecture \"" \.. 27440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27450 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74$architect
27460 75 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a  ure \"...\n]....
27470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27480 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
27490 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61  me $nativeFileNa 274a0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 274b0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 274c0 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 pyAssembly$file
274d0 4e 61 6d 65 20 66 61 6c 73 65 20 24 61 72 63 68  Name false $arch 274e0 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 itecture.. 274f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 27500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 27510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27520 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 27530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 27540 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 27550 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 27560 65 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d 20 74 eMixedFiles)]} t 27570 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 27580 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 27590 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 275a0 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 the "native" ru 275b0 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 ntime option is 275c0 73 65 74 2c 20 63 6f 70 79 20 69 6d 70 6c 69 63 set, copy implic 275d0 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 it.. 275e0 20 20 23 20 20 20 20 20 20 20 6d 69 78 65 64 2d # mixed- 275f0 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66 69 mode assembly fi 27600 6c 65 73 20 61 73 20 77 65 6c 6c 2e 20 20 54 68 les as well. Th 27610 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e e runtime option 27620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27630 23 20 20 20 20 20 20 20 63 68 65 63 6b 20 69 73 # check is 27640 20 68 61 6e 64 6c 65 64 20 77 68 65 6e 20 62 75 handled when bu 27650 69 6c 64 69 6e 67 20 74 68 65 20 6c 69 73 74 20 ilding the list 27660 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 65 0d 0a 20 of mixed-mode.. 27670 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 27680 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 66 69 assembly fi 27690 6c 65 20 6e 61 6d 65 73 2e 0d 0a 20 20 20 20 20 le names... 276a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 276b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 276c0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 276d0 28 63 6f 70 79 53 71 6c 69 74 65 49 6d 70 6c 69 (copySqliteImpli 276e0 63 69 74 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d citMixedFiles)]} 276f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 27700 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
27710 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
27720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
27730 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79        "---- copy
27740 69 6e 67 20 69 6d 70 6c 69 63 69 74 20 5c 22 6d  ing implicit \"m
27750 69 78 65 64 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c  ixed\" files...\
27760 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n"....
27770 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
27780 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c  leName $mixedFil 27790 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 277a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 tryC 277b0 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c opyAssembly$fil
277c0 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20 20 20  eName false..
277d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
277e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
277f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
27800 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
27810 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
27820 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c  teNonImplicitFil
27830 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
27840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
27850 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
27860 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 50  ::no(copySqliteP
27870 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26  latformFiles)] &
27880 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
27890 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
278a0 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72   length $platfor 278b0 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a m] > 0} then {.. 278c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 278d0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
278e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
278f0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
27900 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
27910 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6d 69 78  -- copying \"mix
27920 65 64 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 70  ed\" files for p
27930 6c 61 74 66 6f 72 6d 20 5c 22 22 20 5c 0d 0a 20  latform \"" \..
27940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27950 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c       $platform \ 27960 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 "...\n].... 27970 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 27980 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d each fileName$m
27990 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  ixedFileNames {.
279a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
279b0 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
279c0 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66  mbly $fileName f 279d0 61 6c 73 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a alse$platform..
279e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
279f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
27a00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
27a10 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
27a20 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
27a30 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68 69  (copySqliteArchi
27a40 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26  tectureFiles)] &
27a50 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
27a60 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
27a70 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65   length $archite 27a80 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e cture] > 0} then 27a90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 27aa0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
27ab0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
27ac0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27ae0 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c   "---- copying \
27af0 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 20 66  "mixed\" files f
27b00 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65 20  or architecture
27b10 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
27b20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72               $ar 27b30 63 68 69 74 65 63 74 75 72 65 20 5c 22 2e 2e 2e chitecture \"... 27b40 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 \n].... 27b50 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 27b60 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 fileName$mixed
27b70 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
27b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27b90 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79   tryCopyAssembly
27ba0 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65   $fileName false 27bb0 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a$architecture..
27bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27bd0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
27be0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
27bf0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
27c00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
27c10 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
27c20 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
27c30 79 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 69  ySqliteManagedFi
27c40 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
27c50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
27c60 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 27c70 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 el "---- copying 27c80 20 5c 22 6d 61 6e 61 67 65 64 5c 22 20 66 69 6c \"managed\" fil 27c90 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 es...\n".... 27ca0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 27cb0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 h fileName$mana
27cc0 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  gedFileNames {..
27cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27ce0 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20  tryCopyAssembly
27cf0 24 66 69 6c 65 4e 61 6d 65 20 74 72 75 65 0d 0a  $fileName true.. 27d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 27d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 27d20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 27d30 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 27d40 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 27d50 69 70 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f 61 ip trying to loa 27d60 64 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 d any files if i 27d70 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 27d80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 27d90 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 27da0 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 ists ::no(loadSq 27db0 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 liteFiles)]} the 27dc0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 27dd0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 27de0 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 ts ::no(loadSqli 27df0 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 teImplicitFiles) 27e00 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 27e10 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 tryLoad 27e20 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e Assembly System. 27e30 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d Data.SQLite.dll. 27e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 27e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 27e60 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 27e70 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4c ::no(loadSqliteL 27e80 69 6e 71 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e inqFiles)]} then 27e90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 27ea0 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c tryLoadAssembl 27eb0 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 27ec0 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 Lite.Linq.dll.. 27ed0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 27ee0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 27ef0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 27f00 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 45 66 36 no(loadSqliteEf6 27f10 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 27f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 27f30 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 ryLoadAssembly S 27f40 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 27f50 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 20 20 20 e.EF6.dll.. 27f60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 27f70 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 27f80 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c fo exists ::no(l 27f90 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c oadSqliteNonImpl 27fa0 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 icitFiles)]} the 27fb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 27fc0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 27fd0 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 ists ::no(loadSq 27fe0 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 litePlatformFile 27ff0 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 28000 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 28010 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 ing length$plat
28020 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20  form] > 0} then
28030 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
28040 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62     tryLoadAssemb
28050 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ly System.Data.S
28060 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66  QLite.dll $platf 28070 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 orm.. 28080 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 28090 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 280a0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 exists ::no(loa 280b0 64 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 dSqliteArchitect 280c0 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d ureFiles)] && \. 280d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 280e0 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 280f0 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d h$architecture]
28100 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
28110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
28120 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79  yLoadAssembly Sy
28130 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
28140 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75  .dll $architectu 28150 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 re.. 28160 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 28170 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 28180 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 28190 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 281a0 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 69 leNameOnly$nati
281b0 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
281c0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b           catch {
281d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
281e0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 281f0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 28200 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 28210 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 "---- file ve 28220 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 66 69 rsion of \""$fi
28230 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e  leNameOnly "\"..
28240 2e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  . \"" \..
28250 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76           [file v
28260 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72  ersion [getBinar
28270 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  yFileName $fileN 28280 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d ameOnly]] \"\n]. 28290 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 282a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 282b0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 282c0 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69 ameOnly$mixedFi
282d0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
282e0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
282f0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
28300 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 28310 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 28320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 28330 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f ---- file versio 28340 6e 20 6f 66 20 5c 22 22 20 24 66 69 6c 65 4e 61 n of \""$fileNa
28350 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22  meOnly "\"... \"
28360 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
28370 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69       [file versi
28380 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  on [getBinaryFil
28390 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f  eName $fileNameO 283a0 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 nly]] \"\n].. 283b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 283c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 }.... f 283d0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f oreach fileNameO 283e0 6e 6c 79 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 nly$managedFile
283f0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
28400 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
28410 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 28420 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 28430 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 28440 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 28450 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 -- file version 28460 6f 66 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 of \""$fileName
28470 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20  Only "\"... \""
28480 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
28490 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e     [file version
284a0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
284b0 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c  ame $fileNameOnl 284c0 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 y]] \"\n].. 284d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 284e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 284f0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 28500 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20$platform] > 0}
28510 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
28520 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
28530 6d 65 4f 6e 6c 79 20 24 6e 61 74 69 76 65 46 69  meOnly $nativeFi 28540 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 28550 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 28560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 28570 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
28580 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
28590 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
285a0 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
285b0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24  version of \"" $285c0 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 platform \.. 285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 / 285e0 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c$fileNameOnly "\
285f0 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76  "... \"" [file v
28600 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20  ersion \..
28610 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
28620 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $28630 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 70 6c fileNameOnly$pl
28640 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a  atform]] \"\n]..
28650 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
28660 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
28670 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
28680 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69  fileNameOnly $mi 28690 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a xedFileNames {.. 286a0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 catc 286b0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 286c0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
286d0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
286e0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
286f0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
28700 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  file version of
28710 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d  \"" $platform \. 28720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 28730 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e /$fileNameOn
28740 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66  ly "\"... \"" [f
28750 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20  ile version \..
28760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28770 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
28780 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c  ame $fileNameOnl 28790 79 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 y$platform]] \"
287a0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
287b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
287c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
287d0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
287e0 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 287f0 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 28800 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 n {.. f 28810 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f oreach fileNameO 28820 6e 6c 79 20 24 6e 61 74 69 76 65 46 69 6c 65 4e nly$nativeFileN
28830 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
28840 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
28850 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
28860 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 28870 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 28880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28890 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 288a0 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 sion of \""$arc
288b0 68 69 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20  hitecture \..
288c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
288d0 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22   $fileNameOnly " 288e0 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 \"... \"" [file 288f0 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 version \.. 28900 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 28910 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 28920 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 61$fileNameOnly $a 28930 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 22 rchitecture]] \" 28940 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 28950 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 28960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 ... for 28970 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c each fileNameOnl 28980 79 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 y$mixedFileName
28990 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
289a0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
289b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 289c0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 289d0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 289e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 289f0 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f ---- file versio 28a00 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 n of \""$archit
28a10 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20  ecture \..
28a20 20 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 66              / $f 28a30 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e ileNameOnly "\". 28a40 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 .. \"" [file ver 28a50 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 sion \.. 28a60 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 [getBi 28a70 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
28a80 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 61 72 63 68  leNameOnly $arch 28a90 69 74 65 63 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d itecture]] \"\n] 28aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 28ab0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 28ac0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 28ad0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 28ae0 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6c NOTE: Grab the l 28af0 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 61 ist of managed a 28b00 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 20 74 68 ssemblies for th 28b10 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 e current proces 28b20 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 28b30 20 20 20 61 6e 64 20 72 65 70 6f 72 74 20 6f 6e and report on 28b40 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 the System.Data 28b50 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 .SQLite related 28b60 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ones... # 28b70 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 .. if {[h 28b80 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 aveSQLiteObjectC 28b90 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d ommand]} then {. 28ba0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 61 . set a 28bb0 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63 ssemblies [objec 28bc0 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61 t invoke AppDoma 28bd0 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e in.CurrentDomain 28be0 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d GetAssemblies]. 28bf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a ... obj 28c00 65 63 74 20 66 6f 72 65 61 63 68 20 61 73 73 65 ect foreach asse 28c10 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 73 mbly$assemblies
28c20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
28c30 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63  if {[string matc
28c40 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e  h \{System.Data.
28c50 53 51 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c  SQLite* $assembl 28c60 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 28c70 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 28c80 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
28c90 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
28ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28cb0 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61   "---- found loa
28cc0 64 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20  ded assembly: "
28cd0 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20  $assembly \n].. 28ce0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 28cf0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 28d00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 28d10 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 28d20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
28d30 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
28d40 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
28d50 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73  define constants
28d60 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44 61   for \"System.Da
28d70 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20 22  ta.SQLite\"... "
28d80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
28d90 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
28da0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
28db0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
28dc0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
28dd0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
28de0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
28df0 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73  Lite3 DefineCons
28e00 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20  tants..
28e10 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e   } defineConstan
28e20 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ts] == 0} then {
28e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
28e40 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 28e50 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 28e60 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f [formatList [lso 28e70 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 rt \.. 28e80 20 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f 6e$defineCon
28e90 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d 20  stants] <none>]
28ea0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
28eb0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
28ec0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 28ed0 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f st_channel unkno 28ee0 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 wn\n.. 28ef0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 28f00 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 28f10 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 28f20 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
28f30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
28f40 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 76    "---- source v
28f50 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74  ersion of \"Syst
28f60 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
28f70 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  ll\"... "....
28f80 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
28f90 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
28fa0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
28fb0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
28fc0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
28fd0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
28fe0 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e  SQLite.SQLiteCon
28ff0 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72  nection Provider
29000 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  Version..
29010 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d     } version] ==
29020 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
29030 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
29040 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73  ing length $vers 29050 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ion] == 0} then 29060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 29070 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c set version nul 29080 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d l.. } 29090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 290a0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
290b0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
290c0 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20  $version \n].. 290d0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 290e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 290f0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
29100 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20  nel unknown\n..
29110 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
29120 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
29130 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
29140 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 29150 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 t_channel \.. 29160 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 29170 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74 source checkout 29180 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 of \"System.Dat 29190 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e a.SQLite.dll\".. 291a0 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 . ".... 291b0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 291c0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 291d0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 291e0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 291f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 29200 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 29210 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f .SQLiteConnectio 29220 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 65 n ProviderSource 29230 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 Id.. } 29240 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 sourceId] == 0} 29250 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 29260 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 29270 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 length$sourceId
29280 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
29290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
292a0 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d  t sourceId null.
292b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
292c0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
292d0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 292e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 73 l [appendArgs$s
292f0 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20 20  ourceId \n]..
29300 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
29310 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
29320 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 29330 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 el unknown\n.. 29340 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 29350 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 29360 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 29370 45 3a 20 52 65 73 65 74 20 63 61 63 68 65 64 20 E: Reset cached 29380 22 62 72 65 61 6b 20 69 6e 74 6f 20 64 65 62 75 "break into debu 29390 67 67 65 72 22 20 73 65 74 74 69 6e 67 20 73 6f gger" setting so 293a0 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65 0d that it can be. 293b0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 293c0 20 75 73 65 64 20 64 75 72 69 6e 67 20 74 68 65 used during the 293d0 20 74 65 73 74 20 66 69 6c 65 2c 20 69 66 20 6e test file, if n 293e0 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 eeded... 293f0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 29400 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 29410 6f 28 72 65 73 65 74 42 72 65 61 6b 49 6e 74 6f o(resetBreakInto 29420 44 65 62 75 67 67 65 72 29 5d 20 26 26 20 5c 0d Debugger)] && \. 29430 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 68 61 . [ha 29440 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo 29450 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a mmand]} then {.. 29460 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 29470 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 29480 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 29490 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 294a0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 294b0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 294c0 74 61 2e 53 51 4c 69 74 65 2e 48 65 6c 70 65 72 ta.SQLite.Helper 294d0 4d 65 74 68 6f 64 73 20 52 65 73 65 74 42 72 65 Methods ResetBre 294e0 61 6b 49 6e 74 6f 44 65 62 75 67 67 65 72 0d 0a akIntoDebugger.. 294f0 20 20 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 } resu 29500 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b lt] == 0} then { 29510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 29520 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
29530 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
29540 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
29550 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 52 65     "---- call Re
29560 73 65 74 42 72 65 61 6b 49 6e 74 6f 44 65 62 75  setBreakIntoDebu
29570 67 67 65 72 28 29 2e 2e 2e 20 6f 6b 5c 6e 22 5d  gger()... ok\n"]
29580 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
29590 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
295a0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 295b0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 295c0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 295d0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c "---- cal 295e0 6c 20 52 65 73 65 74 42 72 65 61 6b 49 6e 74 6f l ResetBreakInto 295f0 44 65 62 75 67 67 65 72 28 29 2e 2e 2e 20 65 72 Debugger()... er 29600 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 ror: " \.. 29610 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 \n\t$
29620 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
29630 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
29640 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
29650 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
29660 20 43 68 65 63 6b 20 74 68 65 20 61 76 61 69 6c   Check the avail
29670 61 62 6c 65 20 62 75 69 6c 64 73 20 28 61 6e 64  able builds (and
29680 20 22 72 65 6c 65 61 73 65 73 22 29 20 6f 66 20   "releases") of
29690 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 20 20 20  SQLite and..
296a0 20 20 20 20 23 20 20 20 20 20 20 20 53 79 73 74      #       Syst
296b0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d  em.Data.SQLite..
296c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
296d0 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
296e0 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74  teBuilds $::test 296f0 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 _channel.. 29700 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 checkForSQLite 29710 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 74 Releases$::test
29720 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
29730 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
29740 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 20 6e   NOTE: Now, we n
29750 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 66 20 74  eed to know if t
29760 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
29770 69 62 72 61 72 79 20 69 73 20 61 76 61 69 6c 61  ibrary is availa
29780 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ble..        #
29790 20 20 20 20 20 28 69 2e 65 2e 20 62 65 63 61 75       (i.e. becau
297a0 73 65 20 74 68 65 20 6d 61 6e 61 67 65 64 2d 6f  se the managed-o
297b0 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  nly System.Data.
297c0 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 20  SQLite assembly
297d0 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  can..        #
297e0 20 20 20 20 20 6c 6f 61 64 20 77 69 74 68 6f 75       load withou
297f0 74 20 69 74 3b 20 68 6f 77 65 76 65 72 2c 20 69  t it; however, i
29800 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 6e 79 74  t cannot do anyt
29810 68 69 6e 67 20 75 73 65 66 75 6c 20 77 69 74 68  hing useful with
29820 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  out..        #
29830 20 20 20 20 20 69 74 29 2e 20 20 49 66 20 77 65       it).  If we
29840 20 61 72 65 20 75 73 69 6e 67 20 74 68 65 20 6d   are using the m
29850 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
29860 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 65 61 64  ly and we alread
29870 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
29880 20 20 20 66 6f 75 6e 64 20 69 74 20 28 61 62 6f     found it (abo
29890 76 65 29 2c 20 74 68 69 73 20 73 68 6f 75 6c 64  ve), this should
298a0 20 61 6c 77 61 79 73 20 73 75 63 63 65 65 64 2e   always succeed.
298b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
298c0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
298d0 69 74 65 4c 69 62 72 61 72 79 20 24 3a 3a 74 65  iteLibrary $::te 298e0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 298f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 29900 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i 29910 66 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 f the SQLite int 29920 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 73 erop assembly is 29930 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 available... 29940 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 29950 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e checkForSQLiteIn 29960 74 65 72 6f 70 20 24 3a 3a 74 65 73 74 5f 63 68 terop$::test_ch
29970 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  annel....
29980 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
29990 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 53 51  TE: Check the SQ
299a0 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 61 6e  Lite database an
299b0 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  d temporary dire
299c0 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 20 20 20  ctories...
299d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65    #..        che
299e0 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63  ckForSQLiteDirec
299f0 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63  tories $::test_c 29a00 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 hannel.... 29a10 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 29a20 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 29a30 64 65 74 65 72 6d 69 6e 65 20 69 66 20 76 61 72 determine if var 29a40 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d ious compile-tim 29a50 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64 65 64 e options needed 29a60 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 for.. # 29a70 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 73 74 test const 29a80 72 61 69 6e 74 73 20 77 65 72 65 20 65 6e 61 62 raints were enab 29a90 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 led for the mana 29aa0 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 20 20 54 ged assembly. T 29ab0 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 here.. # 29ac0 20 20 20 20 20 20 61 72 65 20 73 6f 6d 65 20 63 are some c 29ad0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 ompile-time opti 29ae0 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 20 61 6c ons that must al 29af0 73 6f 20 68 61 76 65 20 62 65 65 6e 20 65 6e 61 so have been ena 29b00 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 bled.. # 29b10 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 69 6e for the in 29b20 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 terop assembly i 29b30 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 65 66 n order to be ef 29b40 66 65 63 74 69 76 65 2e 20 20 46 6f 72 20 74 68 fective. For th 29b50 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ose.. # 29b60 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c 20 69 74 options, it 29b70 20 77 69 6c 6c 20 62 65 20 61 73 73 75 6d 65 64 will be assumed 29b80 20 74 68 61 74 20 69 74 20 77 61 73 20 65 6e 61 that it was ena 29b90 62 6c 65 64 20 66 6f 72 20 74 68 65 20 69 6e 74 bled for the int 29ba0 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 23 20 erop.. # 29bb0 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 69 assembly i 29bc0 66 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65 64 f it was enabled 29bd0 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 64 for the managed 29be0 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 assembly... 29bf0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 #.. f 29c00 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43 6f 6e oreach defineCon 29c10 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 stant [list \.. 29c20 20 20 20 20 20 20 20 20 20 20 20 43 48 45 43 4b CHECK 29c30 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f 48 41 4e _STATE COUNT_HAN 29c40 44 4c 45 20 44 45 42 55 47 20 49 4e 54 45 52 4f DLE DEBUG INTERO 29c50 50 5f 43 4f 44 45 43 20 49 4e 54 45 52 4f 50 5f P_CODEC INTEROP_ 29c60 44 45 42 55 47 20 5c 0d 0a 20 20 20 20 20 20 20 DEBUG \.. 29c70 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 INTEROP_EXT 29c80 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 ENSION_FUNCTIONS 29c90 20 49 4e 54 45 52 4f 50 5f 46 54 53 35 5f 45 58 INTEROP_FTS5_EX 29ca0 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 TENSION \.. 29cb0 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 49 INTEROP_I 29cc0 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20 49 4e 54 NCLUDE_CEROD INT 29cd0 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 45 58 54 EROP_INCLUDE_EXT 29ce0 52 41 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 RA INTEROP_INCLU 29cf0 44 45 5f 53 45 45 20 5c 0d 0a 20 20 20 20 20 20 DE_SEE \.. 29d00 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 49 4e INTEROP_IN 29d10 43 4c 55 44 45 5f 5a 49 50 56 46 53 20 49 4e 54 CLUDE_ZIPVFS INT 29d20 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e EROP_JSON1_EXTEN 29d30 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 SION \.. 29d40 20 20 20 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41 INTEROP_LEGA 29d50 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45 52 4f 50 CY_CLOSE INTEROP 29d60 5f 4c 4f 47 20 49 4e 54 45 52 4f 50 5f 50 45 52 _LOG INTEROP_PER 29d70 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f CENTILE_EXTENSIO 29d80 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 N \.. 29d90 20 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 50 5f INTEROP_REGEXP_ 29da0 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f EXTENSION INTERO 29db0 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e 53 P_SESSION_EXTENS 29dc0 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ION \.. 29dd0 20 20 20 49 4e 54 45 52 4f 50 5f 53 48 41 31 5f INTEROP_SHA1_ 29de0 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f EXTENSION INTERO 29df0 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e P_TEST_EXTENSION 29e00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 29e10 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45 INTEROP_TOTYPE_E 29e20 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 XTENSION INTEROP 29e30 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 5c _VIRTUAL_TABLE \ 29e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 .. NE 29e50 54 5f 32 30 20 4e 45 54 5f 33 35 20 4e 45 54 5f T_20 NET_35 NET_ 29e60 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 5f 34 35 40 NET_45 NET_45 29e70 31 20 4e 45 54 5f 34 35 32 20 4e 45 54 5f 34 36 1 NET_452 NET_46 29e80 20 4e 45 54 5f 34 36 31 20 5c 0d 0a 20 20 20 20 NET_461 \.. 29e90 20 20 20 20 20 20 20 20 4e 45 54 5f 34 36 32 20 NET_462 29ea0 4e 45 54 5f 34 37 20 4e 45 54 5f 34 37 31 20 4e NET_47 NET_471 N 29eb0 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 50 4c ET_COMPACT_20 PL 29ec0 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 ATFORM_COMPACTFR 29ed0 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20 20 20 20 20 AMEWORK \.. 29ee0 20 20 20 20 20 20 20 50 52 45 4c 4f 41 44 5f 4e PRELOAD_N 29ef0 41 54 49 56 45 5f 4c 49 42 52 41 52 59 20 52 45 ATIVE_LIBRARY RE 29f00 54 41 52 47 45 54 41 42 4c 45 20 53 51 4c 49 54 TARGETABLE SQLIT 29f10 45 5f 53 54 41 4e 44 41 52 44 20 5c 0d 0a 20 20 E_STANDARD \.. 29f20 20 20 20 20 20 20 20 20 20 20 54 48 52 4f 57 5f THROW_ 29f30 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54 52 41 43 ON_DISPOSED TRAC 29f40 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 E TRACE_CONNECTI 29f50 4f 4e 20 54 52 41 43 45 5f 44 45 54 45 43 54 49 ON TRACE_DETECTI 29f60 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ON \.. 29f70 20 20 54 52 41 43 45 5f 48 41 4e 44 4c 45 20 54 TRACE_HANDLE T 29f80 52 41 43 45 5f 50 52 45 4c 4f 41 44 20 54 52 41 RACE_PRELOAD TRA 29f90 43 45 5f 53 48 41 52 45 44 20 54 52 41 43 45 5f CE_SHARED TRACE_ 29fa0 53 54 41 54 45 4d 45 4e 54 20 5c 0d 0a 20 20 20 STATEMENT \.. 29fb0 20 20 20 20 20 20 20 20 20 54 52 41 43 45 5f 57 TRACE_W 29fc0 41 52 4e 49 4e 47 20 54 52 41 43 4b 5f 4d 45 4d ARNING TRACK_MEM 29fd0 4f 52 59 5f 42 59 54 45 53 20 55 53 45 5f 45 4e ORY_BYTES USE_EN 29fe0 54 49 54 59 5f 46 52 41 4d 45 57 4f 52 4b 5f 36 TITY_FRAMEWORK_6 29ff0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2a000 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 USE_INTEROP_DLL 2a010 55 53 45 5f 50 52 45 50 41 52 45 5f 56 32 20 57 USE_PREPARE_V2 W 2a020 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 20 20 20 INDOWS] {.. 2a030 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2a040 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 2a050 69 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 if the compile-t 2a060 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69 ime option is li 2a070 73 74 65 64 20 69 6e 20 74 68 65 20 6c 69 73 74 sted in the list 2a080 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 23 of.. # 2a090 20 20 20 20 20 20 20 22 64 65 66 69 6e 65 20 63 "define c 2a0a0 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70 74 20 74 onstants" kept t 2a0b0 72 61 63 6b 20 6f 66 20 62 79 20 74 68 65 20 6d rack of by the m 2a0c0 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e anaged assembly. 2a0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 2a0e0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 2a0f0 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e rSQLiteDefineCon 2a100 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 stant$::test_ch
2a110 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65 43 6f 6e  annel $defineCon 2a120 73 74 61 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d stant.. } 2a130 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 2a140 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 2a150 68 65 63 6b 20 69 66 20 74 68 65 20 53 79 73 74 heck if the Syst 2a160 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 70 em.Data.SQLite p 2a170 72 6f 76 69 64 65 72 20 77 61 73 20 63 6f 6d 70 rovider was comp 2a180 69 6c 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 iled with.. 2a190 20 20 20 23 20 20 20 20 20 20 20 73 75 70 70 6f # suppo 2a1a0 72 74 20 66 6f 72 20 61 6e 79 20 65 6e 63 72 79 rt for any encry 2a1b0 70 74 65 64 20 64 61 74 61 62 61 73 65 73 2e 0d pted databases.. 2a1c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2a1d0 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c if {[haveSQL 2a1e0 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e iteDefineConstan 2a1f0 74 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 5d t INTEROP_CODEC] 2a200 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 2a210 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65 [haveSQLiteDe 2a220 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54 fineConstant INT 2a230 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 EROP_INCLUDE_SEE 2a240 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2a250 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2a260 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 61 # NOTE: Yes, a 2a270 64 64 20 67 65 6e 65 72 69 63 20 63 6f 6e 73 74 dd generic const 2a280 72 61 69 6e 74 20 66 6f 72 20 75 73 65 20 62 79 raint for use by 2a290 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 2a2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 2a2b0 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 addCons 2a2c0 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 traint System.Da 2a2d0 74 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 ta.SQLite.Encryp 2a2e0 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d tion.. }. 2a2f0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 2a300 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 2a310 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 eck the current 2a320 62 75 69 6c 64 20 79 65 61 72 2e 20 20 42 61 73 build year. Bas 2a330 69 63 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 64 ically, this ind 2a340 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20 icates.. 2a350 23 20 20 20 20 20 20 20 77 68 69 63 68 20 76 65 # which ve 2a360 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 rsion of MSBuild 2a370 20 61 6e 64 2f 6f 72 20 56 69 73 75 61 6c 20 53 and/or Visual S 2a380 74 75 64 69 6f 20 77 61 73 20 75 73 65 64 20 74 tudio was used t 2a390 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 o.. # 2a3a0 20 20 20 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 compile the a 2a3b0 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 ssembly binaries 2a3c0 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 under test... 2a3d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2a3e0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2a3f0 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
2a400 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63        "---- chec
2a410 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e  king for System.
2a420 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c  Data.SQLite buil
2a430 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20  d year... "....
2a440 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20         set year
2a450 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a  [getBuildYear]..
2a460 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
2a470 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
2a480 73 20 62 75 69 6c 64 59 65 61 72 2e 20 24 79 65  s buildYear. $ye 2a490 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 ar].. tpu 2a4a0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
2a4b0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
2a4c0 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d  " $year \"\n]... 2a4d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2a4e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 2a4f0 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 k the current bu 2a500 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f ild .NET Framewo 2a510 72 6b 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 rk. Basically, 2a520 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 this.. # 2a530 20 20 20 20 20 20 69 6e 64 69 63 61 74 65 73 20 indicates 2a540 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 which version of 2a550 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 the .NET Framew 2a560 6f 72 6b 20 69 73 20 62 65 69 6e 67 0d 0a 20 20 ork is being.. 2a570 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 # us 2a580 65 64 20 62 79 20 74 68 65 20 61 73 73 65 6d 62 ed by the assemb 2a590 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 ly binaries unde 2a5a0 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 r test... 2a5b0 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 2a5c0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
2a5d0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
2a5e0 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
2a5f0 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  for System.Data.
2a600 53 51 4c 69 74 65 20 62 75 69 6c 64 20 2e 4e 45  SQLite build .NE
2a610 54 20 46 72 61 6d 65 77 6f 72 6b 2e 2e 2e 20 22  T Framework... "
2a620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
2a630 6e 65 74 46 78 20 5b 67 65 74 42 75 69 6c 64 4e  netFx [getBuildN
2a640 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 61  etFx]..        a
2a650 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  ddConstraint [ap
2a660 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 46 72  pendArgs buildFr
2a670 61 6d 65 77 6f 72 6b 2e 20 24 6e 65 74 46 78 5d  amework. $netFx] 2a680 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 2a690 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
2a6a0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24  [appendArgs \" $2a6b0 6e 65 74 46 78 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 netFx \"\n].... 2a6c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2a6d0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 2a6e0 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c the current buil 2a6f0 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e d configuration. 2a700 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 6e 6f This should no 2a710 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 rmally.. 2a720 23 20 20 20 20 20 20 20 62 65 20 65 69 74 68 65 # be eithe 2a730 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 r "Debug" or "Re 2a740 6c 65 61 73 65 22 2e 0d 0a 20 20 20 20 20 20 20 lease"... 2a750 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 2a760 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
2a770 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
2a780 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
2a790 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  for System.Data.
2a7a0 53 51 4c 69 74 65 20 62 75 69 6c 64 20 63 6f 6e  SQLite build con
2a7b0 66 69 67 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 0d  figuration... ".
2a7c0 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  ...        set c
2a7d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65  onfiguration [ge
2a7e0 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74  tBuildConfigurat
2a7f0 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 61 64  ion]..        ad
2a800 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
2a810 65 6e 64 41 72 67 73 20 62 75 69 6c 64 43 6f 6e  endArgs buildCon
2a820 66 69 67 75 72 61 74 69 6f 6e 2e 20 24 63 6f 6e  figuration. $con 2a830 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 figuration].. 2a840 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2a850 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
2a860 6e 64 41 72 67 73 20 5c 22 20 24 63 6f 6e 66 69  ndArgs \" $confi 2a870 67 75 72 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a guration \"\n].. 2a880 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2a890 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 72 79 # NOTE: Try 2a8a0 20 74 6f 20 73 65 74 75 70 20 61 6e 20 69 6e 74 to setup an int 2a8b0 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 20 errupt callback 2a8c0 75 73 69 6e 67 20 74 68 65 20 73 63 72 69 70 74 using the script 2a8d0 20 64 65 62 75 67 67 65 72 0d 0a 20 20 20 20 20 debugger.. 2a8e0 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 # that 2a8f0 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61 6c 6c 20 will cancel all 2a900 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 SQL queries in p 2a910 72 6f 67 72 65 73 73 20 66 6f 72 20 61 6c 6c 20 rogress for all 2a920 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 database.. 2a930 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 # connec 2a940 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 tions known to t 2a950 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 2e his interpreter. 2a960 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2a970 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 2a980 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 exists ::no(sqli 2a990 74 65 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 teInterruptCallb 2a9a0 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ack)]} then {.. 2a9b0 20 20 20 20 20 20 20 20 20 73 65 74 75 70 44 62 setupDb 2a9c0 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 InterruptCallbac 2a9d0 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 k$::test_channe
2a9e0 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20  l $::test_log.. 2a9f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 2aa00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2aa10 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 NOTE: Check for 2aa20 20 74 68 65 20 6e 61 74 69 76 65 20 72 75 6e 74 the native runt 2aa30 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 68 69 63 ime option, whic 2aa40 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20 77 65 20 h would mean we 2aa50 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 are.. # 2aa60 20 20 20 20 20 75 73 69 6e 67 20 74 68 65 20 6d using the m 2aa70 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 ixed-mode assemb 2aa80 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ly... #.. 2aa90 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 2aaa0 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a RuntimeOption$:
2aab0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 61  :test_channel na
2aac0 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tive....
2aad0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
2aae0 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
2aaf0 74 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c  test suite shoul
2ab00 64 20 63 6f 75 6e 74 20 74 68 65 20 6e 75 6d 62  d count the numb
2ab10 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  er of connection
2ab20 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
2ab30 20 20 20 22 6f 70 65 6e 65 64 22 20 61 6e 64 20     "opened" and
2ab40 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d 20 74 68  "closed" from th
2ab50 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64 65 74 65  e pool when dete
2ab60 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 74 65 73  rmining if a tes
2ab70 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
2ab80 20 20 20 70 61 73 73 65 64 2e 20 20 44 69 73 61     passed.  Disa
2ab90 62 6c 69 6e 67 20 74 68 69 73 20 62 65 68 61 76  bling this behav
2aba0 69 6f 72 20 69 73 20 73 6f 6d 65 74 69 6d 65 73  ior is sometimes
2abb0 20 6e 65 63 65 73 73 61 72 79 20 28 65 2e 67 2e   necessary (e.g.
2abc0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2abd0 20 20 64 75 72 69 6e 67 20 74 68 65 20 72 65 6c    during the rel
2abe0 65 61 73 65 20 74 65 73 74 69 6e 67 20 70 72 6f  ease testing pro
2abf0 63 65 73 73 29 20 62 65 63 61 75 73 65 20 74 68  cess) because th
2ac00 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 0d  ere are several.
2ac10 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2ac20 20 74 65 73 74 73 20 74 68 61 74 20 72 65 6c 79   tests that rely
2ac30 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e 65 64 20   on the "opened
2ac40 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e 74  from pool" count
2ac50 20 62 65 69 6e 67 20 67 72 65 61 74 65 72 0d 0a   being greater..
2ac60 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2ac70 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54 68 65 73  than zero.  Thes
2ac80 65 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c  e tests may fail
2ac90 20 64 75 65 20 74 6f 20 74 68 65 20 6e 6f 6e 2d   due to the non-
2aca0 64 65 74 65 72 6d 69 6e 69 73 74 69 63 0d 0a 20  deterministic..
2acb0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62         #       b
2acc0 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 43  ehavior of the C
2acd0 4c 52 20 47 43 2c 20 65 76 65 6e 20 77 68 65 6e  LR GC, even when
2ace0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 62 75 67   there is no bug
2acf0 20 69 6e 20 74 68 65 20 63 6f 64 65 0d 0a 20 20   in the code..
2ad00 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
2ad10 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a 20 20 20  ing tested...
2ad20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2ad30 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f  checkForRuntimeO
2ad40 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68  ption $::test_ch 2ad50 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75 6e annel noPoolCoun 2ad60 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d ts.... #. 2ad70 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 2ad80 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 74 65 Check if the te 2ad90 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c 64 20 st suite should 2ada0 75 73 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 use shared-cache 2adb0 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 mode... 2adc0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 2add0 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e ForRuntimeOption 2ade0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2adf0 20 73 68 61 72 65 64 43 61 63 68 65 0d 0a 0d 0a   sharedCache....
2ae00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2ae10 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72     # NOTE: Repor
2ae20 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 75  t the resource u
2ae30 73 61 67 65 20 70 72 69 6f 72 20 74 6f 20 72 75  sage prior to ru
2ae40 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73 74 73 2e  nning any tests.
2ae50 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2ae60 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74       reportSQLit
2ae70 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65  eResources $::te 2ae80 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 2ae90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2aea0 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 # NOTE: Grab th 2aeb0 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 e list of native 2aec0 20 6d 6f 64 75 6c 65 73 20 66 6f 72 20 74 68 65 modules for the 2aed0 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 current process 2aee0 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 and.. # 2aef0 20 20 20 20 20 20 72 65 70 6f 72 74 20 6f 6e 20 report on 2af00 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e the System.Data. 2af10 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 6f SQLite related o 2af20 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d nes... #. 2af30 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 . if {[ha 2af40 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo 2af50 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a mmand]} then {.. 2af60 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 6f set mo 2af70 64 75 6c 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e dules [object in 2af80 76 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 voke \.. 2af90 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 System.Dia 2afa0 67 6e 6f 73 74 69 63 73 2e 50 72 6f 63 65 73 73 gnostics.Process 2afb0 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65 .GetCurrentProce 2afc0 73 73 20 4d 6f 64 75 6c 65 73 5d 0d 0a 0d 0a 20 ss Modules].... 2afd0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 2afe0 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 6d foreach -alias m 2aff0 6f 64 75 6c 65 20 24 6d 6f 64 75 6c 65 73 20 7b odule$modules {
2b000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
2b010 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
2b020 4f 54 45 3a 20 54 68 65 20 6d 6f 64 75 6c 65 20  OTE: The module
2b030 66 69 6c 65 20 6e 61 6d 65 20 68 65 72 65 20 6d  file name here m
2b040 75 73 74 20 62 65 20 6e 6f 72 6d 61 6c 69 7a 65  ust be normalize
2b050 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...
2b060 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  #..            s
2b070 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
2b080 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 24 6d 6f  e normalize [$mo 2b090 64 75 6c 65 20 46 69 6c 65 4e 61 6d 65 5d 5d 0d dule FileName]]. 2b0a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set 2b0b0 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 66 fileNameOnly [f 2b0c0 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 ile tail$fileNa
2b0d0 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me]....
2b0e0 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20     if {[lsearch
2b0f0 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 2d  -exact -nocase -
2b100 2d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  - \..
2b110 20 20 20 20 20 5b 67 65 74 4e 61 74 69 76 65 4c       [getNativeL
2b120 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f  ibraryFileNamesO
2b130 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  nly] $fileNameOn 2b140 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 ly] != -1} then 2b150 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2b160 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2b170 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2b180 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
2b190 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f          "---- fo
2b1a0 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c 69 74  und loaded SQLit
2b1b0 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
2b1c0 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20   module: " \..
2b1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b1e0 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20  $fileName \n].. 2b1f0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 2b200 65 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 eif {[lsearch -e 2b210 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 xact -nocase -- 2b220 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2b230 20 20 20 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 [getInteropAs 2b240 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f semblyFileNamesO 2b250 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e nly]$fileNameOn
2b260 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20  ly] != -1} then
2b270 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2b280 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 2b290 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 2b2a0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 2b2b0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f "---- fo 2b2c0 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c 69 74 und loaded SQLit 2b2d0 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 e interop assemb 2b2e0 6c 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a ly module: " \.. 2b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b300 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d$fileName \n].
2b310 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2b320 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2b330 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2b340 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
2b350 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 2b360 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 2b370 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 2b380 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f - compile-time o 2b390 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74 ptions for SQLit 2b3a0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 2e e core library.. 2b3b0 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 . ".... 2b3c0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 2b3d0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 2b3e0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 2b3f0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 2b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 2b410 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 2b420 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 65 43 .SQLite3 SQLiteC 2b430 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 ompileOptions.. 2b440 20 20 20 20 20 20 20 20 20 7d 20 63 6f 6d 70 69 } compi 2b450 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d leOptions] == 0} 2b460 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2b470 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2b480 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
2b490 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69  ndArgs [formatLi
2b4a0 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20  st [lsort \..
2b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f               $co 2b4c0 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e mpileOptions] <n 2b4d0 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 one>] \n].. 2b4e0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 2b4f0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 2b500 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2b510 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20   unknown\n..
2b520 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
2b530 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61   }....        ca
2b540 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
2b550 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 2b560 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 2b570 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f "---- co 2b580 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f mpile-time optio 2b590 6e 73 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e ns for SQLite in 2b5a0 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e terop assembly.. 2b5b0 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 . ".... 2b5c0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 2b5d0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 2b5e0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 2b5f0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 2b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 2b610 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 2b620 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 6f 70 .SQLite3 Interop 2b630 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a CompileOptions.. 2b640 20 20 20 20 20 20 20 20 20 20 7d 20 63 6f 6d 70 } comp 2b650 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 ileOptions] == 0 2b660 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2b670 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
2b680 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
2b690 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c  endArgs [formatL
2b6a0 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20  ist [lsort \..
2b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 63                $c 2b6c0 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3c ompileOptions] < 2b6d0 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 none>] \n].. 2b6e0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 2b6f0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 2b700 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
2b710 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20  l unknown\n..
2b720 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
2b730 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
2b740 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
2b750 3a 20 53 68 6f 77 20 74 68 65 20 61 63 74 69 76  : Show the activ
2b760 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e  e test constrain
2b770 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ts...        #..
2b780 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 2b790 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 2b7a0 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 ppendArgs "---- 2b7b0 63 6f 6e 73 74 72 61 69 6e 74 73 3a 20 22 20 5c constraints: " \ 2b7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 2b7d0 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 ormatList [lsort 2b7e0 20 5b 67 65 74 43 6f 6e 73 74 72 61 69 6e 74 73 [getConstraints 2b7f0 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a ]] <none>] \n].. 2b800 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2b810 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 # NOTE: Sav 2b820 65 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73 74 e the test const 2b830 72 61 69 6e 74 73 20 66 6f 72 20 75 73 65 20 62 raints for use b 2b840 79 20 74 68 72 65 61 64 73 20 63 72 65 61 74 65 y threads create 2b850 64 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 d in this.. 2b860 20 20 20 23 20 20 20 20 20 20 20 61 70 70 6c 69 # appli 2b870 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2e 20 20 cation domain. 2b880 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61 72 This is necessar 2b890 79 20 62 65 63 61 75 73 65 20 61 6c 6c 20 74 68 y because all th 2b8a0 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 e Eagle.. 2b8b0 20 23 20 20 20 20 20 20 20 22 74 65 73 74 20 63 # "test c 2b8c0 6f 6e 74 65 78 74 22 20 69 6e 66 6f 72 6d 61 74 ontext" informat 2b8d0 69 6f 6e 20 69 73 20 70 65 72 2d 74 68 72 65 61 ion is per-threa 2b8e0 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 2b8f0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 2b900 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f o exists ::test_ 2b910 63 6f 6e 73 74 72 61 69 6e 74 73 5d 7d 20 74 68 constraints]} th 2b920 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2b930 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 set ::test_const 2b940 72 61 69 6e 74 73 20 24 3a 3a 65 61 67 6c 65 5f raints$::eagle_
2b950 74 65 73 74 73 28 43 6f 6e 73 74 72 61 69 6e 74  tests(Constraint
2b960 73 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  s)..        }...
2b970 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2b980 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64      # NOTE: Load
2b990 20 74 68 65 20 22 61 66 74 65 72 2d 63 6f 6e 73   the "after-cons
2b9a0 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20  traints" custom
2b9b0 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20  per-user and/or
2b9c0 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20  per-host..
2b9d0 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73    #       test s
2b9e0 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20  ettings now...
2b9f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2ba00 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74   uplevel 1 [list
2ba10 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53   loadSQLiteTestS
2ba20 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f  ettings $::test_ 2ba30 63 68 61 6e 6e 65 6c 20 2e 61 66 74 65 72 5d 0d channel .after]. 2ba40 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 2ba50 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 2ba60 20 6e 65 63 65 73 73 61 72 79 2c 20 65 6e 61 62 necessary, enab 2ba70 6c 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 le shared-cache 2ba80 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 mode now... 2ba90 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 2baa0 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 {[hasRuntimeOpt 2bab0 69 6f 6e 20 73 68 61 72 65 64 43 61 63 68 65 5d ion sharedCache] 2bac0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2bad0 20 20 20 20 65 6e 61 62 6c 65 53 68 61 72 65 64 enableShared 2bae0 43 61 63 68 65 20 24 3a 3a 74 65 73 74 5f 63 68 Cache$::test_ch
2baf0 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20 20  annel true..
2bb00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
2bb10 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
2bb20 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75  TE: Show when ou
2bb30 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79  r tests actually
2bb40 20 62 65 67 61 6e 20 28 6e 6f 77 29 2e 0d 0a 20   began (now)...
2bb50 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2bb60 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2bb70 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 2bb80 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 2bb90 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e "---- System. 2bba0 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 Data.SQLite test 2bbb0 73 20 62 65 67 61 6e 20 61 74 20 22 20 5c 0d 0a s began at " \.. 2bbc0 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f [clo 2bbd0 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b ck format [clock 2bbe0 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a seconds]] \n].. 2bbf0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 2bc00 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 ... proc runS 2bc10 51 4c 69 74 65 54 65 73 74 46 69 6c 65 73 50 72 QLiteTestFilesPr 2bc20 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 ologue {} {.. 2bc30 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2bc40 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 TE: Skip running 2bc50 20 6f 75 72 20 63 75 73 74 6f 6d 20 66 69 6c 65 our custom file 2bc60 73 20 70 72 6f 6c 6f 67 75 65 20 69 66 20 74 68 s prologue if th 2bc70 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 e main one has b 2bc80 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 een.. # 2bc90 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 skipped... 2bca0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 2bcb0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 2bcc0 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61 67 6c no(prologue.eagl 2bcd0 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 e)]} then {.. 2bce0 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b uplevel 1 { 2bcf0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 2bd00 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 2bd10 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61 Setup the varia 2bd20 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 20 bles that refer 2bd30 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 6e to the various n 2bd40 6f 6e 2d 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 on-data files.. 2bd50 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 2bd60 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 required by the 2bd70 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 tests in this f 2bd80 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ile... 2bd90 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 #.. set 2bda0 20 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b entityFramework 2bdb0 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 DllFile \.. 2bdc0 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 [getBui 2bdd0 6c 64 46 69 6c 65 4e 61 6d 65 20 45 6e 74 69 74 ldFileName Entit 2bde0 79 46 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c 20 66 yFramework.dll f 2bdf0 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 alse].... 2be00 20 20 20 73 65 74 20 69 6e 73 74 61 6c 6c 65 72 set installer 2be10 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 ExeFile \.. 2be20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 [getBui 2be30 6c 64 46 69 6c 65 4e 61 6d 65 20 49 6e 73 74 61 ldFileName Insta 2be40 6c 6c 65 72 2e 65 78 65 20 66 61 6c 73 65 5d 0d ller.exe false]. 2be50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ... set 2be60 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 sqliteDesignerD 2be70 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 llFile \.. 2be80 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c [getBuil 2be90 64 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 dFileName SQLite 2bea0 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 20 66 61 .Designer.dll fa 2beb0 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 lse].... 2bec0 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61 set systemData 2bed0 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d SQLiteDllFile \. 2bee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 2bef0 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName 2bf00 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 2bf10 69 74 65 2e 64 6c 6c 20 66 61 6c 73 65 5d 0d 0a ite.dll false].. 2bf20 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 2bf30 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 systemDataSQLite 2bf40 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 LinqDllFile \.. 2bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 2bf60 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 tBuildFileName S 2bf70 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 2bf80 65 2e 4c 69 6e 71 2e 64 6c 6c 20 66 61 6c 73 65 e.Linq.dll false 2bf90 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 ].... s 2bfa0 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c et systemDataSQL 2bfb0 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d iteEf6DllFile \. 2bfc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 2bfd0 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName 2bfe0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 2bff0 69 74 65 2e 45 46 36 2e 64 6c 6c 20 66 61 6c 73 ite.EF6.dll fals 2c000 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e].... 2c010 73 65 74 20 74 65 73 74 45 78 65 46 69 6c 65 20 set testExeFile 2c020 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d [getBuildFileNam 2c030 65 20 74 65 73 74 2e 65 78 65 20 66 61 6c 73 65 e test.exe false 2c040 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ].. set 2c050 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 testLinqExeFile 2c060 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 [getBuildFileNa 2c070 6d 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 20 me testlinq.exe 2c080 66 61 6c 73 65 5d 0d 0a 20 20 20 20 20 20 20 20 false].. 2c090 20 20 73 65 74 20 74 65 73 74 45 66 36 45 78 65 set testEf6Exe 2c0a0 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 File [getBuildFi 2c0b0 6c 65 4e 61 6d 65 20 74 65 73 74 65 66 36 2e 65 leName testef6.e 2c0c0 78 65 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 xe false].... 2c0d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2c0e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75 # NOTE: Setu 2c0f0 70 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 20 p the variables 2c100 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 that refer to th 2c110 65 20 76 61 72 69 6f 75 73 20 64 61 74 61 20 66 e various data f 2c120 69 6c 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 iles.. 2c130 23 20 20 20 20 20 20 20 72 65 71 75 69 72 65 64 # required 2c140 20 62 79 20 74 68 65 20 74 65 73 74 73 20 69 6e by the tests in 2c150 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 20 this file... 2c160 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2c170 20 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 set testLinq 2c180 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 OutFile [file na 2c190 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 2c1a0 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. 2c1b0 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 2c1c0 65 73 74 44 61 74 61 50 61 74 68 5d 20 74 65 73 estDataPath] tes 2c1d0 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20 tlinq.out]].... 2c1e0 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 72 set nor 2c1f0 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 5b thwindEfDbFile [ 2c200 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 2c210 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 2c220 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 2c230 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 e dirname [file 2c240 64 69 72 6e 61 6d 65 20 5b 67 65 74 53 51 4c 69 dirname [getSQLi 2c250 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 5d teTestDataPath]] 2c260 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 2c270 20 20 20 74 65 73 74 6c 69 6e 71 20 6e 6f 72 74 testlinq nort 2c280 68 77 69 6e 64 45 46 2e 64 62 5d 5d 0d 0a 0d 0a hwindEF.db]].... 2c290 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f set no 2c2a0 6e 57 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65 nWalDbFile [file 2c2b0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 2c2c0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 2c2d0 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 [getSQLi 2c2e0 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 teTestDataPath] 2c2f0 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 nonWal.db]].... 2c300 20 20 20 20 20 20 20 20 20 73 65 74 20 77 61 6c set wal 2c310 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 DbFile [file nat 2c320 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 2c330 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 2c340 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 2c350 73 74 44 61 74 61 50 61 74 68 5d 20 77 61 6c 2e stDataPath] wal. 2c360 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 db]].... 2c370 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 2c380 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69 6f NOTE: The vario 2c390 75 73 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e 73 us install/unins 2c3a0 74 61 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20 75 tall log files u 2c3b0 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 0d sed to test the. 2c3c0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 2c3d0 20 20 20 64 65 73 69 67 6e 2d 74 69 6d 65 20 63 design-time c 2c3e0 6f 6d 70 6f 6e 65 6e 74 20 69 6e 73 74 61 6c 6c omponent install 2c3f0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 er... # 2c400 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 2c410 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 testInstallVs200 2c420 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 5LogFile [file n 2c430 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 2c440 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 2c450 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite 2c460 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e TestDataPath] In 2c470 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 staller_Test_Vs2 2c480 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 005.log]].... 2c490 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 set testI 2c4a0 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 nstallVs2008LogF 2c4b0 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 2c4c0 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 2c4d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2c4e0 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 2c4f0 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c ataPath] Install 2c500 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c er_Test_Vs2008.l 2c510 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]].... 2c520 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c set testInstal 2c530 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b lVs2010LogFile [ 2c540 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 2c550 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 2c560 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 2c570 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 SQLiteTestDataPa 2c580 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 th] Installer_Te 2c590 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d st_Vs2010.log]]. 2c5a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ... set 2c5b0 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 2c5c0 31 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 12LogFile [file 2c5d0 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 2c5e0 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 2c5f0 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 [getSQLit 2c600 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 eTestDataPath] I 2c610 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 2c620 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2012.log]].... 2c630 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 set test 2c640 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 InstallVs2013Log 2c650 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 2c660 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 2c670 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2c680 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 [getSQLiteTest 2c690 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c DataPath] Instal 2c6a0 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33 2e ler_Test_Vs2013. 2c6b0 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 log]].... 2c6c0 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 set testInsta 2c6d0 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 llVs2015LogFile 2c6e0 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 2c6f0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 2c700 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 2c710 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 tSQLiteTestDataP 2c720 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 ath] Installer_T 2c730 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d 5d est_Vs2015.log]] 2c740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 .... se 2c750 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 t testInstallVs2 2c760 30 31 37 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 017LogFile [file 2c770 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 2c780 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 2c790 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 [getSQLi 2c7a0 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 teTestDataPath] 2c7b0 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 Installer_Test_V 2c7c0 73 32 30 31 37 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 s2017.log]].... 2c7d0 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 set tes 2c7e0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 tUninstallVs2005 2c7f0 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 LogFile [file na 2c800 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 2c810 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. 2c820 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 2c830 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 estDataPath] Uni 2c840 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 2c850 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2005.log]].... 2c860 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 set test 2c870 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c UninstallVs2008L 2c880 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 ogFile [file nat 2c890 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 2c8a0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 2c8b0 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 2c8c0 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e stDataPath] Unin 2c8d0 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 staller_Test_Vs2 2c8e0 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 008.log]].... 2c8f0 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 set testU 2c900 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f ninstallVs2010Lo 2c910 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 gFile [file nati 2c920 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 2c930 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 2c940 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 [getSQLiteTes 2c950 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 tDataPath] Unins 2c960 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 taller_Test_Vs20 2c970 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 10.log]].... 2c980 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e set testUn 2c990 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 installVs2012Log 2c9a0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 2c9b0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 2c9c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2c9d0 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 [getSQLiteTest 2c9e0 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 DataPath] Uninst 2c9f0 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 aller_Test_Vs201 2ca00 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 2.log]].... 2ca10 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 set testUni 2ca20 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 nstallVs2013LogF 2ca30 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 2ca40 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 2ca50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2ca60 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 2ca70 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 ataPath] Uninsta 2ca80 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33 ller_Test_Vs2013 2ca90 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 .log]].... 2caa0 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e set testUnin 2cab0 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 stallVs2015LogFi 2cac0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e le [file nativen 2cad0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 2cae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2caf0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 2cb00 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c taPath] Uninstal 2cb10 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e ler_Test_Vs2015. 2cb20 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 log]].... 2cb30 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 set testUnins 2cb40 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c tallVs2017LogFil 2cb50 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 2cb60 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d me [file join \. 2cb70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 2cb80 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 getSQLiteTestDat 2cb90 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c aPath] Uninstall 2cba0 65 72 5f 54 65 73 74 5f 56 73 32 30 31 37 2e 6c er_Test_Vs2017.l 2cbb0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]].... 2cbc0 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############## 2cbd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2cbe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2cbf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2cc00 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 #######.... 2cc10 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 2cc20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 68 65 63 exists ::no(chec 2cc30 6b 46 6f 72 53 71 6c 69 74 65 46 69 6c 65 73 29 kForSqliteFiles) 2cc40 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2cc50 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 2cc60 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 2cc70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 2cc80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2cc90 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 65 6e 74 [file tail$ent
2cca0 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46  ityFrameworkDllF
2ccb0 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ile]]]} then {..
2ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68                ch
2ccd0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 2cce0 5f 63 68 61 6e 6e 65 6c 20 24 65 6e 74 69 74 79 _channel$entity
2ccf0 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65  FrameworkDllFile
2cd00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2cd10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2cd20 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
2cd30 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
2cd40 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
2cd50 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
2cd60 61 69 6c 20 24 69 6e 73 74 61 6c 6c 65 72 45 78  ail $installerEx 2cd70 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b eFile]]]} then { 2cd80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2cd90 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
2cda0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 69 6e 73 74  st_channel $inst 2cdb0 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 49 6e 73 allerExeFile Ins 2cdc0 74 61 6c 6c 65 72 2e 65 78 65 0d 0a 20 20 20 20 taller.exe.. 2cdd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2cde0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 if {![h 2cdf0 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 aveConstraint [a 2ce00 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 2ce10 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2ce20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 [file tail$s
2ce30 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c  qliteDesignerDll
2ce40 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2ce50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
2ce60 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 2ce70 74 5f 63 68 61 6e 6e 65 6c 20 24 73 71 6c 69 74 t_channel$sqlit
2ce80 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65  eDesignerDllFile
2ce90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2cea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2ceb0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
2cec0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
2ced0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
2cee0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
2cef0 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53  ail $systemDataS 2cf00 51 4c 69 74 65 44 6c 6c 46 69 6c 65 5d 5d 5d 7d QLiteDllFile]]]} 2cf10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2cf20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 2cf30 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
2cf40 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c  l $systemDataSQL 2cf50 69 74 65 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 iteDllFile.. 2cf60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2cf70 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 if {![h 2cf80 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 aveConstraint [a 2cf90 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 2cfa0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2cfb0 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 [file tail$s
2cfc0 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c  ystemDataSQLiteL
2cfd0 69 6e 71 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74  inqDllFile]]]} t
2cfe0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2cff0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
2d000 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 2d010 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74$systemDataSQLit
2d020 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d 0a 20 20  eLinqDllFile..
2d030 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
2d040 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
2d050 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
2d060 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
2d070 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
2d080 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
2d090 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  $systemDataSQLit 2d0a0 65 45 66 36 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 eEf6DllFile]]]} 2d0b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2d0c0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 2d0d0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
2d0e0 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69   $systemDataSQLi 2d0f0 74 65 45 66 36 44 6c 6c 46 69 6c 65 0d 0a 20 20 teEf6DllFile.. 2d100 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 2d110 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 2d120 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 2d130 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 2d140 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 2d150 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 2d160 24 74 65 73 74 45 78 65 46 69 6c 65 5d 5d 5d 7d$testExeFile]]]}
2d170 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2d180 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
2d190 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 2d1a0 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65 20 74 l$testExeFile t
2d1b0 65 73 74 2e 65 78 65 0d 0a 20 20 20 20 20 20 20  est.exe..
2d1c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2d1d0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
2d1e0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
2d1f0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
2d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d210 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 2d220 4c 69 6e 71 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 LinqExeFile]]]} 2d230 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2d240 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 2d250 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
2d260 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c   $testLinqExeFil 2d270 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 0d 0a e testlinq.exe.. 2d280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 2d290 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 2d2a0 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 2d2b0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 2d2c0 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 2d2d0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 [file tai 2d2e0 6c 20 24 74 65 73 74 45 66 36 45 78 65 46 69 6c l$testEf6ExeFil
2d2f0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
2d300 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63              chec
2d310 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 2d320 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 66 36 45 hannel$testEf6E
2d330 78 65 46 69 6c 65 20 74 65 73 74 65 66 36 2e 65  xeFile testef6.e
2d340 78 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  xe..
2d350 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
2d360 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74   if {![haveConst
2d370 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
2d380 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20  s file_ \..
2d390 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
2d3a0 20 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 4f   tail $testLinqO 2d3b0 75 74 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 utFile]]]} then 2d3c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2d3d0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
2d3e0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 2d3f0 74 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a 20 20 tLinqOutFile.. 2d400 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 2d410 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 2d420 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 2d430 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 2d440 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 2d450 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 2d460 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69$northwindEfDbFi
2d470 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
2d480 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65               che
2d490 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 2d4a0 63 68 61 6e 6e 65 6c 20 24 6e 6f 72 74 68 77 69 channel$northwi
2d4b0 6e 64 45 66 44 62 46 69 6c 65 0d 0a 20 20 20 20  ndEfDbFile..
2d4c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2d4d0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68           if {![h
2d4e0 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
2d4f0 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
2d500 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2d510 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e     [file tail $n 2d520 6f 6e 57 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d 20 onWalDbFile]]]} 2d530 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2d540 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 2d550 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
2d560 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d 0a   $nonWalDbFile.. 2d570 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 2d580 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 2d590 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 2d5a0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 2d5b0 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 2d5c0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 [file tai 2d5d0 6c 20 24 77 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d l$walDbFile]]]}
2d5e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2d5f0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
2d600 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 2d610 6c 20 24 77 61 6c 44 62 46 69 6c 65 0d 0a 20 20 l$walDbFile..
2d620 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
2d630 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
2d640 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
2d650 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
2d660 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
2d670 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
2d680 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30  $testInstallVs20 2d690 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 05LogFile]]]} th 2d6a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2d6b0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 2d6c0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $2d6d0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 testInstallVs200 2d6e0 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 5LogFile.. 2d6f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 2d700 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 2d710 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 2d720 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 2d730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2d740 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
2d750 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f  tInstallVs2008Lo
2d760 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  gFile]]]} then {
2d770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2d780 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 2d790 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 st_channel$test
2d7a0 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67  InstallVs2008Log
2d7b0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  File..
2d7c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
2d7d0 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
2d7e0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
2d7f0 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
2d800 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69               [fi
2d810 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73  le tail $testIns 2d820 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c tallVs2010LogFil 2d830 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 2d840 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 chec 2d850 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
2d860 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74  hannel $testInst 2d870 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 2d880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2d890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 2d8a0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 2d8b0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 2d8c0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 2d8d0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 2d8e0 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c ail$testInstall
2d8f0 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d  Vs2012LogFile]]]
2d900 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2d910 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
2d920 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 2d930 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 el$testInstallV
2d940 73 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20  s2012LogFile..
2d950 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
2d960 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
2d970 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
2d980 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
2d990 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
2d9a0 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
2d9b0 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30  $testInstallVs20 2d9c0 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 13LogFile]]]} th 2d9d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2d9e0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 2d9f0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $2da00 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 2da10 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 3LogFile.. 2da20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 2da30 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 2da40 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 2da50 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 2da60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2da70 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
2da80 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f  tInstallVs2015Lo
2da90 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  gFile]]]} then {
2daa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2dab0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 2dac0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 st_channel$test
2dad0 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67  InstallVs2015Log
2dae0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  File..
2daf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
2db00 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
2db10 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
2db20 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
2db30 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69               [fi
2db40 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73  le tail $testIns 2db50 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c tallVs2017LogFil 2db60 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 2db70 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 chec 2db80 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
2db90 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74  hannel $testInst 2dba0 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 allVs2017LogFile 2dbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2dbc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 2dbd0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 2dbe0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 2dbf0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 2dc00 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 2dc10 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 ail$testUninsta
2dc20 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d  llVs2005LogFile]
2dc30 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
2dc40 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
2dc50 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 2dc60 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 nnel$testUninst
2dc70 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65  allVs2005LogFile
2dc80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2dc90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2dca0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
2dcb0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
2dcc0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
2dcd0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
2dce0 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61  ail $testUninsta 2dcf0 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d llVs2008LogFile] 2dd00 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 2dd10 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 2dd20 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
2dd30 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  nnel $testUninst 2dd40 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 allVs2008LogFile 2dd50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2dd60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 2dd70 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 2dd80 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 2dd90 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 2dda0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 2ddb0 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 ail$testUninsta
2ddc0 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d  llVs2010LogFile]
2ddd0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
2dde0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
2ddf0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 2de00 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 nnel$testUninst
2de10 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65  allVs2010LogFile
2de20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2de30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2de40 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
2de50 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
2de60 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
2de70 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
2de80 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61  ail $testUninsta 2de90 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d llVs2012LogFile] 2dea0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 2deb0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 2dec0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
2ded0 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  nnel $testUninst 2dee0 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 allVs2012LogFile 2def0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2df00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 2df10 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 2df20 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 2df30 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 2df40 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 2df50 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 ail$testUninsta
2df60 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d  llVs2013LogFile]
2df70 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
2df80 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
2df90 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 2dfa0 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 nnel$testUninst
2dfb0 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65  allVs2013LogFile
2dfc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2dfd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2dfe0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
2dff0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
2e000 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
2e010 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
2e020 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61  ail $testUninsta 2e030 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d llVs2015LogFile] 2e040 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 2e050 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 2e060 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
2e070 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  nnel $testUninst 2e080 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 allVs2015LogFile 2e090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2e0a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 2e0b0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 2e0c0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 2e0d0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 2e0e0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 2e0f0 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 ail$testUninsta
2e100 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 5d  llVs2017LogFile]
2e110 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
2e120 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
2e130 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 2e140 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 nnel$testUninst
2e150 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65  allVs2017LogFile
2e160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2e170 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
2e180 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
2e190 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
2e1a0 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65  proc runSQLiteTe
2e1b0 73 74 46 69 6c 65 73 45 70 69 6c 6f 67 75 65 20  stFilesEpilogue
2e1c0 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
2e1d0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
2e1e0 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75  p running our cu
2e1f0 73 74 6f 6d 20 66 69 6c 65 73 20 65 70 69 6c 6f  stom files epilo
2e200 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20  gue if the main
2e210 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  one has been..
2e220 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70      #       skip
2e230 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ped...      #..
2e240 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
2e250 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c  exists ::no(epil
2e260 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68  ogue.eagle)]} th
2e270 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70  en {..        up
2e280 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20  level 1 {..
2e290 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f       unset -noco
2e2a0 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20  mplain \..
2e2b0 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e          testUnin
2e2c0 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69  stallVs2017LogFi
2e2d0 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c  le testUninstall
2e2e0 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 5c 0d  Vs2015LogFile \.
2e2f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
2e300 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
2e310 31 33 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e  13LogFile testUn
2e320 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67  installVs2012Log
2e330 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
2e340 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74        testUninst
2e350 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65  allVs2010LogFile
2e360 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73   testUninstallVs
2e370 32 30 30 38 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20  2008LogFile \..
2e380 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73               tes
2e390 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35  tUninstallVs2005
2e3a0 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74  LogFile testInst
2e3b0 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65  allVs2017LogFile
2e3c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2e3d0 20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32    testInstallVs2
2e3e0 30 31 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 49  015LogFile testI
2e3f0 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46  nstallVs2013LogF
2e400 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ile \..
2e410 20 20 20 20 20 74 65 73 74 49 6e 73 74 61 6c 6c       testInstall
2e420 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 74 65  Vs2012LogFile te
2e430 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c  stInstallVs2010L
2e440 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  ogFile \..
2e450 20 20 20 20 20 20 20 20 74 65 73 74 49 6e 73 74          testInst
2e460 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65  allVs2008LogFile
2e470 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
2e480 30 35 4c 6f 67 46 69 6c 65 0d 0a 0d 0a 20 20 20  05LogFile....
2e490 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f         unset -no
2e4a0 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20  complain \..
2e4b0 20 20 20 20 20 20 20 20 20 20 6e 6f 72 74 68 77            northw
2e4c0 69 6e 64 45 66 44 62 46 69 6c 65 20 74 65 73 74  indEfDbFile test
2e4d0 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c 0d 0a 20  LinqOutFile \..
2e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 61 6c               wal
2e4f0 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 46  DbFile nonWalDbF
2e500 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ile....
2e510 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
2e520 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
2e530 20 20 20 20 74 65 73 74 45 66 36 45 78 65 46 69      testEf6ExeFi
2e540 6c 65 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69  le testLinqExeFi
2e550 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
2e560 20 20 20 20 74 65 73 74 45 78 65 46 69 6c 65 20      testExeFile
2e570 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  systemDataSQLite
2e580 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20  Ef6DllFile \..
2e590 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73 74              syst
2e5a0 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71  emDataSQLiteLinq
2e5b0 44 6c 6c 46 69 6c 65 20 73 79 73 74 65 6d 44 61  DllFile systemDa
2e5c0 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 20  taSQLiteDllFile
2e5d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2e5e0 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44   sqliteDesignerD
2e5f0 6c 6c 46 69 6c 65 20 69 6e 73 74 61 6c 6c 65 72  llFile installer
2e600 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  ExeFile \..
2e610 20 20 20 20 20 20 20 20 20 65 6e 74 69 74 79 46           entityF
2e620 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d  rameworkDllFile.
2e630 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
2e640 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
2e650 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74     proc runSQLit
2e660 65 54 65 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d  eTestEpilogue {}
2e670 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
2e680 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
2e690 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74  running our cust
2e6a0 6f 6d 20 65 70 69 6c 6f 67 75 65 20 69 66 20 74  om epilogue if t
2e6b0 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20  he main one has
2e6c0 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  been..      #
2e6d0 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20      skipped...
2e6e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
2e6f0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
2e700 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65 61 67  :no(epilogue.eag
2e710 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  le)]} then {..
2e720 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2e730 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68   # NOTE: Show wh
2e740 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74  en our tests act
2e750 75 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e 6f 77  ually ended (now
2e760 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  )...        #..
2e770 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 2e780 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 2e790 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 2e7a0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 "---- Sy 2e7b0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 2e7c0 20 74 65 73 74 73 20 65 6e 64 65 64 20 61 74 20 tests ended at 2e7d0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 2e7e0 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b [clock format [ 2e7f0 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 clock seconds]] 2e800 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 \n].... # 2e810 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2e820 3a 20 4c 6f 61 64 20 74 68 65 20 22 65 70 69 6c : Load the "epil 2e830 6f 67 75 65 22 20 63 75 73 74 6f 6d 20 70 65 72 ogue" custom per 2e840 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 -user and/or per 2e850 2d 68 6f 73 74 20 74 65 73 74 0d 0a 20 20 20 20 -host test.. 2e860 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 74 # sett 2e870 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ings now... 2e880 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 #.. up 2e890 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f level 1 [list lo 2e8a0 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 adSQLiteTestSett 2e8b0 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 ings$::test_cha
2e8c0 6e 6e 65 6c 20 2e 65 70 69 6c 6f 67 75 65 5d 0d  nnel .epilogue].
2e8d0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2e8e0 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20        # BUGFIX:
2e8f0 42 65 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 20  Before checking
2e900 74 68 65 20 66 69 6e 61 6c 20 72 65 73 6f 75 72  the final resour
2e910 63 65 73 20 69 6e 20 75 73 65 20 62 79 20 53 51  ces in use by SQ
2e920 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20  Lite, make..
2e930 20 20 20 20 23 20 20 20 20 20 20 20 20 20 73 75      #         su
2e940 72 65 20 62 6f 74 68 20 6f 66 20 74 68 65 20 50  re both of the P
2e950 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69  RAGMA related di
2e960 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72  rectory names ar
2e970 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20  e freed...
2e980 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65    #..        che
2e990 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63  ckForSQLiteDirec
2e9a0 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63  tories $::test_c 2e9b0 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 hannel true.... 2e9c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2e9d0 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 # NOTE: Also r 2e9e0 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 eport the resour 2e9f0 63 65 20 75 73 61 67 65 20 61 66 74 65 72 20 72 ce usage after r 2ea00 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 unning the tests 2ea10 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 2ea20 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 reportSQLi 2ea30 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 teResources$::t
2ea40 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20  est_channel....
2ea50 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2ea60 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74    # NOTE: Report
2ea70 20 74 68 65 20 63 72 69 74 69 63 61 6c 20 68 61   the critical ha
2ea80 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 66 74 65  ndle counts afte
2ea90 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65  r running the te
2eaa0 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  sts...        #.
2eab0 0a 20 20 20 20 20 20 20 20 67 65 74 53 51 4c 69  .        getSQLi
2eac0 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24  teHandleCounts $2ead0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 2eae0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2eaf0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 2eb00 6e 65 63 65 73 73 61 72 79 2c 20 64 69 73 61 62 necessary, disab 2eb10 6c 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 le shared-cache 2eb20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 mode now... 2eb30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 2eb40 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 {[hasRuntimeOpt 2eb50 69 6f 6e 20 73 68 61 72 65 64 43 61 63 68 65 5d ion sharedCache] 2eb60 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2eb70 20 20 20 20 65 6e 61 62 6c 65 53 68 61 72 65 64 enableShared 2eb80 43 61 63 68 65 20 24 3a 3a 74 65 73 74 5f 63 68 Cache$::test_ch
2eb90 61 6e 6e 65 6c 20 66 61 6c 73 65 0d 0a 20 20 20  annel false..
2eba0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
2ebb0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23  .    }.....    #
2ebc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ebd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ebe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ebf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ec00 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20  ##########..
2ec10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ec20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 45 4e  ############# EN
2ec30 44 20 45 61 67 6c 65 20 4f 4e 4c 59 20 23 23 23  D Eagle ONLY ###
2ec40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ec50 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20  ###########..
2ec60 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
2ec70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ec80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2ec90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2eca0 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20  ############..
2ecb0 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f  }....  #..  # NO
2ecc0 54 45 3a 20 53 61 76 65 20 74 68 65 20 6e 61 6d  TE: Save the nam
2ecd0 65 20 6f 66 20 74 68 65 20 64 69 72 65 63 74 6f  e of the directo
2ece0 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ry containing th
2ecf0 69 73 20 66 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20  is file...  #..
2ed00 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
2ed10 74 73 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74  ts common_direct
2ed20 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
2ed30 20 20 73 65 74 20 63 6f 6d 6d 6f 6e 5f 64 69 72    set common_dir
2ed40 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72  ectory [file dir
2ed50 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70  name [info scrip
2ed60 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d  t]]..  }....  #.
2ed70 0a 20 20 23 20 4e 4f 54 45 3a 20 50 72 6f 76 69  .  # NOTE: Provi
2ed80 64 65 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  de the System.Da
2ed90 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 20 70  ta.SQLite test p
2eda0 61 63 6b 61 67 65 20 74 6f 20 74 68 65 20 69 6e  ackage to the in
2edb0 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 23 0d  terpreter...  #.
2edc0 0a 20 20 70 61 63 6b 61 67 65 20 70 72 6f 76 69  .  package provi
2edd0 64 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  de System.Data.S
2ede0 51 4c 69 74 65 2e 54 65 73 74 20 31 2e 30 0d 0a  QLite.Test 1.0..
2edf0 7d 0d 0a                                         }..