System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 97e40ea30286274b69deea0181503be0cee8882f:

• File Tests/common.eagle — part of check-in [470251caba] at 2015-02-18 22:46:17 on branch trunk — Improve the changes in the previous check-in. (user: mistachkin size: 132681)

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 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b  etBuildYear {} {
0340: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0350: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
0360: 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74 69  the "year" setti
0370: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
0380: 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75 73  ridden by the us
0390: 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  er (e.g...
03a0: 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63  #       on the c
03b0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
03c0: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
03d0: 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 68 20  l exactly which
03e0: 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  set of..      #
03f0: 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 20 77        binaries w
0400: 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74  e are testing, t
0410: 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 75 73  hose produced us
0420: 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c 20 53  ing the Visual S
0430: 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20  tudio..      #
0440: 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c       2005, 2008,
0450: 20 32 30 31 30 2c 20 32 30 31 32 2c 20 6f 72 20   2010, 2012, or
0460: 32 30 31 33 20 62 75 69 6c 64 20 73 79 73 74 65  2013 build syste
0470: 6d 73 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 65  ms.  To override
0480: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20   this..      #
0490: 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 20 74       value via t
04a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c  he command line,
04b0: 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64   enter a command
04c0: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20   similar to one
04d0: 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  of..      #
04e0: 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    the following
04f0: 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65  (all on one line
0500: 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ):..      #..
0510: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0520: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e  Shell.exe -anyIn
0530: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
0540: 73 74 5f 79 65 61 72 20 32 30 30 35 22 0d 0a 20  st_year 2005"..
0550: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
0560: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
0570: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
0580: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0590: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
05a0: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22  -anyInitialize "
05b0: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
05c0: 30 38 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  08"..      #
05d0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
05e0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
05f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0600: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0610: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61  l.exe -anyInitia
0620: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
0630: 65 61 72 20 32 30 31 30 22 0d 0a 20 20 20 20 20  ear 2010"..
0640: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
0650: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
0660: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
0670: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
0680: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79  leShell.exe -any
0690: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
06a0: 74 65 73 74 5f 79 65 61 72 20 32 30 31 32 22 0d  test_year 2012".
06b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
06c0: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
06d0: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
06e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
06f0: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
0700: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65  e -anyInitialize
0710: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20   "set test_year
0720: 32 30 31 33 22 0d 0a 20 20 20 20 20 20 23 20 20  2013"..      #
0730: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
0740: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
0750: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0760: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0770: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
0780: 69 61 6c 69 7a 65 20 22 75 6e 73 65 74 20 2d 6e  ialize "unset -n
0790: 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 79  ocomplain test_y
07a0: 65 61 72 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ear"..      #
07b0: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
07c0: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
07d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
07e0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
07f0: 20 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 26 26   ::test_year] &&
0800: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0810: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 3e 20  $::test_year] > 0820: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 0830: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 0840: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 0850: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 ecified test yea 0860: 72 2e 20 20 49 66 20 74 68 69 73 20 76 61 72 69 r. If this vari 0870: 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c able is not set, 0880: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 0890: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 default va 08a0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 lue will be base 08b0: 64 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 d on whether or 08c0: 6e 6f 74 20 45 61 67 6c 65 20 68 61 73 20 62 65 not Eagle has be 08d0: 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 en.. # 08e0: 20 20 20 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 compiled aga 08f0: 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e inst the CLR v2. 0900: 30 20 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 0 or CLR v4.0... 0910: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0920: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 return$::tes
0930: 74 5f 79 65 61 72 0d 0a 20 20 20 20 20 20 7d 20  t_year..      }
0940: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0950: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
0960: 45 3a 20 49 66 20 45 61 67 6c 65 20 68 61 73 20  E: If Eagle has
0970: 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67  been compiled ag
0980: 61 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34  ainst the CLR v4
0990: 2e 30 2c 20 75 73 65 20 22 32 30 31 30 22 20 62  .0, use "2010" b
09a0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
09b0: 20 20 20 64 65 66 61 75 6c 74 20 28 77 65 20 63     default (we c
09c0: 6f 75 6c 64 20 75 73 65 20 22 32 30 31 32 22 20  ould use "2012"
09d0: 6f 72 20 22 32 30 31 33 22 20 69 6e 20 74 68 61  or "2013" in tha
09e0: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 20  t case as well)
09f0: 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  as..        #
0a00: 20 20 20 20 74 68 65 20 74 65 73 74 20 79 65 61      the test yea
0a10: 72 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 75 73  r; otherwise, us
0a20: 65 20 22 32 30 30 38 22 20 62 79 20 64 65 66 61  e "2008" by defa
0a30: 75 6c 74 20 28 77 65 20 63 6f 75 6c 64 20 75 73  ult (we could us
0a40: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
0a50: 20 20 20 22 32 30 30 35 22 20 69 6e 20 74 68 61     "2005" in tha
0a60: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 2e  t case as well).
0a70: 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 61 6a    If another maj
0a80: 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 6c 65  or [incompatible
0a90: 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ]..        #
0aa0: 20 20 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68     version of th
0ab0: 65 20 43 4c 52 20 69 73 20 72 65 6c 65 61 73 65  e CLR is release
0ac0: 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 77 69  d, this check wi
0ad0: 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 0d 0a 20  ll have to be..
0ae0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
0af0: 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 66  hanged.  The def
0b00: 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20 74  ault test year t
0b10: 6f 20 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  o use for a part
0b20: 69 63 75 6c 61 72 20 43 4c 52 0d 0a 20 20 20 20  icular CLR..
0b30: 20 20 20 20 23 20 20 20 20 20 20 20 76 65 72 73      #       vers
0b40: 69 6f 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72  ion may be overr
0b50: 69 64 64 65 6e 20 62 79 20 73 65 74 74 69 6e 67  idden by setting
0b60: 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
0b70: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
0b80: 20 20 20 20 20 20 22 74 65 73 74 5f 79 65 61 72        "test_year
0b90: 5f 63 6c 72 5f 76 24 58 22 2c 20 77 68 65 72 65  _clr_v$X", where 0ba0: 20 22 24 58 22 20 6d 61 79 20 5b 63 75 72 72 65 "$X" may [curre
0bb0: 6e 74 6c 79 5d 20 62 65 20 65 69 74 68 65 72 20  ntly] be either
0bc0: 22 32 22 0d 0a 20 20 20 20 20 20 20 20 23 20 20  "2"..        #
0bd0: 20 20 20 20 20 6f 72 20 22 34 22 2e 0d 0a 20 20       or "4"...
0be0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
0bf0: 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72   if {[haveConstr
0c00: 61 69 6e 74 20 69 6d 61 67 65 52 75 6e 74 69 6d  aint imageRuntim
0c10: 65 34 30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e40]} then {..
0c20: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
0c30: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
0c40: 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 26 26 20  year_clr_v4] &&
0c50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
0c60: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0c70: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72  $::test_year_clr 0c80: 5f 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b _v4] > 0} then { 0c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 0ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 0cb0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 0cc0: 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 cified test year 0cd0: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e for the CLR v4. 0ce0: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 0cf0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 0d00: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 eturn$::test_ye
0d10: 61 72 5f 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20  ar_clr_v4..
0d20: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
0d30: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d40: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
0d50: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
0d60: 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20  t test year for
0d70: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20  the CLR v4.0...
0d80: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0da0: 20 32 30 31 30 3b 20 23 20 54 4f 44 4f 3a 20 47   2010; # TODO: G
0db0: 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64  ood "fallback" d
0dc0: 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20  efault?..
0dd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
0de0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0df0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
0e00: 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63  ts ::test_year_c
0e10: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20  lr_v2] && \..
0e20: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
0e30: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 0e40: 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 3e t_year_clr_v2] > 0e50: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 0e60: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0e70: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 0e80: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 0e90: 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 test year for t 0ea0: 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 he CLR v2.0... 0eb0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 0ec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 0ed0: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72$::test_year_clr
0ee0: 5f 76 32 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  _v2..          }
0ef0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
0f00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
0f20: 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74  the default test
0f30: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c   year for the CL
0f40: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20  R v2.0...
0f50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f60: 20 20 20 20 72 65 74 75 72 6e 20 32 30 30 38 3b      return 2008;
0f70: 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66   # TODO: Good "f
0f80: 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74  allback" default
0f90: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ?..          }..
0fa0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
0fb0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
0fc0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 59    proc getBuildY
0fd0: 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ears {} {..
0fe0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
0ff0: 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73  : See if the lis
1000: 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20  t of test years
1010: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
1020: 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 0d  den by the user.
1030: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28  .      #       (
1040: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  e.g. on the comm
1050: 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20  and line)...
1060: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
1070: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
1080: 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c 6c  st_years] && [ll
1090: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65  ength $::test_ye 10a0: 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ars] > 0} then { 10b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 10d0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c the specified l 10e0: 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 ist of test year 10f0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 1100: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
1110: 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 20  :test_years..
1120: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1140: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
1150: 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20  default list of
1160: 74 65 73 74 20 79 65 61 72 73 20 28 69 2e 65 2e  test years (i.e.
1170: 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20   all)...
1180: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
1190: 6e 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30 30  n [list 2005 200
11a0: 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31 33  8 2010 2012 2013
11b0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
11c0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
11d0: 65 74 42 75 69 6c 64 4e 65 74 46 78 20 7b 7d 20  etBuildNetFx {}
11e0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
11f0: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
1200: 20 74 68 65 20 74 65 73 74 20 2e 4e 45 54 20 46   the test .NET F
1210: 72 61 6d 65 77 6f 72 6b 20 73 65 74 74 69 6e 67  ramework setting
1220: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
1230: 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 23  dden by..      #
1240: 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72 20         the user
1250: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d  (e.g. on the com
1260: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20  mand line)...
1270: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1280: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
1290: 65 73 74 5f 6e 65 74 5f 66 78 5d 20 26 26 20 5c  est_net_fx] && \
12a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
12b0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65  ing length $::te 12c0: 73 74 5f 6e 65 74 5f 66 78 5d 20 3e 20 30 7d 20 st_net_fx] > 0} 12d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12e0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12f0: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 1300: 66 69 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 fied test .NET F 1310: 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 ramework... 1320: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 1330: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 6e 65 74 turn$::test_net
1340: 5f 66 78 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  _fx..      } els
1350: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
1360: 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59   year [getBuildY
1370: 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ear]....
1380: 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d  switch -exact --
1390: 20 24 79 65 61 72 20 7b 0d 0a 20 20 20 20 20 20   $year {.. 13a0: 20 20 20 20 32 30 30 35 20 7b 0d 0a 20 20 20 20 2005 {.. 13b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 13c0: 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20 etFx20.. 13d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 32 }.. 2 13e0: 30 30 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 008 {.. 13f0: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 return netFx3 1400: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 5.. }.. 1410: 20 20 20 20 20 20 20 20 20 20 32 30 31 30 20 7b 2010 { 1420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 1430: 74 75 72 6e 20 6e 65 74 46 78 34 30 0d 0a 20 20 turn netFx40.. 1440: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1450: 20 20 20 20 20 32 30 31 32 20 7b 0d 0a 20 20 20 2012 {.. 1460: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 1470: 6e 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 netFx45.. 1480: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1490: 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 20 2013 {.. 14a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 return netFx 14b0: 34 35 31 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 451.. } 14c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 66 61 .. defa 14d0: 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ult {.. 14e0: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 return netFx3 14f0: 35 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 5; # TODO: Good 1500: 22 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 "fallback" defau 1510: 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d lt?.. } 1520: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 1530: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 1540: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1550: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 1560: 65 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 e should return 1570: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 non-zero if the 1580: 63 6f 6e 66 69 67 75 72 65 64 20 74 65 73 74 0d configured test. 1590: 0a 20 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 . # pla 15a0: 74 66 6f 72 6d 20 69 73 20 6d 6f 73 74 20 6c 69 tform is most li 15b0: 6b 65 6c 79 20 74 68 65 20 64 65 66 61 75 6c 74 kely the default 15c0: 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e for this machin 15d0: 65 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 70 e... #.. p 15e0: 72 6f 63 20 69 73 44 65 66 61 75 6c 74 42 75 69 roc isDefaultBui 15f0: 6c 64 50 6c 61 74 66 6f 72 6d 20 7b 20 7b 76 65 ldPlatform { {ve 1600: 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b rbose false} } { 1610: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1620: 20 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 # NOTE: Running 1630: 20 6f 6e 20 57 6f 57 36 34 20 69 73 20 6e 65 76 on WoW64 is nev 1640: 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 er the default p 1650: 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 latform... 1660: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 #.. if {[is 1670: 52 75 6e 6e 69 6e 67 57 6f 57 36 34 5d 7d 20 74 RunningWoW64]} t 1680: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 1690: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
16a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
16b0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 16c0: 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 16d0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 74 65 "---- dete 16e0: 63 74 65 64 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 cted non-default 16f0: 20 70 6c 61 74 66 6f 72 6d 20 28 57 6f 57 36 34 platform (WoW64 1700: 29 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d )\n".. }. 1710: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1720: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a false.. }.. 1730: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1740: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 68 61 # NOTE: This ha 1750: 73 20 61 20 67 6f 6f 64 20 63 68 61 6e 63 65 20 s a good chance 1760: 6f 66 20 62 65 69 6e 67 20 74 68 65 20 64 65 66 of being the def 1770: 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a ault platform... 1780: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1790: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
17a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n {..        tpu
17b0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 17c0: 65 6c 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 el "---- detecte 17d0: 64 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f d default platfo 17e0: 72 6d 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a rm\n".. }.. 17f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 1800: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... 1810: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 50 6c proc getBuildPl 1820: 61 74 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 20 atform { native 1830: 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b } {.. if {[ 1840: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 info exists ::te 1850: 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 20 st_platform] && 1860: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 1870: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 ring length$::t
1880: 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e 20  est_platform] >
1890: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
18a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
18b0: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70  NOTE: Use the sp
18c0: 65 63 69 66 69 65 64 20 74 65 73 74 20 70 6c 61  ecified test pla
18d0: 74 66 6f 72 6d 2e 20 20 49 66 20 74 68 69 73 20  tform.  If this
18e0: 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20  variable is not
18f0: 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  set,..        #
1900: 20 20 20 20 20 20 74 68 65 20 64 65 66 61 75 6c        the defaul
1910: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  t value will be
1920: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6d 61 63  based on the mac
1930: 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72  hine architectur
1940: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
1950: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65         return [e
1960: 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 24  xpr {$native ?$
1970: 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20  ::test_platform
1980: 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20  : ""}]..      }
1990: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
19a0: 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d 61 63 68  ists ::test_mach
19b0: 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ine] && \..
19c0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
19d0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68  gth $::test_mach 19e0: 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ine] > 0} then { 19f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1a00: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 # NOTE: For 1a10: 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 native builds, 1a20: 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 return the platf 1a30: 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 orm name corresp 1a40: 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 onding to.. 1a50: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 74 # the t 1a60: 65 73 74 20 6d 61 63 68 69 6e 65 20 61 72 63 68 est machine arch 1a70: 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 itecture; otherw 1a80: 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 ise, return an e 1a90: 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 23 20 mpty.. # 1aa0: 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 string... 1ab0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1ac0: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { 1ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 74 ..$nat
1ae0: 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54 6f  ive ? [machineTo
1af0: 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 65 73 74  Platform $::test 1b00: 5f 6d 61 63 68 69 6e 65 5d 20 3a 20 22 22 0d 0a _machine] : "".. 1b10: 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 }].. 1b20: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 } elseif {[inf 1b30: 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 o exists ::tcl_p 1b40: 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 latform(machine) 1b50: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1b60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1b70: 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 NOTE: For native 1b80: 20 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 builds, return 1b90: 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d the platform nam 1ba0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 e corresponding 1bb0: 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 to.. # 1bc0: 20 20 20 20 74 68 65 20 6d 61 63 68 69 6e 65 20 the machine 1bd0: 61 72 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 architecture; ot 1be0: 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 herwise, return 1bf0: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 1c00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1c10: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp 1c20: 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 24 r {..$
1c30: 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e  native ? [machin
1c40: 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74  eToPlatform $::t 1c50: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 cl_platform(mach 1c60: 69 6e 65 29 5d 20 3a 20 22 22 0d 0a 20 20 20 20 ine)] : "".. 1c70: 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 }].. } 1c80: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1c90: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1ca0: 45 3a 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61 72 E: No machine ar 1cb0: 63 68 69 74 65 63 74 75 72 65 20 69 73 20 61 76 chitecture is av 1cc0: 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 ailable, return 1cd0: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 1ce0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1cf0: 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e It is importan 1d00: 74 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 t to return an e 1d10: 6d 70 74 79 20 73 74 72 69 6e 67 20 68 65 72 65 mpty string here 1d20: 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 because the.. 1d30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 1d40: 73 75 6c 74 20 6f 66 20 74 68 69 73 20 70 72 6f sult of this pro 1d50: 63 65 64 75 72 65 20 6d 61 79 20 62 65 20 75 73 cedure may be us 1d60: 65 64 20 77 69 74 68 20 5b 66 69 6c 65 20 6a 6f ed with [file jo 1d70: 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d in]... #. 1d80: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1d90: 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 "".. }.. 1da0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1db0: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur 1dc0: 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 ation {} {.. 1dd0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1de0: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22 63 E: See if the "c 1df0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73 65 onfiguration" se 1e00: 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f tting has been o 1e10: 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 verridden by the 1e20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1e30: 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 user (e.g. on th 1e40: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e e command line). 1e50: 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e This helps con 1e60: 74 72 6f 6c 20 65 78 61 63 74 6c 79 0d 0a 20 20 trol exactly.. 1e70: 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 63 # whic 1e80: 68 20 73 65 74 20 6f 66 20 62 69 6e 61 72 69 65 h set of binarie 1e90: 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 s we are testing 1ea0: 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75 69 (i.e. those bui 1eb0: 6c 74 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 lt in the.. 1ec0: 20 23 20 20 20 20 20 20 20 22 44 65 62 75 67 22 # "Debug" 1ed0: 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 62 75 or "Release" bu 1ee0: 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ild configuratio 1ef0: 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 ns). To overrid 1f00: 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 e this.. # 1f10: 20 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 20 value via 1f20: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line 1f30: 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e , enter a comman 1f40: 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 d similar to one 1f50: 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 of.. # 1f60: 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 the following 1f70: 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e (all on one lin 1f80: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e):.. #.. 1f90: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 1fa0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 eShell.exe -anyI 1fb0: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 nitialize "set t 1fc0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f est_configuratio 1fd0: 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20 20 n Debug".. 1fe0: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 # -file 1ff0: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 .\path\to\all.ea 2000: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 gle.. #.. 2010: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 2020: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 eShell.exe -anyI 2030: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 nitialize "set t 2040: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f est_configuratio 2050: 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20 20 n Release".. 2060: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c # -fil 2070: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e e .\path\to\all. 2080: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a eagle.. #.. 2090: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea 20a0: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66 69 gleShell.exe -fi 20b0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 20c0: 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74 0d .eagle -preTest. 20d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 . # 20e0: 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c "unset -nocompl 20f0: 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 ain test_configu 2100: 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 23 ration".. # 2110: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 2120: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f o exists ::test_ 2130: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 26 configuration] & 2140: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 2150: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
2160: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74  :test_configurat
2170: 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ion] > 0} then {
2180: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2190: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
21a0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74   the specified t
21b0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
21c0: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  n.  The default
21d0: 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20 20  value used..
21e0: 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20      #       for
21f0: 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 73  this variable is
2200: 20 74 79 70 69 63 61 6c 6c 79 20 22 52 65 6c 65   typically "Rele
2210: 61 73 65 22 2c 20 61 73 20 73 65 74 20 62 79 20  ase", as set by
2220: 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20  the test..
2230: 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65 20    #       suite
2240: 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 20  itself...
2250: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
2260: 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69  rn $::test_confi 2270: 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 guration.. 2280: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 2290: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 22a0: 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20 77 OTE: Normally, w 22b0: 65 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 69 74 e will never hit 22c0: 20 74 68 69 73 20 63 61 73 65 20 62 65 63 61 75 this case becau 22d0: 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 se the value of 22e0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 22f0: 20 20 20 20 20 74 65 73 74 20 63 6f 6e 66 69 67 test config 2300: 75 72 61 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 uration variable 2310: 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 20 62 is always set b 2320: 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 y the test suite 2330: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2340: 20 20 69 74 73 65 6c 66 3b 20 68 6f 77 65 76 65 itself; howeve 2350: 72 2c 20 69 74 20 63 61 6e 20 62 65 20 6f 76 65 r, it can be ove 2360: 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 74 68 rridden using th 2370: 65 20 75 6e 73 65 74 20 63 6f 6d 6d 61 6e 64 0d e unset command. 2380: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2390: 20 66 72 6f 6d 20 74 68 65 20 2d 70 72 65 54 65 from the -preTe 23a0: 73 74 20 6f 70 74 69 6f 6e 20 74 6f 20 74 68 65 st option to the 23b0: 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 23c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 23d0: 20 72 65 74 75 72 6e 20 24 3a 3a 65 61 67 6c 65 return$::eagle
23e0: 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6e 66 69 67  _platform(config
23f0: 75 72 61 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  uration)..
2400: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
2410: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6f   proc getBuildCo
2420: 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 7b 7d 20  nfigurations {}
2430: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
2440: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
2450: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65 73   the list of tes
2460: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  t configurations
2470: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
2480: 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 23  dden by..      #
2490: 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72 20         the user
24a0: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d  (e.g. on the com
24b0: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20  mand line)...
24c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
24d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
24e0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
24f0: 6e 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ns] && \..
2500: 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a      [llength $:: 2510: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 2520: 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ons] > 0} then { 2530: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2540: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 2550: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c the specified l 2560: 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 ist of test conf 2570: 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 igurations... 2580: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2590: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 return$::test_c
25a0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0d 0a 20  onfigurations..
25b0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
25c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
25d0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
25e0: 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f  e default list o
25f0: 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61  f test configura
2600: 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20  tions...
2610: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
2620: 6e 20 5b 6c 69 73 74 20 44 65 62 75 67 20 52 65  n [list Debug Re
2630: 6c 65 61 73 65 5d 0d 0a 20 20 20 20 20 20 7d 0d  lease]..      }.
2640: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
2650: 72 6f 63 20 67 65 74 42 75 69 6c 64 42 61 73 65  roc getBuildBase
2660: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a  Directory {} {..
2670: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
2680: 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
2690: 74 20 74 68 65 20 62 61 73 65 20 64 69 72 65 63  t the base direc
26a0: 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74  tory where all t
26b0: 68 65 20 62 75 69 6c 64 73 20 73 68 6f 75 6c 64  he builds should
26c0: 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
26d0: 20 20 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69     located.  Thi
26e0: 73 20 77 69 6c 6c 20 62 65 20 74 68 65 20 64 69  s will be the di
26f0: 72 65 63 74 6f 72 79 20 74 68 61 74 20 63 6f 6e  rectory that con
2700: 74 61 69 6e 73 20 74 68 65 20 61 63 74 75 61 6c  tains the actual
2710: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2720: 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72  build output dir
2730: 65 63 74 6f 72 79 20 28 65 2e 67 2e 20 70 61 72  ectory (e.g. par
2740: 65 6e 74 20 6f 66 20 22 62 69 6e 22 29 2e 0d 0a  ent of "bin")...
2750: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
2760: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
2770: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
2780: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
2790: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
27a0: 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f  length $::build_ 27b0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 27c0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 27d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 27e0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 27f0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c tion of the buil 2800: 64 20 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 d base directory 2810: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 2820: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 dden;.. # 2830: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 therefore 2840: 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69 , use it verbati 2850: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 m... #.. 2860: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
2870: 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65  :build_base_dire
2880: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65  ctory..      } e
2890: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  lseif {[info exi
28a0: 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72  sts ::common_dir
28b0: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
28c0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
28d0: 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e  length $::common 28e0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 28f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2900: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2910: 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c 6c 62 61 TE: Next, fallba 2920: 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 ck to the parent 2930: 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 directory of th 2940: 65 20 6f 6e 65 20 63 6f 6e 74 61 69 6e 69 6e 67 e one containing 2950: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2960: 20 20 74 68 69 73 20 66 69 6c 65 20 28 69 2e 65 this file (i.e 2970: 2e 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 . "common.eagle" 2980: 29 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e ), if available. 2990: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 29a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 29b0: 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 63 6f 6d e dirname$::com
29c0: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 0d 0a  mon_directory]..
29d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
29e0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 70  [info exists ::p
29f0: 61 74 68 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ath] && \..
2a00: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
2a10: 67 74 68 20 24 3a 3a 70 61 74 68 5d 20 3e 20 30  gth $::path] > 0 2a20: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2a30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2a40: 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 OTE: Finally, fa 2a50: 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 70 61 llback to the pa 2a60: 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f rent directory o 2a70: 66 20 74 68 65 20 45 61 67 6c 65 54 65 73 74 0d f the EagleTest. 2a80: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2a90: 20 70 61 74 68 2e 20 20 54 68 65 20 45 61 67 6c path. The Eagl 2aa0: 65 54 65 73 74 20 70 61 63 6b 61 67 65 20 67 75 eTest package gu 2ab0: 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 74 68 arantees that th 2ac0: 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 is variable.. 2ad0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 6c # wil 2ae0: 6c 20 62 65 20 73 65 74 20 74 6f 20 74 68 65 20 l be set to the 2af0: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 directory contai 2b00: 6e 69 6e 67 20 74 68 65 20 66 69 72 73 74 20 66 ning the first f 2b10: 69 6c 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 ile to.. 2b20: 23 20 20 20 20 20 20 20 65 78 65 63 75 74 65 20 # execute 2b30: 74 68 65 20 5b 72 75 6e 54 65 73 74 50 72 6f 6c the [runTestProl 2b40: 6f 67 75 65 5d 20 73 63 72 69 70 74 20 6c 69 62 ogue] script lib 2b50: 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 2e 0d rary procedure.. 2b60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2b70: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 2b80: 20 64 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 dirname$::path
2b90: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
2ba0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
2bb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f        # NOTE: No
2bc0: 20 70 61 74 68 20 69 73 20 61 76 61 69 6c 61 62   path is availab
2bd0: 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d  le, return an em
2be0: 70 74 79 20 73 74 72 69 6e 67 2e 20 20 54 68 69  pty string.  Thi
2bf0: 73 20 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  s point..
2c00: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
2c10: 6e 6f 74 20 62 65 20 72 65 61 63 68 65 64 2e 0d  not be reached..
2c20: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2c30: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
2c40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
2c50: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 51  ..    proc getSQ
2c60: 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
2c70: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
2c80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
2c90: 67 75 72 65 20 6f 75 74 20 74 68 65 20 64 69 72  gure out the dir
2ca0: 65 63 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c  ectory where all
2cb0: 20 74 68 65 20 74 65 73 74 20 64 61 74 61 20 66   the test data f
2cc0: 69 6c 65 73 20 73 68 6f 75 6c 64 0d 0a 20 20 20  iles should..
2cd0: 20 20 20 23 20 20 20 20 20 20 20 62 65 20 6c 6f     #       be lo
2ce0: 63 61 74 65 64 2e 20 20 54 68 69 73 20 73 68 6f  cated.  This sho
2cf0: 75 6c 64 20 62 65 20 74 68 65 20 22 64 61 74 61  uld be the "data
2d00: 22 20 64 69 72 65 63 74 6f 72 79 20 62 65 6e 65  " directory bene
2d10: 61 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 23  ath the..      #
2d20: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
2d30: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the
2d40: 61 63 74 75 61 6c 20 74 65 73 74 20 73 63 72 69  actual test scri
2d50: 70 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  pts...      #..
2d60: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c       return [fil
2d70: 65 20 6a 6f 69 6e 20 24 3a 3a 70 61 74 68 20 64  e join $::path d 2d80: 61 74 61 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a ata].. }..... 2d90: 20 20 20 20 70 72 6f 63 20 69 73 52 75 6e 6e 69 proc isRunni 2da0: 6e 67 57 6f 57 36 34 20 7b 7d 20 7b 0d 0a 20 20 ngWoW64 {} {.. 2db0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 2dc0: 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 OTE: For now, ju 2dd0: 73 74 20 75 73 65 20 74 68 65 20 65 78 69 73 74 st use the exist 2de0: 69 6e 67 20 74 65 73 74 20 63 6f 6e 73 74 72 61 ing test constra 2df0: 69 6e 74 20 66 6f 72 20 64 65 74 65 63 74 69 6e int for detectin 2e00: 67 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 g.. # 2e10: 20 61 20 57 6f 57 36 34 20 70 72 6f 63 65 73 73 a WoW64 process 2e20: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 2e30: 20 20 72 65 74 75 72 6e 20 5b 68 61 76 65 43 6f return [haveCo 2e40: 6e 73 74 72 61 69 6e 74 20 77 6f 77 36 34 5d 0d nstraint wow64]. 2e50: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 2e60: 72 6f 63 20 69 73 4d 69 78 65 64 4d 6f 64 65 41 roc isMixedModeA 2e70: 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 ssembly { fileNa 2e80: 6d 65 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 me {varName ""} 2e90: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 2ea0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 2eb0: 74 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 t, make sure the 2ec0: 20 74 65 73 74 20 73 75 69 74 65 20 69 6e 66 72 test suite infr 2ed0: 61 73 74 72 75 63 74 75 72 65 20 69 73 20 61 6c astructure is al 2ee0: 6c 6f 77 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 lowed to.. 2ef0: 23 20 20 20 20 20 20 20 75 73 65 20 74 68 65 20 # use the 2f00: 5b 65 78 65 63 5d 20 63 6f 6d 6d 61 6e 64 2e 0d [exec] command.. 2f10: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2f20: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 2f30: 73 20 3a 3a 6e 6f 28 65 78 65 63 29 5d 20 26 26 s ::no(exec)] && 2f40: 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a ![info exists : 2f50: 3a 6e 6f 28 63 6f 72 46 6c 61 67 73 29 5d 7d 20 :no(corFlags)]} 2f60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2f70: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2f80: 45 3a 20 49 66 20 74 68 65 20 6c 6f 63 61 74 69 E: If the locati 2f90: 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73 20 69 on of CorFlags i 2fa0: 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 s present in the 2fb0: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 environment,.. 2fc0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 # u 2fd0: 73 65 20 69 74 3b 20 6f 74 68 65 72 77 69 73 65 se it; otherwise 2fe0: 20 61 73 73 75 6d 65 20 69 74 20 69 73 20 69 6e assume it is in 2ff0: 20 74 68 65 20 50 41 54 48 2e 0d 0a 20 20 20 20 the PATH... 3000: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 3010: 65 74 20 63 6f 72 46 6c 61 67 73 20 5b 65 78 70 et corFlags [exp 3020: 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5b r {.. [ 3030: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e info exists ::en 3040: 76 28 43 6f 72 46 6c 61 67 73 29 5d 20 3f 20 24 v(CorFlags)] ?$
3050: 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 20  ::env(CorFlags)
3060: 3a 20 22 43 6f 72 46 6c 61 67 73 22 0d 0a 20 20  : "CorFlags"..
3070: 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a 20 20 20 20        }]....
3080: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
3090: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
30a0: 6f 20 65 78 65 63 75 74 65 20 43 6f 72 46 6c 61  o execute CorFla
30b0: 67 73 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66  gs on the specif
30c0: 69 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  ied file...
30d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
30e0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
30f0: 20 20 20 20 20 20 65 78 65 63 20 2d 2d 20 24 63        exec -- $c 3100: 6f 72 46 6c 61 67 73 20 5b 66 69 6c 65 20 6e 61 orFlags [file na 3110: 74 69 76 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 tivename$fileNa
3120: 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  me]..        } e
3130: 78 65 63 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  xec] == 0} then
3140: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
3150: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
3160: 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 20 62  : If requested b
3170: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 74  y our caller, at
3180: 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69  tempt to determi
3190: 6e 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ne the..
31a0: 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f    #       platfo
31b0: 72 6d 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  rm for the speci
31c0: 66 69 65 64 20 66 69 6c 65 20 61 73 20 77 65 6c  fied file as wel
31d0: 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  l...          #.
31e0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
31f0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v 3200: 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 arName] > 0} the 3210: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 3220: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 3230: 23 20 4e 4f 54 45 3a 20 53 74 6f 72 65 20 74 68 # NOTE: Store th 3240: 65 20 70 6c 61 74 66 6f 72 6d 20 69 6e 20 74 68 e platform in th 3250: 65 20 6e 61 6d 65 64 20 76 61 72 69 61 62 6c 65 e named variable 3260: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 in the.. 3270: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 3280: 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c text of our call 3290: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er... 32a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 32b0: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
32c0: 20 70 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20   platform....
32d0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
32e0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
32f0: 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61  Attempt to extra
3300: 63 74 20 74 68 65 20 50 45 20 6c 69 6e 65 20 66  ct the PE line f
3310: 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 65 64  rom the captured
3320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
3330: 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49        output.  I
3340: 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20  f this value is
3350: 22 50 45 33 32 22 20 6f 72 20 22 50 45 33 32 2b  "PE32" or "PE32+
3360: 22 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ", the..
3370: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65      #       asse
3380: 6d 62 6c 79 20 66 69 6c 65 20 69 73 20 33 32 2d  mbly file is 32-
3390: 62 69 74 20 6f 72 20 36 34 2d 62 69 74 2c 20 72  bit or 64-bit, r
33a0: 65 73 70 65 63 74 69 76 65 6c 79 3b 0d 0a 20 20  espectively;..
33b0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
33c0: 20 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74 73    otherwise, its
33d0: 20 74 79 70 65 20 69 73 20 75 6e 6b 6e 6f 77 6e   type is unknown
33e0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
33f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
3400: 74 20 70 61 74 74 65 72 6e 20 7b 5e 50 45 20 20  t pattern {^PE
3410: 20 20 20 20 20 20 3a 20 28 50 45 33 32 7c 50 45        : (PE32|PE
3420: 33 32 5c 2b 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20  32\+)\s+$}.... 3430: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 72 if {[r 3440: 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 egexp -line --$
3450: 70 61 74 74 65 72 6e 20 24 65 78 65 63 20 64 75  pattern $exec du 3460: 6d 6d 79 20 70 65 33 32 5d 7d 20 74 68 65 6e 20 mmy pe32]} then 3470: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 3480: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 3490: 20 20 23 20 48 41 43 4b 3a 20 54 68 69 73 20 5b # HACK: This [ 34a0: 73 77 69 74 63 68 5d 20 61 73 73 75 6d 65 73 20 switch] assumes 34b0: 74 68 61 74 20 33 32 2d 62 69 74 20 65 78 65 63 that 32-bit exec 34c0: 75 74 61 62 6c 65 73 20 61 72 65 0d 0a 20 20 20 utables are.. 34d0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 34e0: 20 20 20 61 6c 77 61 79 73 20 78 38 36 20 61 6e always x86 an 34f0: 64 20 74 68 61 74 20 36 34 2d 62 69 74 20 65 78 d that 64-bit ex 3500: 65 63 75 74 61 62 6c 65 73 20 61 72 65 20 61 6c ecutables are al 3510: 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ways.. 3520: 20 20 20 20 23 20 20 20 20 20 20 20 78 36 34 2e # x64. 3530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 3540: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 3550: 20 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d switch -exact - 3560: 2d 20 24 70 65 33 32 20 7b 0d 0a 20 20 20 20 20 -$pe32 {..
3570: 20 20 20 20 20 20 20 20 20 20 20 50 45 33 32 20             PE32
3580: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
3590: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72       set platfor
35a0: 6d 20 57 69 6e 33 32 0d 0a 20 20 20 20 20 20 20  m Win32..
35b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
35c0: 20 20 20 20 20 20 20 20 20 20 20 20 50 45 33 32              PE32
35d0: 2b 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  + {..
35e0: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66         set platf
35f0: 6f 72 6d 20 78 36 34 0d 0a 20 20 20 20 20 20 20  orm x64..
3600: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
3610: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61              defa
3620: 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ult {..
3630: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61           set pla
3640: 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20 20  tform ""..
3650: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
3660: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
3670: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
3680: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
3690: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 22    set platform "
36a0: 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  "..            }
36b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
36c0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
36d0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
36e0: 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61  Attempt to extra
36f0: 63 74 20 74 68 65 20 49 4c 4f 4e 4c 59 20 6c 69  ct the ILONLY li
3700: 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61 70 74  ne from the capt
3710: 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ured..
3720: 23 20 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20  #       output.
3730: 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 20 69   If this value i
3740: 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 70 65 63  s zero, the spec
3750: 69 66 69 65 64 20 66 69 6c 65 20 6d 75 73 74 0d  ified file must.
3760: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
3770: 20 20 20 62 65 20 61 20 6d 69 78 65 64 2d 6d 6f     be a mixed-mo
3780: 64 65 20 61 73 73 65 6d 62 6c 79 3b 20 6f 74 68  de assembly; oth
3790: 65 72 77 69 73 65 2c 20 69 74 20 63 6f 6e 74 61  erwise, it conta
37a0: 69 6e 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20  ins only..
37b0: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61      #       mana
37c0: 67 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d  ged components..
37d0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
37e0: 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74 74          set patt
37f0: 65 72 6e 20 7b 5e 49 4c 4f 4e 4c 59 20 20 20 20  ern {^ILONLY
3800: 3a 20 28 30 7c 31 29 5c 73 2b 24 7d 0d 0a 0d 0a  : (0|1)\s+$}.... 3810: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 3820: 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 regexp -line -- 3830: 24 70 61 74 74 65 72 6e 20 24 65 78 65 63 20 64$pattern $exec d 3840: 75 6d 6d 79 20 69 6c 4f 6e 6c 79 5d 7d 20 74 68 ummy ilOnly]} th 3850: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 3860: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. 3870: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 3880: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 69 if {!$i
3890: 6c 4f 6e 6c 79 7d 20 74 68 65 6e 20 7b 0d 0a 20  lOnly} then {..
38a0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
38b0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20  n true..
38c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
38d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
38e0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
38f0: 3a 20 49 66 20 74 68 65 20 74 65 73 74 20 73 75  : If the test su
3900: 69 74 65 20 63 61 6e 6e 6f 74 20 75 73 65 20 5b  ite cannot use [
3910: 65 78 65 63 5d 20 6f 72 20 65 78 65 63 75 74 69  exec] or executi
3920: 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73 0d 0a  on of CorFlags..
3930: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 61        #       fa
3940: 69 6c 65 64 2c 20 72 65 74 75 72 6e 20 66 61 6c  iled, return fal
3950: 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  se...      #..
3960: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
3970: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3980: 70 72 6f 63 20 69 73 42 75 69 6c 64 41 76 61 69  proc isBuildAvai
3990: 6c 61 62 6c 65 20 7b 20 6e 61 74 69 76 65 20 64  lable { native d
39a0: 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d  irectory {varNam
39b0: 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  e ""} } {..
39c0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
39d0: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c  : Build the full
39e0: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65  y qualified file
39f0: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 70 72   name for the pr
3a00: 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a  imary assembly..
3a10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
3a20: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 79 73  ntaining the Sys
3a30: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
3a40: 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e  managed componen
3a50: 74 73 2e 20 20 49 74 0d 0a 20 20 20 20 20 20 23  ts.  It..      #
3a60: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
3a70: 20 6e 6f 74 65 64 20 74 68 61 74 20 74 68 69 73   noted that this
3a80: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6d   assembly file m
3a90: 61 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 20  ay also contain
3aa0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
3ab0: 20 20 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e     native compon
3ac0: 65 6e 74 73 2c 20 69 66 20 61 20 6e 61 74 69 76  ents, if a nativ
3ad0: 65 20 62 75 69 6c 64 20 69 73 20 69 6e 20 75 73  e build is in us
3ae0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
3af0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
3b00: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
3b10: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72   [file join $dir 3b20: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 ectory \.. 3b30: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 3b40: 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a SQLite.dll]].... 3b50: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 if {![file 3b60: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
3b70: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
3b80: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
3b90: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
3ba0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
3bb0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 61  TE: Attempt to a
3bc0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 74  utomatically det
3bd0: 65 63 74 20 69 66 20 74 68 65 20 70 72 69 6d 61  ect if the prima
3be0: 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ry assembly..
3bf0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61     #       conta
3c00: 69 6e 73 20 61 6e 79 20 6e 61 74 69 76 65 20 63  ins any native c
3c10: 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 6e 65  omponents, if ne
3c20: 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 20  cessary...
3c30: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
3c40: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 74  ring length $nat 3c50: 69 76 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ive] == 0} then 3c60: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 3c70: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
3c80: 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65  arName] > 0} the
3c90: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75  n {..          u
3ca0: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 3cb0: 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20$varName..
3cc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73    }....        s
3cd0: 65 74 20 6e 61 74 69 76 65 20 5b 69 73 4d 69 78  et native [isMix
3ce0: 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20 24  edModeAssembly $3cf0: 66 69 6c 65 4e 61 6d 65 20 24 76 61 72 4e 61 6d fileName$varNam
3d00: 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  e]..      }....
3d10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
3d20: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 70 72 69  NOTE: If the pri
3d30: 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 20 61 6c  mary assembly al
3d40: 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  so contains the
3d50: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74  native component
3d60: 73 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  s,..      #
3d70: 20 20 77 65 20 68 61 76 65 20 65 76 65 72 79 74    we have everyt
3d80: 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20  hing we need...
3d90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
3da0: 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20   {$native} then 3db0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 3dc0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d n true.. }. 3dd0: 0a 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 57 68 61 74 20 69 # NOTE: What i 3df0: 73 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 66 s the platform f 3e00: 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 3f or this machine? 3e10: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 3e20: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6d set platform [m 3e30: 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d achineToPlatform 3e40: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
3e50: 28 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d 0a 20 20  (machine)]....
3e60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
3e70: 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66  OTE: Build the f
3e80: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66  ully qualified f
3e90: 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  ile name for the
3ea0: 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
3eb0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
3ec0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the
3ed0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
3ee0: 74 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e  te native compon
3ef0: 65 6e 74 73 2e 20 20 49 66 20 74 68 69 73 0d 0a  ents.  If this..
3f00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69        #       fi
3f10: 6c 65 20 65 78 69 73 74 73 2c 20 77 65 20 73 68  le exists, we sh
3f20: 6f 75 6c 64 20 68 61 76 65 20 65 76 65 72 79 74  ould have everyt
3f30: 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20  hing we need...
3f40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
3f50: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
3f60: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
3f70: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 3f80: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 y \..$
3f90: 70 6c 61 74 66 6f 72 6d 20 53 51 4c 69 74 65 2e  platform SQLite.
3fa0: 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 0d  Interop.dll]]...
3fb0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65  .      if {[file
3fc0: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam 3fd0: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 3fe0: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d return true. 3ff0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 4000: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b set fileName [ 4010: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 4020: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 [file join$dire
4030: 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20  ctory \..
4040: 20 20 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f     SQLite.Intero
4050: 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20  p.dll]]....
4060: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
4070: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 4080: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 4090: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 40a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 40b0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 # NOTE: Bui 40c0: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 ld the fully qua 40d0: 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 lified file name 40e0: 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 for the SQLite 40f0: 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 core.. # 4100: 20 20 20 20 6c 69 62 72 61 72 79 2e 20 20 49 66 library. If 4110: 20 74 68 69 73 20 66 69 6c 65 20 65 78 69 73 74 this file exist 4120: 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 61 76 s, we should hav 4130: 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 0d e everything we. 4140: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e . # n 4150: 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 eed... #.. 4160: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam 4170: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 4180: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 me [file join$d
4190: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20  irectory \..
41a0: 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20        $platform 41b0: 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a 0d sqlite3.dll]]... 41c0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 . if {[file 41d0: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
41e0: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
41f0: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d      return true.
4200: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
4210: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
4220: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
4230: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65  [file join $dire 4240: 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 ctory \.. 4250: 20 20 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d sqlite3.dll]] 4260: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 .... if {[f 4270: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 ile exists$file
4280: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
4290: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
42a0: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ue..      }....
42b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
42c0: 4e 4f 54 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72  NOTE: One or mor
42d0: 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65  e native compone
42e0: 6e 74 73 20 6e 65 65 64 65 64 20 62 79 20 53 79  nts needed by Sy
42f0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
4300: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4310: 61 72 65 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 20  are missing...
4320: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
4330: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d  urn false..    }
4340: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73  .....    proc is
4350: 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65  ReleaseAvailable
4360: 20 7b 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61   { directory {va
4370: 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20  rName ""} } {..
4380: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
4390: 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65   length $varName 43a0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 43b0: 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 upvar 1$
43c0: 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65  varName $varName 43d0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 43e0: 20 20 20 72 65 74 75 72 6e 20 5b 69 73 42 75 69 return [isBui 43f0: 6c 64 41 76 61 69 6c 61 62 6c 65 20 22 22 20 24 ldAvailable ""$
4400: 64 69 72 65 63 74 6f 72 79 20 24 76 61 72 4e 61  directory $varNa 4410: 6d 65 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 me].. }..... 4420: 20 20 20 70 72 6f 63 20 6a 6f 69 6e 42 75 69 6c proc joinBuil 4430: 64 44 69 72 65 63 74 6f 72 79 20 7b 20 6e 61 74 dDirectory { nat 4440: 69 76 65 20 70 61 74 68 20 79 65 61 72 20 70 6c ive path year pl 4450: 61 74 66 6f 72 6d 20 63 6f 6e 66 69 67 75 72 61 atform configura 4460: 74 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 tion } {.. 4470: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 4480: 20 46 69 67 75 72 65 20 6f 75 74 20 61 6e 64 20 Figure out and 4490: 74 68 65 6e 20 72 65 74 75 72 6e 20 74 68 65 20 then return the 44a0: 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 fully qualified 44b0: 70 61 74 68 20 74 6f 20 74 68 65 20 62 75 69 6c path to the buil 44c0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 44d0: 20 64 69 72 65 63 74 6f 72 79 20 62 61 73 65 64 directory based 44e0: 20 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72 67 75 on all the argu 44f0: 6d 65 6e 74 73 20 70 72 6f 76 69 64 65 64 20 62 ments provided b 4500: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 y our caller... 4510: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 4520: 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 {$native} then
4530: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
4540: 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61  n [file join $pa 4550: 74 68 20 62 69 6e 20 24 79 65 61 72 20 24 70 6c th bin$year $pl 4560: 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 atform$configur
4570: 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d 20  ation]..      }
4580: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
4590: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69  return [file joi
45a0: 6e 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 61  n $path bin$yea
45b0: 72 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  r $configuration 45c0: 20 62 69 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a bin].. }.. 45d0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 45e0: 6f 63 20 67 65 74 42 75 69 6c 64 44 69 72 65 63 oc getBuildDirec 45f0: 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 tory {} {.. 4600: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 4610: 3a 20 53 65 65 20 69 66 20 74 68 65 20 22 6e 61 : See if the "na 4620: 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 tive" runtime op 4630: 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 tion has been se 4640: 74 2e 20 20 49 66 20 73 6f 2c 20 75 73 65 20 74 t. If so, use t 4650: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 4660: 20 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 directory for 4670: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 the mixed-mode a 4680: 73 73 65 6d 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 ssembly (a.k.a. 4690: 74 68 65 20 6e 61 74 69 76 65 20 69 6e 74 65 72 the native inter 46a0: 6f 70 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 op.. # 46b0: 20 20 61 73 73 65 6d 62 6c 79 29 2e 20 20 54 6f assembly). To 46c0: 20 65 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 enable this opt 46d0: 69 6f 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d ion via the comm 46e0: 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 and line, enter 46f0: 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 a.. # 4700: 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 command similar 4710: 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 to one of the f 4720: 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e ollowing (all on 4730: 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 one line):.. 4740: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 #.. # 4750: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 EagleShell.e 4760: 78 65 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d xe -initialize - 4770: 72 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 runtimeOption na 4780: 74 69 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 tive.. # 4790: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 -file .\pa 47a0: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d th\to\all.eagle. 47b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 47c0: 23 20 20 20 20 20 20 20 54 6f 20 65 6e 61 62 6c # To enabl 47d0: 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 e this option vi 47e0: 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 a the command li 47f0: 6e 65 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 ne prior to the 4800: 22 62 65 74 61 20 31 36 22 0d 0a 20 20 20 20 20 "beta 16".. 4810: 20 23 20 20 20 20 20 20 20 72 65 6c 65 61 73 65 # release 4820: 20 6f 66 20 45 61 67 6c 65 2c 20 74 68 65 20 66 of Eagle, the f 4830: 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 ollowing command 4840: 20 6d 75 73 74 20 62 65 20 75 73 65 64 20 69 6e must be used in 4850: 73 74 65 61 64 0d 0a 20 20 20 20 20 20 23 20 20 stead.. # 4860: 20 20 20 20 20 28 61 6c 73 6f 20 61 6c 6c 20 6f (also all o 4870: 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 n one line):.. 4880: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 #.. # 4890: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e EagleShell. 48a0: 65 78 65 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 exe -initialize 48b0: 2d 70 6f 73 74 49 6e 69 74 69 61 6c 69 7a 65 0d -postInitialize. 48c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 . # 48d0: 20 22 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 "object invoke 48e0: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 48f0: 63 74 69 76 65 20 41 64 64 52 75 6e 74 69 6d 65 ctive AddRuntime 4900: 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 22 0d 0a Option native".. 4910: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 4920: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 4930: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 all.eagle.. 4940: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 4950: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 nfo exists ::bui 4960: 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 ld_directory] && 4970: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 4980: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
4990: 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d  build_directory]
49a0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
49b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
49c0: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
49d0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69  ation of the bui
49e0: 6c 64 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  ld directory has
49f0: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
4a00: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ;..        #
4a10: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73     therefore, us
4a20: 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a  e it verbatim...
4a30: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
4a40: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69     return $::bui 4a50: 6c 64 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 ld_directory.. 4a60: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 4a70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4a80: 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 # NOTE: If the 4a90: 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 "native" runtime 4aa0: 20 6f 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 option is set, 4ab0: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 the mixed-mode a 4ac0: 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 ssembly.. 4ad0: 20 23 20 20 20 20 20 20 20 69 73 20 62 65 69 6e # is bein 4ae0: 67 20 74 65 73 74 65 64 2e 20 20 49 6e 20 74 68 g tested. In th 4af0: 61 74 20 63 61 73 65 2c 20 74 68 65 20 70 61 74 at case, the pat 4b00: 68 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 h to the build d 4b10: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 4b20: 20 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 63 # will c 4b30: 6f 6e 74 61 69 6e 20 74 68 65 20 70 6c 61 74 66 ontain the platf 4b40: 6f 72 6d 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c orm name and all 4b50: 20 74 68 65 20 62 69 6e 61 72 69 65 73 20 75 6e the binaries un 4b60: 64 65 72 20 74 65 73 74 0d 0a 20 20 20 20 20 20 der test.. 4b70: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 4b80: 20 62 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 be present in t 4b90: 68 61 74 20 64 69 72 65 63 74 6f 72 79 2e 20 20 hat directory. 4ba0: 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 If the "native" 4bb0: 72 75 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 runtime.. 4bc0: 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 # option 4bd0: 69 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 is not set, the 4be0: 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 build directory 4bf0: 77 69 6c 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 will be consider 4c00: 65 64 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 ed to be.. 4c10: 20 20 23 20 20 20 20 20 20 20 22 70 6c 61 74 66 # "platf 4c20: 6f 72 6d 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 orm-neutral", wi 4c30: 74 68 20 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 th the notable e 4c40: 78 63 65 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 xception of any 4c50: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 native.. 4c60: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly 4c70: 20 28 65 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 (e.g. "SQLite.I 4c80: 6e 74 65 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 nterop.dll") cop 4c90: 69 65 64 20 74 68 65 72 65 20 64 75 72 69 6e 67 ied there during 4ca0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 4cb0: 20 20 20 20 20 20 62 75 69 6c 64 20 70 72 6f 63 build proc 4cc0: 65 73 73 20 69 74 73 65 6c 66 2e 20 20 49 66 20 ess itself. If 4cd0: 74 68 65 20 62 75 69 6c 64 20 70 72 6f 63 65 73 the build proces 4ce0: 73 20 73 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e s somehow does n 4cf0: 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ot.. # 4d00: 20 20 20 20 63 6f 70 79 20 74 68 65 20 6e 61 74 copy the nat 4d10: 69 76 65 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 ive assembly for 4d20: 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 this platform, 4d30: 6d 6f 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 most of the test 4d40: 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 4d50: 20 20 20 69 6e 20 74 68 65 20 73 75 69 74 65 20 in the suite 4d60: 77 69 6c 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 will simply be s 4d70: 6b 69 70 70 65 64 2e 20 20 47 65 6e 65 72 61 6c kipped. General 4d80: 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 ly speaking, the 4d90: 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 re.. # 4da0: 20 20 20 20 61 72 65 20 74 77 6f 20 77 61 79 73 are two ways 4db0: 20 74 6f 20 62 75 69 6c 64 20 74 68 65 20 62 69 to build the bi 4dc0: 6e 61 72 69 65 73 20 77 68 65 6e 20 70 72 65 70 naries when prep 4dd0: 61 72 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 aring to run the 4de0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 4df0: 20 20 74 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 test suite:.. 4e00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4e10: 20 20 23 20 20 20 20 20 20 20 31 2e 20 42 75 69 # 1. Bui 4e20: 6c 64 20 74 68 65 20 73 65 70 61 72 61 74 65 20 ld the separate 4e30: 6d 61 6e 61 67 65 64 20 61 6e 64 20 6e 61 74 69 managed and nati 4e40: 76 65 20 61 73 73 65 6d 62 6c 69 65 73 20 75 73 ve assemblies us 4e50: 69 6e 67 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 ing some.. 4e60: 20 20 23 20 20 20 20 20 20 20 20 20 20 63 6f 6d # com 4e70: 6d 61 6e 64 73 20 73 69 6d 69 6c 61 72 20 74 6f mands similar to 4e80: 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 :.. #.. 4e90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 4ea0: 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e build.bat${Con
4eb0: 66 69 67 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67  figuration}Manag
4ec0: 65 64 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72  edOnly ${Platfor 4ed0: 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 m}.. # 4ee0: 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 build.bat 4ef0: 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e${Configuration
4f00: 7d 4e 61 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c  }NativeOnly ${Pl 4f10: 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 atform}.. 4f20: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 #.. # 4f30: 20 20 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 Where${C
4f40: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73  onfiguration} is
4f50: 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20   either "Debug"
4f60: 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64  or "Release" and
4f70: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4f80: 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d       ${Platform} 4f90: 20 69 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 is either "Win3 4fa0: 32 22 20 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 2" or "x64"... 4fb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4fc0: 20 23 20 20 20 20 20 20 20 32 2e 20 42 75 69 6c # 2. Buil 4fd0: 64 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 d the mixed-mode 4fe0: 20 61 73 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 assembly using 4ff0: 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 a command simila 5000: 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 r to:.. # 5010: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5020: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 build.bat$
5030: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20  {Configuration}
5040: 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20  ${Platform}.. 5050: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5060: 23 20 20 20 20 20 20 20 20 20 20 57 68 65 72 65 # Where 5070: 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e${Configuration
5080: 7d 20 69 73 20 65 69 74 68 65 72 20 22 44 65 62  } is either "Deb
5090: 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22  ug" or "Release"
50a0: 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20   and..        #
50b0: 20 20 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66           ${Platf 50c0: 6f 72 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 orm} is either " 50d0: 57 69 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e Win32" or "x64". 50e0: 20 20 49 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e If this comman 50f0: 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 d is.. # 5100: 20 20 20 20 20 20 20 20 20 75 73 65 64 2c 20 76 used, v 5110: 61 72 69 6f 75 73 20 74 65 73 74 73 20 74 68 61 arious tests tha 5120: 74 20 72 65 71 75 69 72 65 20 73 75 70 70 6c 65 t require supple 5130: 6d 65 6e 74 61 72 79 20 6d 61 6e 61 67 65 64 0d mentary managed. 5140: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 5150: 20 20 20 20 61 73 73 65 6d 62 6c 69 65 73 20 28 assemblies ( 5160: 65 2e 67 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 e.g. LINQ) may b 5170: 65 20 73 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 e skipped unless 5180: 20 74 68 6f 73 65 20 62 69 6e 61 72 69 65 73 0d those binaries. 5190: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 51a0: 20 20 20 20 61 72 65 20 73 75 62 73 65 71 75 65 are subseque 51b0: 6e 74 6c 79 20 63 6f 70 69 65 64 20 69 6e 74 6f ntly copied into 51c0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 64 69 72 the correct dir 51d0: 65 63 74 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d ectory (i.e. by. 51e0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 51f0: 20 20 20 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 "test_all.ba 5200: 74 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d t")... #. 5210: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 5220: 20 4e 6f 74 65 20 74 68 61 74 20 61 6c 6c 20 6f Note that all o 5230: 66 20 74 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d f the build comm 5240: 61 6e 64 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 ands above will 5250: 64 65 66 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 default to using 5260: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5270: 20 20 74 68 65 20 6c 61 74 65 73 74 20 76 65 72 the latest ver 5280: 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 sion of MSBuild 5290: 61 76 61 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 available and th 52a0: 65 20 22 74 65 73 74 5f 79 65 61 72 22 20 6d 61 e "test_year" ma 52b0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 52c0: 20 20 20 6e 65 65 64 20 74 6f 20 62 65 20 61 64 need to be ad 52d0: 6a 75 73 74 65 64 20 61 63 63 6f 72 64 69 6e 67 justed according 52e0: 6c 79 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 ly to actually r 52f0: 75 6e 20 74 68 65 20 74 65 73 74 20 73 75 69 74 un the test suit 5300: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 e... # 5310: 20 20 20 20 52 65 66 65 72 20 74 6f 20 74 68 65 Refer to the 5320: 20 63 6f 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 comments in [ge 5330: 74 42 75 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 tBuildYear] for 5340: 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e more information 5350: 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 on.. # 5360: 20 20 20 20 20 68 6f 77 20 74 6f 20 73 65 74 20 how to set 5370: 74 68 69 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a this variable... 5380: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 5390: 20 20 20 73 65 74 20 6e 61 74 69 76 65 20 5b 68 set native [h 53a0: 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 asRuntimeOption 53b0: 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 native].... 53c0: 20 20 20 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 42 return [joinB 53d0: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e uildDirectory$n
53e0: 61 74 69 76 65 20 5b 67 65 74 42 75 69 6c 64 42  ative [getBuildB
53f0: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d  aseDirectory] \.
5400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
5410: 74 42 75 69 6c 64 59 65 61 72 5d 20 5b 67 65 74  tBuildYear] [get
5420: 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e  BuildPlatform $n 5430: 61 74 69 76 65 5d 20 5b 67 65 74 42 75 69 6c 64 ative] [getBuild 5440: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 5d 0d Configuration]]. 5450: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 5460: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 5470: 52 65 6c 65 61 73 65 56 65 72 73 69 6f 6e 20 7b ReleaseVersion { 5480: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 5490: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 # NOTE: Figu 54a0: 72 65 20 6f 75 74 20 74 68 65 20 72 65 6c 65 61 re out the relea 54b0: 73 65 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 75 se version for u 54c0: 73 65 20 77 69 74 68 20 74 68 65 20 62 75 69 6c se with the buil 54d0: 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 d directory.. 54e0: 20 20 20 23 20 20 20 20 20 20 20 77 68 65 6e 20 # when 54f0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 61 76 61 checking for ava 5500: 69 6c 61 62 6c 65 20 72 65 6c 65 61 73 65 73 2e ilable releases. 5510: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5520: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 5530: 73 20 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 s ::release_vers 5540: 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ion] && \.. 5550: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 5560: 67 74 68 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 gth$::release_v
5570: 65 72 73 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65  ersion] > 0} the
5580: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
5590: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
55a0: 54 68 65 20 72 65 6c 65 61 73 65 20 76 65 72 73  The release vers
55b0: 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ion has been ove
55c0: 72 72 69 64 64 65 6e 3b 20 74 68 65 72 65 66 6f  rridden; therefo
55d0: 72 65 2c 20 75 73 65 20 69 74 0d 0a 20 20 20 20  re, use it..
55e0: 20 20 20 20 23 20 20 20 20 20 20 20 76 65 72 62      #       verb
55f0: 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23  atim...        #
5600: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
5610: 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73   $::release_vers 5620: 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ion.. } els 5630: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 5640: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 5650: 4e 6f 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 No release versi 5660: 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c on is available, 5670: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 return an empty 5680: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 string... 5690: 20 20 23 20 20 20 20 20 20 20 49 74 20 69 73 20 # It is 56a0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 important to ret 56b0: 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 urn an empty str 56c0: 69 6e 67 20 68 65 72 65 20 62 65 63 61 75 73 65 ing here because 56d0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 56e0: 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 result of 56f0: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d this procedure m 5700: 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20 ay be used with 5710: 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 [file join]... 5720: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5730: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 5740: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 5750: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 proc getBuild 5760: 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e FileName { fileN 5770: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 ame {platform "" 5780: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 5790: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 57a0: 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 turns the specif 57b0: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 ied file name as 57c0: 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 if it were loca 57d0: 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 ted in the.. 57e0: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 # build 57f0: 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 directory, disca 5800: 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 rding any direct 5810: 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 ory information 5820: 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 present.. # 5830: 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 in the fi 5840: 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 le name as provi 5850: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle 5860: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 r... #.. 5870: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 66 set result [f 5880: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c ile nativename \ 5890: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c .. [fil 58a0: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 e join [getBuild 58b0: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 Directory]$plat
58c0: 66 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20  form [file tail
58d0: 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 0d 0a  $fileName]]].... 58e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 58f0: 20 48 41 43 4b 3a 20 57 68 65 6e 20 72 75 6e 6e HACK: When runn 5900: 69 6e 67 20 6f 6e 20 57 6f 57 36 34 2c 20 61 73 ing on WoW64, as 5910: 73 75 6d 65 20 74 68 65 20 74 65 73 74 20 65 78 sume the test ex 5920: 65 63 75 74 61 62 6c 65 73 20 61 72 65 20 70 72 ecutables are pr 5930: 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 esent.. # 5940: 20 20 20 20 20 77 69 74 68 20 74 68 65 20 22 33 with the "3 5950: 32 22 20 73 75 66 66 69 78 20 6f 6e 20 74 68 65 2" suffix on the 5960: 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 m... #.. 5970: 20 20 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 6e if {[isRunnin 5980: 67 57 6f 57 36 34 5d 20 26 26 20 5b 66 69 6c 65 gWoW64] && [file 5990: 20 65 78 74 65 6e 73 69 6f 6e 20 24 72 65 73 75 extension$resu
59a0: 6c 74 5d 20 65 71 20 22 2e 65 78 65 22 7d 20 74  lt] eq ".exe"} t
59b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
59c0: 65 74 20 72 65 73 75 6c 74 20 5b 61 70 70 65 6e  et result [appen
59d0: 64 41 72 67 73 20 5b 66 69 6c 65 20 72 6f 6f 74  dArgs [file root
59e0: 6e 61 6d 65 20 24 72 65 73 75 6c 74 5d 20 33 32  name $result] 32 59f0: 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a .exe].. }.. 5a00: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
5a10: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
5a20: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 45 78  ..    proc getEx
5a30: 74 65 72 6e 61 6c 44 69 72 65 63 74 6f 72 79 20  ternalDirectory
5a40: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
5a50: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
5a60: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75  s procedure retu
5a70: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72  rns the director
5a80: 79 20 77 68 65 72 65 20 74 68 65 20 65 78 74 65  y where the exte
5a90: 72 6e 61 6c 20 62 69 6e 61 72 79 0d 0a 20 20 20  rnal binary..
5aa0: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73     #       files
5ab0: 20 61 72 65 20 6c 6f 63 61 74 65 64 2e 0d 0a 20   are located...
5ac0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
5ad0: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76  turn [file nativ
5ae0: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e  ename [file dirn
5af0: 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  ame [file dirnam
5b00: 65 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 5d  e [info binary]]
5b10: 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ]]..    }.....
5b20: 20 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79    proc getBinary
5b30: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a  Directory {} {..
5b40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
5b50: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63   NOTE: This proc
5b60: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68  edure returns th
5b70: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72  e directory wher
5b80: 65 20 74 68 65 20 74 65 73 74 20 61 70 70 6c 69  e the test appli
5b90: 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  cation..      #
5ba0: 20 20 20 20 20 20 69 74 73 65 6c 66 20 28 69 2e        itself (i.
5bb0: 65 2e 20 74 68 65 20 45 61 67 6c 65 20 73 68 65  e. the Eagle she
5bc0: 6c 6c 29 20 69 73 20 6c 6f 63 61 74 65 64 2e 20  ll) is located.
5bd0: 20 54 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73   This will be us
5be0: 65 64 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20  ed as..      #
5bf0: 20 20 20 20 20 74 68 65 20 64 65 73 74 69 6e 61       the destina
5c00: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 63 6f 70  tion for the cop
5c10: 69 65 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ied System.Data.
5c20: 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 61 6e  SQLite native an
5c30: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
5c40: 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
5c50: 69 65 73 20 28 69 2e 65 2e 20 62 65 63 61 75 73  ies (i.e. becaus
5c60: 65 20 74 68 69 73 20 69 73 20 6f 6e 65 20 6f 66  e this is one of
5c70: 20 74 68 65 20 66 65 77 20 70 6c 61 63 65 73 0d   the few places.
5c80: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77  .      #       w
5c90: 68 65 72 65 20 74 68 65 20 43 4c 52 20 77 69 6c  here the CLR wil
5ca0: 6c 20 61 63 74 75 61 6c 6c 79 20 66 69 6e 64 20  l actually find
5cb0: 61 6e 64 20 6c 6f 61 64 20 74 68 65 6d 20 70 72  and load them pr
5cc0: 6f 70 65 72 6c 79 29 2e 0d 0a 20 20 20 20 20 20  operly)...
5cd0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
5ce0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 69 6e 61  fo exists ::bina
5cf0: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26  ry_directory] &&
5d00: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
5d10: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 5d20: 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 binary_directory 5d30: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 5d40: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 5d50: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f # NOTE: The lo 5d60: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 69 cation of the bi 5d70: 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 nary directory h 5d80: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 as been overridd 5d90: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 en;.. # 5da0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 therefore, 5db0: 75 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e use it verbatim. 5dc0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 5dd0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 return$::b
5de0: 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d  inary_directory.
5df0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
5e00: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
5e10: 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20  [info binary]..
5e20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
5e30: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 45 78  ..    proc getEx
5e40: 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 7b  ternalFileName {
5e50: 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20   fileName } {..
5e60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
5e70: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68  NOTE: Returns th
5e80: 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65  e specified file
5e90: 20 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 77   name as if it w
5ea0: 65 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74  ere located in t
5eb0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
5ec0: 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74    directory cont
5ed0: 61 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65 72  aining the exter
5ee0: 6e 61 6c 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20  nal binaries...
5ef0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
5f00: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76  turn [file nativ
5f10: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
5f20: 20 5b 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72   [getExternalDir
5f30: 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d  ectory] $fileNam 5f40: 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 e]].. }..... 5f50: 20 20 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 proc getBinar 5f60: 79 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 yFileName { file 5f70: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 Name {platform " 5f80: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d "} } {.. #. 5f90: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 5fa0: 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 eturns the speci 5fb0: 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 fied file name a 5fc0: 73 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 s if it were loc 5fd0: 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 ated in the.. 5fe0: 20 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 # binar 5ff0: 79 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 y directory, dis 6000: 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 carding any dire 6010: 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f ctory informatio 6020: 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 n present.. 6030: 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 # in the 6040: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f file name as pro 6050: 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c vided by our cal 6060: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 6070: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 6080: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a e nativename \.. 6090: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 60a0: 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 join [getBinaryD 60b0: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 irectory]$platf
60c0: 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  orm [file tail $60d0: 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 fileName]]].. 60e0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 60f0: 67 65 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c getCoreBinaryFil 6100: 65 4e 61 6d 65 20 7b 20 7b 70 6c 61 74 66 6f 72 eName { {platfor 6110: 6d 20 22 22 7d 20 7b 73 74 61 6e 64 61 72 64 20 m ""} {standard 6120: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 6130: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 6140: 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 66 E: Returns the f 6150: 75 6c 6c 20 70 61 74 68 20 66 6f 72 20 74 68 65 ull path for the 6160: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 file containing 6170: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 the SQLite core 6180: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 6190: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 63 native library c 61a0: 6f 64 65 20 66 6f 72 20 74 68 69 73 20 70 6c 61 ode for this pla 61b0: 74 66 6f 72 6d 2e 20 20 46 69 72 73 74 2c 20 63 tform. First, c 61c0: 68 65 63 6b 20 61 6e 64 20 73 65 65 20 69 66 0d heck and see if. 61d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 61e0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6e he SQLite core n 61f0: 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 68 61 ative library ha 6200: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6c s already been l 6210: 6f 61 64 65 64 2e 20 20 4e 65 78 74 2c 0d 0a 20 oaded. Next,.. 6220: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 61 6c # fal 6230: 6c 62 61 63 6b 20 74 6f 20 77 68 61 74 20 74 68 lback to what th 6240: 65 20 66 75 6c 6c 20 70 61 74 68 20 73 68 6f 75 e full path shou 6250: 6c 64 20 62 65 2c 20 62 61 73 65 64 20 6f 6e 20 ld be, based on 6260: 77 68 65 74 68 65 72 20 74 68 65 0d 0a 20 20 20 whether the.. 6270: 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 65 64 # mixed 6280: 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 69 -mode assembly i 6290: 73 20 62 65 69 6e 67 20 75 73 65 64 20 61 6e 64 s being used and 62a0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 the name of the 62b0: 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 current.. 62c0: 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d # platform 62d0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 62e0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 62f0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 6300: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 6310: 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 6320: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 6330: 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 ta.SQLite.Unsafe 6340: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5f 53 NativeMethods _S 6350: 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c QLiteNativeModul 6360: 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 eFileName.. 6370: 20 7d 20 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 } fileName] == 6380: 30 20 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e 0 && [string len 6390: 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e gth$fileName] >
63a0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
63b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
63c0: 20 4e 4f 54 45 3a 20 54 68 65 20 53 51 4c 69 74   NOTE: The SQLit
63d0: 65 20 63 6f 72 65 20 6e 61 74 69 76 65 20 6c 69  e core native li
63e0: 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 61 64  brary has alread
63f0: 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 76 69  y been loaded vi
6400: 61 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  a..        #
6410: 20 20 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69     the native li
6420: 62 72 61 72 79 20 70 72 65 2d 6c 6f 61 64 65 72  brary pre-loader
6430: 2e 20 20 52 65 74 75 72 6e 20 74 68 61 74 20 66  .  Return that f
6440: 69 6c 65 20 6e 61 6d 65 20 6e 6f 77 2e 0d 0a 20  ile name now...
6450: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
6460: 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61    return $fileNa 6470: 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 me.. }.... 6480: 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e if {[hasRun 6490: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 timeOption nativ 64a0: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 64b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 64c0: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 NOTE: Return th 64d0: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 64e0: 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e embly file name. 64f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 6500: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 6510: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a e nativename \.. 6520: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 6530: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 e join [getBinar 6540: 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 yDirectory]$pla
6550: 74 66 6f 72 6d 20 53 79 73 74 65 6d 2e 44 61 74  tform System.Dat
6560: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a  a.SQLite.dll]]..
6570: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
6580: 24 73 74 61 6e 64 61 72 64 7d 20 74 68 65 6e 20  $standard} then 6590: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 65a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 65b0: 74 75 72 6e 20 74 68 65 20 6e 61 74 69 76 65 2d turn the native- 65c0: 6f 6e 6c 79 20 73 74 61 6e 64 61 72 64 20 53 51 only standard SQ 65d0: 4c 69 74 65 20 6c 69 62 72 61 72 79 20 66 69 6c Lite library fil 65e0: 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 e name... 65f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 6600: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e rn [file nativen 6610: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 6620: 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 [file join [g 6630: 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 etBinaryDirector 6640: 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 73 71 6c y]$platform sql
6650: 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20  ite3.dll]]..
6660: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
6670: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6680: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68   NOTE: Return th
6690: 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e  e native-only in
66a0: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66  terop assembly f
66b0: 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ile name...
66c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
66d0: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76  turn [file nativ
66e0: 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  ename \..
66f0: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20       [file join
6700: 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74  [getBinaryDirect
6710: 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 53  ory] $platform S 6720: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c QLite.Interop.dl 6730: 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 l]].. }.. 6740: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 6750: 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 getCommonDirect 6760: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ory {} {.. 6770: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 6780: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure 6790: 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 returns the dire 67a0: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 ctory where the 67b0: 74 65 73 74 20 73 63 72 69 70 74 73 0d 0a 20 20 test scripts.. 67c0: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 67d0: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 ld be located. 67e0: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 By default, this 67f0: 20 6a 75 73 74 20 72 65 74 75 72 6e 73 20 74 68 just returns th 6800: 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 e Eagle.. # 6810: 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64 69 binary di 6820: 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 rectory... 6830: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 6840: 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d fo exists ::comm 6850: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 on_directory] && 6860: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 6870: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
6880: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
6890: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
68a0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
68b0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
68c0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  cation of the co
68d0: 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79 20 68  mmon directory h
68e0: 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20  as been set;..
68f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
6900: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e  erefore, use it.
6910: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6920: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 63       return $::c 6930: 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 0d ommon_directory. 6940: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 6950: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 6960: 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 vendor_directory 6970: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 6980: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 6990: 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63$::vendor_direc
69a0: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tory] > 0} then
69b0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
69c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
69d0: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  e location of th
69e0: 65 20 76 65 6e 64 6f 72 20 64 69 72 65 63 74 6f  e vendor directo
69f0: 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b  ry has been set;
6a00: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
6a10: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
6a20: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
6a30: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
6a40: 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74  $::vendor_direct 6a50: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ory.. } els 6a60: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 eif {[info exist 6a70: 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d s ::tcl_library] 6a80: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 6a90: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 6aa0: 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 20$::tcl_library]
6ab0: 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  > 0 && \..
6ac0: 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69 72 65      [file isdire
6ad0: 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c 69 62  ctory $::tcl_lib 6ae0: 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rary]} then {.. 6af0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 6b00: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 # NOTE: The va 6b10: 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 riable with the 6b20: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 location of the 6b30: 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 69 script library i 6b40: 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 6b50: 20 20 20 73 65 74 20 61 6e 64 20 61 70 70 65 61 set and appea 6b60: 72 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 rs to be a real 6b70: 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e 20 directory (i.e. 6b80: 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a 20 20 not embedded.. 6b90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 # wi 6ba0: 74 68 69 6e 20 61 20 66 69 6c 65 29 3b 20 74 68 thin a file); th 6bb0: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e erefore, use it. 6bc0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 6bd0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 return$::t
6be0: 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20 20 20  cl_library..
6bf0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
6c00: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6c10: 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20   NOTE: Fallback
6c20: 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  to the directory
6c30: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the
6c40: 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20 20 20  executable...
6c50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6c60: 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e  return [info bin
6c70: 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ary]..      }..
6c80: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
6c90: 63 20 67 65 74 44 61 74 61 62 61 73 65 44 69 72  c getDatabaseDir
6ca0: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20  ectory {} {..
6cb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
6cc0: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
6cd0: 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  re returns the d
6ce0: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74  irectory where t
6cf0: 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 65  he test database
6d00: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
6d10: 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74   should be locat
6d20: 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ed.  By default,
6d30: 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 20   this just uses
6d40: 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20  the temporary..
6d50: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72       #       dir
6d60: 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 65  ectory configure
6d70: 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 65  d for this syste
6d80: 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  m...      #..
6d90: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
6da0: 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 5f 64  sts ::database_d
6db0: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
6dc0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
6dd0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 61  g length $::data 6de0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 6df0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 6e00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 6e10: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 6e20: 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 tion of the data 6e30: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 68 base directory h 6e40: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 as been overridd 6e50: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 en;.. # 6e60: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 therefore, 6e70: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 use it... 6e80: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 6e90: 72 6e 20 24 3a 3a 64 61 74 61 62 61 73 65 5f 64 rn$::database_d
6ea0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
6eb0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20  } elseif {[info
6ec0: 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68  exists ::scratch
6ed0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c  _directory] && \
6ee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
6ef0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63  ing length $::sc 6f00: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d ratch_directory] 6f10: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 6f20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 6f30: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 # NOTE: The loc 6f40: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 ation of the scr 6f50: 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68 atch directory h 6f60: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 as been overridd 6f70: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 en;.. # 6f80: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 therefore, 6f90: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 use it... 6fa0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 6fb0: 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 rn$::scratch_di
6fc0: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
6fd0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
6fe0: 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70   return [getTemp
6ff0: 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20  oraryPath]..
7000: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
7010: 20 20 20 70 72 6f 63 20 67 65 74 54 65 6d 70 6f     proc getTempo
7020: 72 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b 7d  raryDirectory {}
7030: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
7040: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
7050: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e  procedure return
7060: 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  s the directory
7070: 77 68 65 72 65 20 74 68 65 20 74 65 6d 70 6f 72  where the tempor
7080: 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 20 20 20  ary files..
7090: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
70a0: 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20  be located.  By
70b0: 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75  default, this ju
70c0: 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d 70  st uses the temp
70d0: 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20  orary..      #
70e0: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63       directory c
70f0: 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 68  onfigured for th
7100: 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20  is system...
7110: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
7120: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
7130: 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72  mporary_director
7140: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
7150: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
7160: 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64  h $::temporary_d 7170: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 7180: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 7190: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 71a0: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 71b0: 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 f the temporary 71c0: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 directory has be 71d0: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a en overridden;.. 71e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 71f0: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 therefore, use i 7200: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 7210: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
7220: 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63  :temporary_direc
7230: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tory..      } el
7240: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
7250: 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72  ts ::scratch_dir
7260: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
7270: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
7280: 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63  length $::scratc 7290: 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 h_directory] > 0 72a0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 72b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 72c0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 72d0: 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 63 68 n of the scratch 72e0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 directory has b 72f0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d een overridden;. 7300: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 7310: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 7320: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a it... #.. 7330: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
7340: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
7350: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ory..      } els
7360: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e {..        ret
7370: 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72  urn [getTemporar
7380: 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d  yPath]..      }.
7390: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
73a0: 72 6f 63 20 67 65 74 45 78 65 63 75 74 65 4f 6e  roc getExecuteOn
73b0: 53 65 74 75 70 20 7b 7d 20 7b 0d 0a 20 20 20 20  Setup {} {..
73c0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
73d0: 74 73 20 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f  ts ::execute_on_
73e0: 73 65 74 75 70 5d 20 26 26 20 5c 0d 0a 20 20 20  setup] && \..
73f0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
7400: 65 6e 67 74 68 20 24 3a 3a 65 78 65 63 75 74 65  ength $::execute 7410: 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e 20 30 7d 20 _on_setup] > 0} 7420: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7430: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 7440: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 63 6f E: Return the co 7450: 6e 66 69 67 75 72 65 64 20 53 51 4c 20 74 6f 20 nfigured SQL to 7460: 65 78 65 63 75 74 65 20 64 75 72 69 6e 67 20 74 execute during t 7470: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 he connection.. 7480: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s 7490: 65 74 75 70 20 70 72 6f 63 65 64 75 72 65 20 28 etup procedure ( 74a0: 69 2e 65 2e 20 66 6f 72 20 65 76 65 72 79 20 74 i.e. for every t 74b0: 65 73 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e est database con 74c0: 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 nection)... 74d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 74e0: 74 75 72 6e 20 24 3a 3a 65 78 65 63 75 74 65 5f turn$::execute_
74f0: 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 20 20 20 20  on_setup..
7500: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
7510: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
7520: 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74 2c  OTE: By default,
7530: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 53 51 4c   there is no SQL
7540: 20 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 69   to execute duri
7550: 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  ng the connectio
7560: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
7570: 20 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 75     setup procedu
7580: 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 65  re (i.e. for eve
7590: 72 79 20 74 65 73 74 20 64 61 74 61 62 61 73 65  ry test database
75a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20   connection)...
75b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
75c0: 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
75d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
75e0: 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 73 74      proc getTest
75f0: 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d 62 6c  OverridesPreambl
7600: 65 20 7b 20 7b 65 78 74 72 61 56 61 72 4e 61 6d  e { {extraVarNam
7610: 65 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20  es ""} } {..
7620: 20 20 73 65 74 20 76 61 72 4e 61 6d 65 73 20 5b    set varNames [
7630: 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23  list]....      #
7640: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
7650: 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 73 74  If available, st
7660: 61 72 74 20 77 69 74 68 20 74 68 65 20 6d 61 73  art with the mas
7670: 74 65 72 20 6c 69 73 74 20 6f 66 20 74 65 73 74  ter list of test
7680: 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 20   override..
7690: 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c   #       variabl
76a0: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  es...      #..
76b0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
76c0: 69 73 74 73 20 3a 3a 74 65 73 74 5f 6f 76 65 72  ists ::test_over
76d0: 72 69 64 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20  rides] && \..
76e0: 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20         [llength
76f0: 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65  $::test_override 7700: 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a s] > 0} then {.. 7710: 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 eval lap 7720: 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 3a pend varNames$:
7730: 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 0d  :test_overrides.
7740: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
7750: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
7760: 45 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 20  E: If requested
7770: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61  by our caller, a
7780: 64 64 20 61 6e 79 20 61 64 64 69 74 69 6f 6e 61  dd any additiona
7790: 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20  l variable..
77a0: 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 73 20    #       names
77b0: 74 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a 20 20  to copy now...
77c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
77d0: 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 78 74 72 61  {[llength $extra 77e0: 56 61 72 4e 61 6d 65 73 5d 20 3e 20 30 7d 20 74 VarNames] > 0} t 77f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 hen {.. e 7800: 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72 4e val lappend varN 7810: 61 6d 65 73 20 24 65 78 74 72 61 56 61 72 4e 61 ames$extraVarNa
7820: 6d 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  mes..      }....
7830: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
7840: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
7850: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
7860: 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20   to be returned
7870: 62 79 20 70 72 6f 63 65 73 73 69 6e 67 20 65 61  by processing ea
7880: 63 68 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ch..      #
7890: 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20    variable name
78a0: 61 6e 64 20 61 64 64 69 6e 67 20 74 68 65 20 6e  and adding the n
78b0: 65 63 65 63 65 73 73 61 72 79 20 73 63 72 69 70  ececessary scrip
78c0: 74 20 66 72 61 67 6d 65 6e 74 73 20 66 6f 72 0d  t fragments for.
78d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65  .      #       e
78e0: 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20  ach one...
78f0: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73  #..      set res
7900: 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 20 20 20  ult ""....
7910: 66 6f 72 65 61 63 68 20 76 61 72 4e 61 6d 65 20  foreach varName
7920: 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  $varNames {.. 7930: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 7940: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th 7950: 65 20 71 75 61 6c 69 66 69 65 64 20 67 6c 6f 62 e qualified glob 7960: 61 6c 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 al variable name 7970: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 7980: 20 20 20 20 20 20 73 65 74 20 66 75 6c 6c 56 61 set fullVa 7990: 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 rName [appendArg 79a0: 73 20 3a 3a 20 24 76 61 72 4e 61 6d 65 5d 0d 0a s ::$varName]..
79b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
79c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65       # NOTE: Doe
79d0: 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 65  s the variable e
79e0: 78 69 73 74 20 69 6e 20 74 68 69 73 20 69 6e 74  xist in this int
79f0: 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78 74  erpreter context
7a00: 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ?..        #..
7a10: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
7a20: 65 78 69 73 74 73 20 24 66 75 6c 6c 56 61 72 4e  exists $fullVarN 7a30: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 7a40: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 7a50: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 70 70 # NOTE: App 7a60: 65 6e 64 20 61 20 73 63 72 69 70 74 20 66 72 61 end a script fra 7a70: 67 6d 65 6e 74 20 74 6f 20 74 68 65 20 72 65 73 gment to the res 7a80: 75 6c 74 20 74 68 61 74 20 77 69 6c 6c 20 63 6f ult that will co 7a90: 72 72 65 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 rrectly.. 7aa0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 20 # copy 7ab0: 61 6e 79 20 63 6f 6e 74 61 69 6e 65 64 20 76 61 any contained va 7ac0: 6c 75 65 20 74 6f 20 61 6e 6f 74 68 65 72 20 69 lue to another i 7ad0: 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 nterpreter conte 7ae0: 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 xt... # 7af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65 .. appe 7b00: 6e 64 20 72 65 73 75 6c 74 20 5c 6e 20 22 73 65 nd result \n "se 7b10: 74 20 22 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 t "$fullVarName
7b20: 20 22 20 5c 7b 22 20 5b 73 65 74 20 24 66 75 6c   " \{" [set $ful 7b30: 6c 56 61 72 4e 61 6d 65 5d 20 5c 7d 0d 0a 20 20 lVarName] \}.. 7b40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 7b50: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 7b60: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th 7b70: 65 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e e result contain 7b80: 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 63 s one or more sc 7b90: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 2c 20 ript fragments, 7ba0: 61 70 70 65 6e 64 20 61 0d 0a 20 20 20 20 20 20 append a.. 7bb0: 23 20 20 20 20 20 20 20 6e 65 77 6c 69 6e 65 2e # newline. 7bc0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 7bd0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 7be0: 67 74 68 20 24 72 65 73 75 6c 74 5d 20 3e 20 30 gth$result] > 0
7bf0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
7c00: 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20    append result
7c10: 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  \n..      }....
7c20: 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res 7c30: 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ult.. }..... 7c40: 20 20 20 70 72 6f 63 20 67 65 74 41 70 70 44 6f proc getAppDo 7c50: 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20 7b 20 7b mainPreamble { { 7c60: 70 72 65 66 69 78 20 22 22 7d 20 7b 73 75 66 66 prefix ""} {suff 7c70: 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 ix ""} } {.. 7c80: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 7c90: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 7ca0: 65 20 72 65 74 75 72 6e 73 20 61 20 74 65 73 74 e returns a test 7cb0: 20 73 65 74 75 70 20 73 63 72 69 70 74 20 66 72 setup script fr 7cc0: 61 67 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 agment suitable 7cd0: 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 for.. # 7ce0: 20 20 20 65 76 61 6c 75 61 74 69 6f 6e 20 62 79 evaluation by 7cf0: 20 61 6e 20 69 6e 74 65 72 70 72 65 74 65 72 20 an interpreter 7d00: 63 72 65 61 74 65 64 20 69 6e 20 61 6e 20 69 73 created in an is 7d10: 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 olated applicati 7d20: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 on.. # 7d30: 20 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65 20 73 domain. The s 7d40: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 cript fragment b 7d50: 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77 69 eing returned wi 7d60: 6c 6c 20 62 65 20 73 75 72 72 6f 75 6e 64 65 64 ll be surrounded 7d70: 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 by.. # 7d80: 20 20 20 74 68 65 20 70 72 65 66 69 78 20 61 6e the prefix an 7d90: 64 20 73 75 66 66 69 78 20 22 73 63 72 69 70 74 d suffix "script 7da0: 20 66 72 61 67 6d 65 6e 74 73 22 20 73 70 65 63 fragments" spec 7db0: 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c ified by our cal 7dc0: 6c 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 ler,.. # 7dd0: 20 20 20 20 69 66 20 61 6e 79 2e 20 20 54 68 65 if any. The 7de0: 20 65 6e 74 69 72 65 20 73 63 72 69 70 74 20 62 entire script b 7df0: 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77 69 eing returned wi 7e00: 6c 6c 20 62 65 20 73 75 62 73 74 69 74 75 74 65 ll be substitute 7e10: 64 20 76 69 61 0d 0a 20 20 20 20 20 20 23 20 20 d via.. # 7e20: 20 20 20 20 20 5b 73 75 62 73 74 5d 2c 20 69 6e [subst], in 7e30: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of 7e40: 6f 75 72 20 63 61 6c 6c 65 72 2c 20 62 65 66 6f our caller, befo 7e50: 72 65 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 re being returne 7e60: 64 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 d... # 7e70: 20 20 54 68 69 73 20 73 74 65 70 20 69 73 20 6e This step is n 7e80: 65 63 65 73 73 61 72 79 20 73 6f 20 74 68 61 74 ecessary so that 7e90: 20 73 6f 6d 65 20 6c 69 6d 69 74 65 64 20 63 6f some limited co 7ea0: 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61 74 69 6f ntext informatio 7eb0: 6e 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 n,.. # 7ec0: 20 20 70 72 69 6d 61 72 69 6c 79 20 72 65 6c 61 primarily rela 7ed0: 74 65 64 20 74 6f 20 74 68 65 20 74 65 73 74 69 ted to the testi 7ee0: 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73 2c 20 ng directories, 7ef0: 63 61 6e 20 62 65 20 74 72 61 6e 73 66 65 72 72 can be transferr 7f00: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # 7f10: 20 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 to the interpr 7f20: 65 74 65 72 20 69 6e 20 74 68 65 20 69 73 6f 6c eter in the isol 7f30: 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e ated application 7f40: 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 domain, making 7f50: 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 it.. # 7f60: 20 20 61 62 6c 65 20 74 6f 20 73 75 63 63 65 73 able to succes 7f70: 73 66 75 6c 6c 79 20 72 75 6e 20 74 65 73 74 73 sfully run tests 7f80: 20 74 68 61 74 20 72 65 71 75 69 72 65 20 6f 6e that require on 7f90: 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 e or more of the 7fa0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7fb0: 66 69 6c 65 73 20 69 6e 20 6f 6e 65 20 6f 66 20 files in one of 7fc0: 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72 65 the testing dire 7fd0: 63 74 6f 72 69 65 73 2e 20 20 43 61 6c 6c 65 72 ctories. Caller 7fe0: 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 69 6e s should keep in 7ff0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8000: 6d 69 6e 64 20 74 68 61 74 20 74 68 65 20 74 65 mind that the te 8010: 73 74 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 st script fragme 8020: 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 nt being returne 8030: 64 20 63 61 6e 6e 6f 74 20 72 65 6c 79 20 6f 6e d cannot rely on 8040: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8050: 61 6e 79 20 73 63 72 69 70 74 20 6c 69 62 72 61 any script libra 8060: 72 79 20 70 72 6f 63 65 64 75 72 65 73 20 74 68 ry procedures th 8070: 61 74 20 61 72 65 20 6e 6f 74 20 70 72 6f 76 69 at are not provi 8080: 64 65 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 ded by the Eagle 8090: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 80a0: 6c 69 62 72 61 72 79 20 70 61 63 6b 61 67 65 20 library package 80b0: 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61 67 6c (i.e. "init.eagl 80c0: 65 22 29 2c 20 69 6e 63 6c 75 64 69 6e 67 20 74 e"), including t 80d0: 68 6f 73 65 20 70 72 6f 76 69 64 65 64 20 62 79 hose provided by 80e0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 80f0: 74 68 65 20 45 61 67 6c 65 20 74 65 73 74 20 70 the Eagle test p 8100: 61 63 6b 61 67 65 2c 20 75 6e 6c 65 73 73 20 74 ackage, unless t 8110: 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 he file containi 8120: 6e 67 20 74 68 65 6d 20 69 73 20 6c 6f 61 64 65 ng them is loade 8130: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 8140: 20 6d 61 6e 75 61 6c 6c 79 20 76 69 61 20 73 6f manually via so 8150: 6d 65 20 6f 74 68 65 72 20 6d 65 63 68 61 6e 69 me other mechani 8160: 73 6d 20 28 65 2e 67 2e 20 62 79 20 69 6e 63 6c sm (e.g. by incl 8170: 75 64 69 6e 67 20 61 70 70 72 6f 70 72 69 61 74 uding appropriat 8180: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 8190: 20 5b 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 [package requir 81a0: 65 5d 20 6f 72 20 5b 73 6f 75 72 63 65 5d 20 63 e] or [source] c 81b0: 6f 6d 6d 61 6e 64 73 20 69 6e 20 74 68 65 20 70 ommands in the p 81c0: 72 65 66 69 78 20 6f 72 20 73 75 66 66 69 78 0d refix or suffix. 81d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 81e0: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 29 cript fragments) 81f0: 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20 76 61 72 . Also, all var 8200: 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 iable references 8210: 20 61 6e 64 20 61 6c 6c 20 6e 65 73 74 65 64 0d and all nested. 8220: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 8230: 6f 6d 6d 61 6e 64 73 20 28 69 2e 65 2e 20 74 68 ommands (i.e. th 8240: 6f 73 65 20 69 6e 20 73 71 75 61 72 65 20 62 72 ose in square br 8250: 61 63 6b 65 74 73 29 20 63 6f 6e 74 61 69 6e 65 ackets) containe 8260: 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 0d 0a d in the final.. 8270: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 63 # sc 8280: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 77 69 ript fragment wi 8290: 6c 6c 20 65 6e 64 20 75 70 20 62 65 69 6e 67 20 ll end up being 82a0: 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68 65 evaluated in the 82b0: 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 0d context of the. 82c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 82d0: 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70 72 65 74 alling interpret 82e0: 65 72 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 74 er and not the t 82f0: 61 72 67 65 74 20 69 6e 74 65 72 70 72 65 74 65 arget interprete 8300: 72 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 r created in the 8310: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8320: 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 isolated applica 8330: 74 69 6f 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c 65 tion domain unle 8340: 73 73 20 74 68 65 20 64 6f 6c 6c 61 72 20 73 69 ss the dollar si 8350: 67 6e 73 20 61 6e 64 2f 6f 72 20 73 71 75 61 72 gns and/or squar 8360: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 8370: 20 62 72 61 63 6b 65 74 73 20 61 72 65 20 73 70 brackets are sp 8380: 65 63 69 61 6c 6c 79 20 71 75 6f 74 65 64 20 77 ecially quoted w 8390: 69 74 68 20 62 61 63 6b 73 6c 61 73 68 65 73 2e ith backslashes. 83a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 83b0: 20 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c return [uplevel 83c0: 20 31 20 5b 6c 69 73 74 20 73 75 62 73 74 20 5b 1 [list subst [ 83d0: 61 70 70 65 6e 64 41 72 67 73 20 24 70 72 65 66 appendArgs$pref
83e0: 69 78 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  ix {..        if
83f0: 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74   {[hasRuntimeOpt
8400: 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65  ion native]} the
8410: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  n {..          o
8420: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
8430: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
8440: 76 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74  ve AddRuntimeOpt
8450: 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20  ion native..
8460: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b      }..      } [
8470: 67 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73  getTestOverrides
8480: 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70  Preamble [list p
8490: 61 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c  ath test_channel
84a0: 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20  ]] $suffix]]].. 84b0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 84c0: 63 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61 c tryCopyExterna 84d0: 6c 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 lFile {.. 84e0: 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 fileName {p 84f0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 latform ""} {new 8500: 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65 FileName ""} {ve 8510: 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b rbose false} } { 8520: 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 .. set sour 8530: 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 ceFileName [getE 8540: 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 xternalFileName 8550: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20$fileName]....
8560: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65      if {![file e
8570: 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c  xists $sourceFil 8580: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 8590: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 if {$ver
85a0: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bose} then {..
85b0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 85c0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 85d0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 85e0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 85f0: 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 skipped copying 8600: 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c external file \ 8610: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ""$sourceFileNa
8620: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
8630: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73      "\", it does
8640: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
8650: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
8660: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20     return..
8670: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
8680: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $8690: 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 newFileName] > 0 86a0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 86b0: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile 86c0: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 Name [getBinaryF 86d0: 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 ileName$newFile
86e0: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d  Name $platform]. 86f0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 8700: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 . set tar 8710: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 getFileName [get 8720: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
8730: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  fileName $platfo 8740: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rm].. }.... 8750: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 set target 8760: 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 Directory [file 8770: 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 dirname$targetF
8780: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20  ileName]....
8790: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
87a0: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69          if {![fi
87b0: 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65  le exists $targe 87c0: 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 tDirectory]} the 87d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 n {.. f 87e0: 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 ile mkdir$targe
87f0: 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  tDirectory..
8800: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
8810: 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20  ile copy -force
8820: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName 8830: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d$targetFileName.
8840: 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20  .      }] == 0}
8850: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
8860: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 8870: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 8880: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 8890: 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 65 78 "---- copied ex 88a0: 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f 6d ternal file from 88b0: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 \""$sourceFile
88c0: 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20  Name "\" to \""
88d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24  \..            $88e0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c targetFileName \ 88f0: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c "\n].. } el 8900: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp 8910: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
8920: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
8930: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
8940: 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63  ---- failed to c
8950: 6f 70 79 20 65 78 74 65 72 6e 61 6c 20 66 69 6c  opy external fil
8960: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72  e from \"" $sour 8970: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 ceFileName \.. 8980: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f "\" to 8990: 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 \""$targetFile
89a0: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  Name \"\n]..
89b0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
89c0: 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42     proc tryCopyB
89d0: 69 6e 61 72 79 46 69 6c 65 20 7b 0d 0a 20 20 20  inaryFile {..
89e0: 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
89f0: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
8a00: 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d  {newFileName ""}
8a10: 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d   {verbose false}
8a20: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
8a30: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b  sourceFileName [
8a40: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
8a50: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61  e $fileName$pla
8a60: 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20  tform]....
8a70: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74  if {![file exist
8a80: 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  s $sourceFileNam 8a90: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 8aa0: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
8ab0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
8ac0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 8ad0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 8ae0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 8af0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski 8b00: 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e pped copying bin 8b10: 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f ary file \""$so
8b20: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
8b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
8b40: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  ", it does not e
8b50: 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  xist\n"]..
8b60: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74    }..        ret
8b70: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  urn..      }....
8b80: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
8b90: 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c  g length $newFil 8ba0: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e eName] > 0} then 8bb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 8bc0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b targetFileName [ 8bd0: 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName 8be0: 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70$newFileName $p 8bf0: 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 latform].. 8c00: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 8c10: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile 8c20: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 Name [getBuildFi 8c30: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 leName$fileName
8c40: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20   $platform].. 8c50: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 }.... se 8c60: 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 t targetDirector 8c70: 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 y [file dirname 8c80: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d$targetFileName]
8c90: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
8ca0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
8cb0: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74  if {![file exist
8cc0: 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f  s $targetDirecto 8cd0: 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ry]} then {.. 8ce0: 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 file mkdi 8cf0: 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f r$targetDirecto
8d00: 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  ry..        }..
8d10: 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79         file copy
8d20: 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46   -force $sourceF 8d30: 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 ileName$targetF
8d40: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d  ileName..      }
8d50: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
8d60: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 8d70: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 8d80: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 8d90: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 8da0: 6f 70 69 65 64 20 62 69 6e 61 72 79 20 66 69 6c opied binary fil 8db0: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 e from \""$sour
8dc0: 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74  ceFileName "\" t
8dd0: 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  o \"" \..
8de0: 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c 65       $targetFile 8df0: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 Name \"\n].. 8e00: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 8e10: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
8e20: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
8e30: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
8e40: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65       "---- faile
8e50: 64 20 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 79  d to copy binary
8e60: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24   file from \"" $8e70: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c sourceFileName \ 8e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c .. "\ 8e90: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 " to \""$target
8ea0: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a  FileName \"\n]..
8eb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
8ec0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43  ...    proc tryC
8ed0: 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d 0a  opyBuildFile {..
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
8ef0: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
8f00: 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20  "} {newFileName
8f10: 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c  ""} {verbose fal
8f20: 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  se} } {..      s
8f30: 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  et sourceFileNam
8f40: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  e [getBuildFileN
8f50: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70  ame $fileName$p
8f60: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20  latform]....
8f70: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
8f80: 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e  sts $sourceFileN 8f90: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 8fa0: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f if {$verbo
8fb0: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  se} then {..
8fc0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 8fd0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 8fe0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 8ff0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 9000: 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 kipped copying b 9010: 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 73 uild file \""$s
9020: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d  ourceFileName \.
9030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
9040: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  \", it does not
9050: 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20  exist\n"]..
9060: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65     }..        re
9070: 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  turn..      }...
9080: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
9090: 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69  ng length $newFi 90a0: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 leName] > 0} the 90b0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 90c0: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 targetFileName 90d0: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 90e0: 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 me$newFileName
90f0: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20  $platform].. 9100: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 9110: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 set targetFi 9120: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 leName [getBinar 9130: 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e yFileName$fileN
9140: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a  ame $platform].. 9150: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 9160: 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63 set targetDirec 9170: 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 tory [file dirna 9180: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 me$targetFileNa
9190: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  me]....      if
91a0: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
91b0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
91c0: 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65  ists $targetDire 91d0: 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a ctory]} then {.. 91e0: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d file m 91f0: 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72 65 kdir$targetDire
9200: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d  ctory..        }
9210: 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63  ..        file c
9220: 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72  opy -force $sour 9230: 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 ceFileName$targ
9240: 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  etFileName..
9250: 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20    }] == 0} then
9260: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
9270: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 9280: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 9290: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 92a0: 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 - copied build f 92b0: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f ile from \""$so
92c0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22  urceFileName "\"
92d0: 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20   to \"" \..
92e0: 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69         $targetFi 92f0: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. 9300: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 9310: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
9320: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
9330: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
9340: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69         "---- fai
9350: 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c  led to copy buil
9360: 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20  d file from \""
9370: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName 9380: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 9390: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 \" to \""$targe
93a0: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  tFileName \"\n].
93b0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
93c0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79  ....    proc try
93d0: 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
93e0: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61   { fileName {pla
93f0: 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f  tform ""} {verbo
9400: 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  se false} } {..
9410: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
9420: 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  e [getBinaryFile
9430: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  Name $fileName$
9440: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20  platform]....
9450: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
9460: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d  ists $fileName]} 9470: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 9480: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 if {$verbose} t
9490: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
94a0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 94b0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 94c0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 94d0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 "---- skippe 94e0: 64 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72 d deleting binar 94f0: 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 y file \""$file
9500: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
9510: 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f        "\", it do
9520: 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d  es not exist\n"]
9530: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
9540: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20       return..
9550: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
9560: 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64   {[catch {file d
9570: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d  elete $fileName} 9580: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 9590: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
95a0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
95b0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
95c0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64           "---- d
95d0: 65 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66 69  eleted binary fi
95e0: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName 95f0: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 \"\n].. } 9600: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 9610: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
9620: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
9630: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
9640: 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f   "---- failed to
9650: 20 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 66   delete binary f
9660: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam 9670: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d e \"\n].. } 9680: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 9690: 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 75 proc tryDeleteBu 96a0: 69 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 ildFile { fileNa 96b0: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d me {platform ""} 96c0: 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d {verbose false} 96d0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set 96e0: 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 fileName [getBui 96f0: 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ldFileName$file
9700: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d  Name $platform]. 9710: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 ... if {![f 9720: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 ile exists$file
9730: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
9740: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb 9750: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. 9760: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
9770: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
9780: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
9790: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
97a0: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67  skipped deleting
97b0: 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20   build file \""
97c0: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  $fileName \.. 97d0: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 "\", 97e0: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 97f0: 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d t\n"].. } 9800: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 9810: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 9820: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 if {[catch {f 9830: 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 ile delete$file
9840: 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65  Name}] == 0} the
9850: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n {..        tpu
9860: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 9870: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 9880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 9890: 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69 6c --- deleted buil 98a0: 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 d file \""$file
98b0: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  Name \"\n]..
98c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
98d0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 98e0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 98f0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 9900: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 "---- faile 9910: 64 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69 6c d to delete buil 9920: 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 d file \""$file
9930: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  Name \"\n]..
9940: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
9950: 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 41     proc tryCopyA
9960: 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20  ssembly {..
9970: 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20         fileName
9980: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70  {platform ""} {p
9990: 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73  db true} {verbos
99a0: 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  e false} } {..
99b0: 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64      tryCopyBuild
99c0: 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  File $fileName$
99d0: 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72  platform "" $ver 99e0: 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 bose.... if 99f0: 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a {$pdb} then {..
9a00: 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42          tryCopyB
9a10: 75 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64  uildFile [append
9a20: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
9a30: 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61      [file rootna
9a40: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70  me $fileName] .p 9a50: 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 db]$platform ""
9a60: 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20   $verbose.. 9a70: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 9a80: 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 proc tryDelete 9a90: 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 Assembly {.. 9aa0: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName 9ab0: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b {platform ""} { 9ac0: 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f pdb true} {verbo 9ad0: 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 se false} } {.. 9ae0: 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 tryDeleteBi 9af0: 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 naryFile$fileNa
9b00: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 65  me $platform$ve
9b10: 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69  rbose....      i
9b20: 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d  f {$pdb} then {. 9b30: 0a 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 . tryDele 9b40: 74 65 42 69 6e 61 72 79 46 69 6c 65 20 5b 61 70 teBinaryFile [ap 9b50: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 9b60: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 72 6f [file ro 9b70: 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 otname$fileName
9b80: 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74 66 6f 72  ] .pdb] $platfor 9b90: 6d 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 m$verbose..
9ba0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
9bb0: 20 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 41     proc tryLoadA
9bc0: 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61  ssembly { fileNa
9bd0: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
9be0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
9bf0: 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e  fileName [getBin
9c00: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c  aryFileName $fil 9c10: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d eName$platform]
9c20: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
9c30: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
9c40: 73 65 74 20 61 73 73 65 6d 62 6c 79 20 5b 6f 62  set assembly [ob
9c50: 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74  ject load -loadt
9c60: 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20  ype File -alias
9c70: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20  $fileName].. 9c80: 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 }] == 0} then 9c90: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 9ca0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f # NOTE: No 9cb0: 77 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 w, add the neces 9cc0: 73 61 72 79 20 74 65 73 74 20 63 6f 6e 73 74 72 sary test constr 9cd0: 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 aint... # 9ce0: 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e .. addCon 9cf0: 73 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 72 6f straint [file ro 9d00: 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 otname [file tai 9d10: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d l$fileName]]...
9d20: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
9d30: 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62      # NOTE: Grab
9d40: 20 74 68 65 20 69 6d 61 67 65 20 72 75 6e 74 69   the image runti
9d50: 6d 65 20 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20  me version from
9d60: 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 65 63  the assembly bec
9d70: 61 75 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20  ause..        #
9d80: 20 20 20 20 20 20 73 65 76 65 72 61 6c 20 74 65        several te
9d90: 73 74 73 20 72 65 6c 79 20 6f 6e 20 69 74 20 68  sts rely on it h
9da0: 61 76 69 6e 67 20 61 20 63 65 72 74 61 69 6e 20  aving a certain
9db0: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20  value...
9dc0: 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  #..        addCo
9dd0: 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
9de0: 41 72 67 73 20 5b 66 69 6c 65 20 74 61 69 6c 20  Args [file tail
9df0: 24 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a  $fileName] _ \.. 9e00: 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 61 73 [$as
9e10: 73 65 6d 62 6c 79 20 49 6d 61 67 65 52 75 6e 74  sembly ImageRunt
9e20: 69 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a  imeVersion]]....
9e30: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
9e40: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72     # NOTE: Retur
9e50: 6e 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20  n the full path
9e60: 6f 66 20 74 68 65 20 6c 6f 61 64 65 64 20 66 69  of the loaded fi
9e70: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
9e80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $9e90: 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 9ea0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 9eb0: 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a n "".. }..... 9ec0: 20 20 20 20 70 72 6f 63 20 69 73 53 51 4c 69 74 proc isSQLit 9ed0: 65 52 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 20 20 eReady {} {.. 9ee0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 9ef0: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 TE: This procedu 9f00: 72 65 20 6d 75 73 74 20 72 65 74 75 72 6e 20 6e re must return n 9f10: 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 20 on-zero only if 9f20: 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 the SQLite nativ 9f30: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 9f40: 20 6c 69 62 72 61 72 79 20 61 6e 64 20 74 68 65 library and the 9f50: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 9f60: 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 ite managed asse 9f70: 6d 62 6c 79 20 61 72 65 20 6c 6f 61 64 65 64 0d mbly are loaded. 9f80: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 9f90: 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 nd ready for use 9fa0: 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 by the test sui 9fb0: 74 65 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 te. Currently, 9fc0: 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 0d 0a this procedure.. 9fd0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 # sh 9fe0: 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 6f ould be called o 9ff0: 6e 6c 79 20 61 66 74 65 72 20 74 68 65 20 5b 74 nly after the [t a000: 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 5d 20 ryLoadAssembly] a010: 70 72 6f 63 65 64 75 72 65 20 68 61 73 0d 0a 20 procedure has.. a020: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 65 # bee a030: 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 n called to prob a040: 65 20 66 6f 72 20 74 68 65 20 53 79 73 74 65 6d e for the System a050: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e .Data.SQLite man a060: 61 67 65 64 20 61 73 73 65 6d 62 6c 79 0d 0a 20 aged assembly.. a070: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 # and a080: 20 74 68 65 20 5b 63 68 65 63 6b 46 6f 72 53 51 the [checkForSQ a090: 4c 69 74 65 5d 20 70 72 6f 63 65 64 75 72 65 20 Lite] procedure a0a0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 has been called a0b0: 74 6f 20 70 72 6f 62 65 20 66 6f 72 0d 0a 20 20 to probe for.. a0c0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the a0d0: 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 SQLite native li a0e0: 62 72 61 72 79 3b 20 6f 74 68 65 72 77 69 73 65 brary; otherwise a0f0: 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 , this procedure a100: 20 77 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20 20 will simply.. a110: 20 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 61 # alwa a120: 79 73 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d ys return zero.. a130: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. a140: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a return [expr {.. a150: 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e [haveCon a160: 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 straint System.D a170: 61 74 61 2e 53 51 4c 69 74 65 5d 20 26 26 20 5b ata.SQLite] && [ a180: 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 haveConstraint S a190: 51 4c 69 74 65 5d 0d 0a 20 20 20 20 20 20 7d 5d QLite].. }] a1a0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... a1b0: 70 72 6f 63 20 6d 61 74 63 68 4d 61 63 68 69 6e proc matchMachin a1c0: 65 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b e { platform } { a1d0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. a1e0: 20 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 # NOTE: An empt a1f0: 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 y string for the a200: 20 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 platform means a210: 74 68 61 74 20 74 68 65 20 62 75 69 6c 64 20 69 that the build i a220: 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 s not.. # a230: 20 20 20 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d [primarily] a240: 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 3b a native build; a250: 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 61 therefore, it a a260: 6c 77 61 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a lways matches... a270: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i a280: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt a290: 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 h$platform] ==
a2a0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
a2b0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
a2c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
a2d0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
a2e0: 3a 20 44 6f 65 73 20 74 68 65 20 73 70 65 63 69  : Does the speci
a2f0: 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61  fied platform ma
a300: 74 63 68 20 75 70 20 74 6f 20 74 68 65 20 63 75  tch up to the cu
a310: 72 72 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a  rrent process?..
a320: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
a330: 66 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71 20  f {$platform eq a340: 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f [machineToPlatfo a350: 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f rm$::tcl_platfo
a360: 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68  rm(machine)]} th
a370: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
a380: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
a390: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
a3a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
a3b0: 20 73 70 65 63 69 66 69 65 64 20 70 6c 61 74 66   specified platf
a3c0: 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  orm does not mat
a3d0: 63 68 20 75 70 20 77 69 74 68 20 74 68 65 20 70  ch up with the p
a3e0: 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23  latform..      #
a3f0: 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 63         for the c
a400: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
a410: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
a420: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20  return false..
a430: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
a440: 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42   checkForSQLiteB
a450: 75 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20  uilds { channel
a460: 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d  {select false} }
a470: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
a480: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
a490: 20 66 6f 72 20 65 76 65 72 79 20 70 6f 73 73 69   for every possi
a4a0: 62 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e  ble valid combin
a4b0: 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20  ation of values
a4c0: 75 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20  used when..
a4d0: 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 69 6e   #       locatin
a4e0: 67 20 6f 75 74 20 74 68 65 20 62 75 69 6c 64 20  g out the build
a4f0: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79  output directory
a500: 2c 20 73 68 6f 77 69 6e 67 20 65 61 63 68 20 61  , showing each a
a510: 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20  vailable..
a520: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 76 61  #       build va
a530: 72 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68  riation along th
a540: 65 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d  e way...      #.
a550: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e  .      foreach n
a560: 61 74 69 76 65 20 5b 6c 69 73 74 20 66 61 6c 73  ative [list fals
a570: 65 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20  e true] {..
a580: 20 20 20 66 6f 72 65 61 63 68 20 79 65 61 72 20     foreach year
a590: 5b 67 65 74 42 75 69 6c 64 59 65 61 72 73 5d 20  [getBuildYears]
a5a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  {..          for
a5b0: 65 61 63 68 20 63 6f 6e 66 69 67 75 72 61 74 69  each configurati
a5c0: 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66  on [getBuildConf
a5d0: 69 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20  igurations] {..
a5e0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
a5f0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
a600: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65  : Figure out the
a610: 20 65 66 66 65 63 74 69 76 65 20 62 75 69 6c 64   effective build
a620: 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69 73   platform.  This
a630: 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20   is..
a640: 20 23 20 20 20 20 20 20 20 62 61 73 65 64 20 6f   #       based o
a650: 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  n whether or not
a660: 20 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e   a [primarily] n
a670: 61 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 20 20  ative build..
a680: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
a690: 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20   is being used.
a6a0: 20 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d   For [primarily]
a6b0: 20 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c   non-native buil
a6c0: 64 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ds,..
a6d0: 20 23 20 20 20 20 20 20 20 74 68 69 73 20 77 69   #       this wi
a6e0: 6c 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 20 73  ll be an empty s
a6f0: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  tring...
a700: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
a710: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
a720: 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72  [getBuildPlatfor
a730: 6d 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20  m $native].... a740: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs a750: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
a760: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
a770: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
a780: 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
a790: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75  m.Data.SQLite bu
a7a0: 69 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d  ild \"" [expr \.
a7b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
a7c0: 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74   {$native ? "nat a7d0: 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 78 ive/" : ""}] [ex a7e0: 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 pr {[string leng a7f0: 74 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 th \.. a800: 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d$platform]
a810: 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72   > 0 ? [appendAr
a820: 67 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20  gs $platform /] a830: 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d 0a : ""}]$year \..
a840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a850: 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  / $configuration a860: 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 "\"... "].... a870: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. a880: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: a890: 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 Build the fully a8a0: 20 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 qualified direc a8b0: 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 6e tory where the n a8c0: 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 ecessary.. a8d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co a8e0: 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 mponents for Sys a8f0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite a900: 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e should be found. a910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. a920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set a930: 20 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e directory [join a940: 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 BuildDirectory$
a950: 6e 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20  native \..
a960: 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75            [getBu
a970: 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79  ildBaseDirectory
a980: 5d 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72  ] $year$platfor
a990: 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  m $configuration a9a0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... a9b0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. a9c0: 23 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e # NOTE: Do the n a9d0: 65 63 65 73 73 61 72 79 20 66 69 6c 65 73 20 65 ecessary files e a9e0: 78 69 73 74 3f 20 20 43 75 72 72 65 6e 74 6c 79 xist? Currently a9f0: 2c 20 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 73 , no other steps aa00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # aa10: 20 20 20 20 20 20 61 72 65 20 74 61 6b 65 6e 20 are taken aa20: 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 20 62 to verify this b aa30: 75 69 6c 64 20 69 73 20 61 63 74 75 61 6c 6c 79 uild is actually aa40: 20 76 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 viable... aa50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. aa60: 20 20 20 20 20 69 66 20 7b 5b 69 73 42 75 69 6c if {[isBuil aa70: 64 41 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 69 dAvailable$nati
aa80: 76 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20  ve $directory]} aa90: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. aaa0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. aab0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 # NOTE: W aac0: 68 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 20 hen in "select" aad0: 6d 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 61 mode, automatica aae0: 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 lly select the f aaf0: 69 72 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 irst.. ab00: 20 20 20 20 23 20 20 20 20 20 20 20 61 76 61 69 # avai ab10: 6c 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 53 lable build of S ab20: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit ab30: 65 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 e and then retur ab40: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 n.. ab50: 20 23 20 20 20 20 20 20 20 69 6d 6d 65 64 69 61 # immedia ab60: 74 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 tely... ab70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. ab80: 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 if {$selec
ab90: 74 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69  t && [matchMachi
aba0: 6e 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74  ne $platform]} t abb0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. abc0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. abd0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE abe0: 3a 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 : Manually overr abf0: 69 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c ide all the buil ac00: 64 20 64 69 72 65 63 74 6f 72 79 20 73 65 6c 65 d directory sele ac10: 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 ction.. ac20: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 # r ac30: 65 6c 61 74 65 64 20 74 65 73 74 20 73 65 74 74 elated test sett ac40: 69 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74 6f ings in order to ac50: 20 66 6f 72 63 65 20 74 68 69 73 20 62 75 69 6c force this buil ac60: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 d.. ac70: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 53 79 # of Sy ac80: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite ac90: 20 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 to be used... aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. acb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . acc0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 object invoke I acd0: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 nterpreter.GetAc ace0: 74 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 74 tive [expr {$nat
acf0: 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20  ive ? \..
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 64               "Ad
ad10: 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20  dRuntimeOption"
ad20: 3a 20 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65  : "RemoveRuntime
ad30: 4f 70 74 69 6f 6e 22 7d 5d 20 6e 61 74 69 76 65  Option"}] native
ad40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
ad50: 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 79      set ::test_y
ad60: 65 61 72 20 24 79 65 61 72 0d 0a 20 20 20 20 20  ear $year.. ad70: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a set : ad80: 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24 :test_platform$
ad90: 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..
ada0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
adb0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
adc0: 6f 6e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f  on $configuratio add0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n.... ade0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
adf0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
ae00: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
ae10: 20 20 20 20 20 20 20 22 79 65 73 2c 20 73 65 6c         "yes, sel
ae20: 65 63 74 65 64 20 28 22 20 5b 65 78 70 72 20 7b  ected (" [expr {
ae30: 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76  $native ? "nativ ae40: 65 2f 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 e/" : ""}] \.. ae50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ae60: 20 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 [expr {[string ae70: 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 length$platfor
ae80: 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64  m] > 0 ? [append
ae90: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61              $pla aeb0: 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 tform /] : ""}] aec0: 24 79 65 61 72 20 2f 20 24 63 6f 6e 66 69 67 75$year / $configu aed0: 72 61 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d ration ")\n"]... aee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . aef0: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 return true.. af00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el af10: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. af20: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
af30: 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20  nnel yes\n..
af40: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
af50: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
af60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
af70: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel af80: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 no\n.. af90: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } afa0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. afb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re afc0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 turn false.. afd0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c afe0: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c heckForSQLiteRel aff0: 65 61 73 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 eases { channel b000: 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d {select false} } b010: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. b020: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check b030: 20 66 6f 72 20 70 61 73 74 20 72 65 6c 65 61 73 for past releas b040: 65 73 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 es of System.Dat b050: 61 2e 53 51 4c 69 74 65 20 69 6e 20 74 68 65 20 a.SQLite in the b060: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. b070: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e # contain b080: 65 64 20 69 6e 20 74 68 65 20 22 53 79 73 74 65 ed in the "Syste b090: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 20 65 m.Data.SQLite" e b0a0: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 nvironment varia b0b0: 62 6c 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 23 ble, if.. # b0c0: 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 2e 0d present.. b0d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. b0e0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists b0f0: 20 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 ::env(System.Da b100: 74 61 2e 53 51 4c 69 74 65 29 5d 20 26 26 20 5c ta.SQLite)] && \ b110: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str b120: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e ing length$::en
b130: 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  v(System.Data.SQ
b140: 4c 69 74 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e  Lite)] > 0} then
b150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
b160: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
b170: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71  uild the fully q
b180: 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f  ualified directo
b190: 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 63  ry where the nec
b1a0: 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20  essary..
b1b0: 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e  #       componen
b1c0: 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61  ts for System.Da
b1d0: 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64  ta.SQLite should
b1e0: 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20   be found...
b1f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
b200: 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 66 69  et directory [fi
b210: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
b220: 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
b230: 20 20 20 20 20 20 20 20 24 3a 3a 65 6e 76 28 53          $::env(S b240: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit b250: 65 29 20 5b 67 65 74 52 65 6c 65 61 73 65 56 65 e) [getReleaseVe b260: 72 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 rsion]]].... b270: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
b280: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
b290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
b2a0: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
b2b0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
b2c0: 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20  ite release \""
b2d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24  \..            $b2e0: 64 69 72 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e directory "\"... b2f0: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 "].... i b300: 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61 f {[isReleaseAva b310: 69 6c 61 62 6c 65 20 24 64 69 72 65 63 74 6f 72 ilable$director
b320: 79 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65  y platform]} the
b330: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
b340: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
b350: 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20  h $platform] == b360: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. b370: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 set platf b380: 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 orm unknown.. b390: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... b3a0: 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 if {$selec
b3b0: 74 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69  t && [matchMachi
b3c0: 6e 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74  ne $platform]} t b3d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. b3e0: 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 set ::build_d b3f0: 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 irectory$direct
b400: 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ory....
b410: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe b420: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 l [appendArgs "y b430: 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 es, selected (" b440: 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d$platform ")\n"]
b450: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
b460: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
b470: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
b480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
b490: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app b4a0: 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 endArgs "yes (" b4b0: 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d$platform ")\n"]
b4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
b4d0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
b4e0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
b4f0: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n.. b500: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore b510: 61 63 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 ach path [lsort b520: 2d 64 65 63 72 65 61 73 69 6e 67 20 5b 66 69 6c -decreasing [fil b530: 65 20 6c 69 73 74 20 24 64 69 72 65 63 74 6f 72 e list$director
b540: 79 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20  y *]] {..
b550: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
b560: 78 69 73 74 73 20 24 70 61 74 68 5d 20 26 26 20  xists $path] && b570: 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 [file isdirector b580: 79 20 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b y$path]} then {
b590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
b5a0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ b5b0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 b5d0: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f b5e0: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 or System.Data.S b5f0: 51 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 QLite release \" b600: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. b610: 20 20 20 20 20 20 20 24 70 61 74 68 20 22 5c 22$path "\"
b620: 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ... "]....
b630: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52          if {[isR
b640: 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20  eleaseAvailable
b650: 24 70 61 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d  $path platform]} b660: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. b670: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 if {[st b680: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
b690: 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65  tform] == 0} the
b6a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
b6b0: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66         set platf
b6c0: 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20  orm unknown..
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
b6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
b6f0: 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26    if {$select && b700: 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 [matchMachine$
b710: 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20  platform]} then
b720: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
b730: 20 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64       set ::build
b740: 5f 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68  _directory $path b750: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... b760: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
b770: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
b780: 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20   "yes, selected
b790: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c  (" $platform ")\ b7a0: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 n"].... b7b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return b7c0: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 true.. b7d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 b7f0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
b800: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65   [appendArgs "ye
b810: 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22  s (" $platform " b820: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 )\n"].. b830: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. b840: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { b850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. b860: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
b870: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20   no\n..
b880: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
b890: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
b8a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
b8b0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
b8c0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch b8d0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg b8e0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. b8f0: 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 "---- environme b900: 6e 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 nt variable \"Sy b910: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite b920: 5c 22 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 \" is not " \.. b930: 20 20 20 20 20 20 20 20 20 20 20 22 73 65 74 2c "set, b940: 20 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 skipping check b950: 66 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c for releases...\ b960: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a n"].. }.... b970: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal b980: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 se.. }..... b990: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 proc checkForS b9a0: 51 4c 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 QLiteLibrary { c b9b0: 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 hannel } {.. b9c0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
b9d0: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
b9e0: 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20  for SQLite core
b9f0: 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a  library... "....
ba00: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
ba10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
ba20: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
ba30: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
ba40: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
ba50: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
ba60: 4c 69 74 65 33 20 53 51 4c 69 74 65 56 65 72 73  Lite3 SQLiteVers
ba70: 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72  ion..      } ver
ba80: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sion] == 0} then
ba90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
baa0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
bab0: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75  heck if the retu
bac0: 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73  rned version was
bad0: 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d   null.  If so, m
bae0: 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20  ake it easy..
baf0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
bb00: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  spot...        #
bb10: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
bb20: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65  tring length $ve bb30: 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 rsion] == 0} the bb40: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s bb50: 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d et version null. bb60: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... bb70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. bb80: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt bb90: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo bba0: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden bbb0: 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 tifier for the S bbc0: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 QLite.. # bbd0: 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 core libr bbe0: 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ary... #. bbf0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca bc00: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. bc10: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - bc20: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic bc30: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. bc40: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ bc50: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c Lite.SQLite3 SQL bc60: 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 iteSourceId.. bc70: 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d } sourceId] bc80: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. bc90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. bca0: 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c # NOTE: We fail bcb0: 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 ed to query the bcc0: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 Fossil source id bcd0: 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 entifier... bce0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. bcf0: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 set sourceId u bd00: 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 nknown.. bd10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. bd20: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: bd30: 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 Check if the ret bd40: 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 urned Fossil sou bd50: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 rce identifier w bd60: 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 as null. If.. bd70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f # so bd80: 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 , make it easy t bd90: 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 o spot... bda0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { bdb0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
bdc0: 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20  sourceId] == 0}
bdd0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
bde0: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e    set sourceId n
bdf0: 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ull..        }..
be00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
be10: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73       # NOTE: Yes
be20: 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  , the SQLite cor
be30: 65 20 6c 69 62 72 61 72 79 20 61 70 70 65 61 72  e library appear
be40: 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c  s to be availabl
be50: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
be60: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
be70: 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20  aint SQLite....
be80: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch be90: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg bea0: 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69 s "yes ("$versi
beb0: 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64  on " " $sourceId bec0: 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d ")\n"].. } bed0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. bee0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
bef0: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  no\n..      }..
bf00: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
bf10: 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
bf20: 49 6e 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65  Interop { channe
bf30: 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  l } {..      tpu
bf40: 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- bf50: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S bf60: 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as bf70: 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 sembly... ".... bf80: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch bf90: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec bfa0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags bfb0: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. bfc0: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System bfd0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL bfe0: 69 74 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73 ite3 InteropVers bff0: 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 ion.. } ver c000: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then c010: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. c020: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C c030: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 heck if the retu c040: 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 rned version was c050: 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d null. If so, m c060: 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 ake it easy.. c070: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to c080: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 spot... # c090: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s c0a0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 tring length$ve
c0b0: 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65  rsion] == 0} the
c0c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
c0d0: 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d  et version null.
c0e0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
c0f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
c100: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
c110: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f   to query the Fo
c120: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
c130: 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53  tifier for the S
c140: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23  QLite..        #
c150: 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72         core libr
c160: 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ary...        #.
c170: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
c180: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
c190: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
c1a0: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
c1b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
c1c0: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
c1d0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74  Lite.SQLite3 Int
c1e0: 65 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20  eropSourceId..
c1f0: 20 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64        } sourceId
c200: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
c210: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
c220: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69    # NOTE: We fai
c230: 6c 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  led to query the
c240: 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69   Fossil source i
c250: 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20  dentifier...
c260: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
c270: 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20     set sourceId
c280: 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20  unknown..
c290: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
c2a0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
c2b0: 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65   Check if the re
c2c0: 74 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f  turned Fossil so
c2d0: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20  urce identifier
c2e0: 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20  was null.  If..
c2f0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
c300: 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20  o, make it easy
c310: 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20  to spot...
c320: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
c330: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
c340: 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d  $sourceId] == 0} c350: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. c360: 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 set sourceId c370: 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d null.. }. c380: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. c390: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 # NOTE: Ye c3a0: 73 2c 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e s, the SQLite in c3b0: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 terop assembly a c3c0: 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 ppears to be ava c3d0: 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 ilable... c3e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 #.. addC c3f0: 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 onstraint SQLite c400: 49 6e 74 65 72 6f 70 0d 0a 0d 0a 20 20 20 20 20 Interop.... c410: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
c420: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79  l [appendArgs "y
c430: 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22  es (" $version " c440: 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c "$sourceId ")\
c450: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  n"]..      } els
c460: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
c470: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n c480: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } c490: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 ..... proc ch c4a0: 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 eckForSQLiteDefi c4b0: 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61 neConstant { cha c4c0: 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 nnel name } {.. c4d0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
c4e0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
c4f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d  \..          "--
c500: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for
c510: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
c520: 74 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61  te define consta
c530: 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a  nt \"" $name \.. c540: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e "\"... c550: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 "].... if c560: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. c570: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke c580: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl c590: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. c5a0: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ c5b0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 Lite.SQLite3 Def c5c0: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 ineConstants.. c5d0: 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 } defineCons c5e0: 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 tants] == 0} the c5f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if c600: 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 {[lsearch -exact c610: 20 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65 -nocase$define
c620: 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d  Constants $name] c630: 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a != -1} then {.. c640: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. c650: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 # NOTE: Y c660: 65 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20 es, this define c670: 63 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61 constant was ena c680: 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61 bled when the ma c690: 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 naged.. c6a0: 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c # assembl c6b0: 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d y was compiled.. c6c0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. c6d0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst c6e0: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg c6f0: 73 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 s defineConstant c700: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c .System.Data.SQL c710: 69 74 65 2e 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 ite.$name]....
c720: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $c730: 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 channel yes\n.. c740: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. c750: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs c760: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a$channel no\n..
c770: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
c780: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
c790: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe c7a0: 6c 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 l error\n.. c7b0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... c7c0: 20 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 proc getDateTi c7d0: 6d 65 46 6f 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20 meFormat {} {.. c7e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # c7f0: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce c800: 64 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 dure simply retu c810: 72 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 rns the "default c820: 22 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 " DateTime forma c830: 74 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 t used.. # c840: 20 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73 by the tes c850: 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... c860: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in c870: 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 fo exists ::date c880: 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 time_format] && c890: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st c8a0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 ring length$::d
c8b0: 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20  atetime_format]
c8c0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
c8d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
c8e0: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  # NOTE: Return t
c8f0: 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72  he manually over
c900: 72 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72  ridden value for
c910: 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f   the DateTime fo
c920: 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  rmat...        #
c930: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
c940: 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72   $::datetime_for c950: 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 mat.. } els c960: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. c970: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: c980: 52 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 Return an ISO860 c990: 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 1 DateTime forma c9a0: 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 t compatible wit c9b0: 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 h SQLite,.. c9c0: 20 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 # Syste c9d0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 m.Data.SQLite, a c9e0: 6e 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 nd suitable for c9f0: 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 round-tripping w ca00: 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 ith the.. ca10: 20 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d # DateTim ca20: 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 e class of the f ca30: 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 ramework. If th ca40: 69 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e is value is chan ca50: 67 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 ged,.. # ca60: 20 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 various te ca70: 73 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 sts may fail... ca80: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. ca90: 20 20 72 65 74 75 72 6e 20 22 79 79 79 79 2d 4d return "yyyy-M caa0: 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 M-dd HH:mm:ss.FF cab0: 46 46 46 46 46 4b 22 0d 0a 20 20 20 20 20 20 7d FFFFFK".. } cac0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... cad0: 70 72 6f 63 20 65 6e 75 6d 65 72 61 62 6c 65 54 proc enumerableT cae0: 6f 4c 69 73 74 20 7b 20 65 6e 75 6d 65 72 61 62 oList { enumerab caf0: 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 le } {.. se cb00: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d t result [list]. cb10: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st cb20: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 6e 75 ring length$enu
cb30: 6d 65 72 61 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c  merable] == 0 ||
cb40: 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 65 71 20   $enumerable eq cb50: 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a "null"} then {.. cb60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
cb70: 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d  result..      }.
cb80: 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20  ...      object
cb90: 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69  foreach -alias i
cba0: 74 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c 65 20  tem $enumerable cbb0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ cbc0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 69 string length$i
cbd0: 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  tem] > 0} then {
cbe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70  ..          lapp
cbf0: 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 69 74 65  end result [$ite cc00: 6d 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20 m ToString].. cc10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. cc20: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return cc30: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a$result..    }..
cc40: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63  ...    proc catc
cc50: 68 41 6e 64 52 65 74 75 72 6e 20 7b 20 73 63 72  hAndReturn { scr
cc60: 69 70 74 20 7b 73 74 61 63 6b 54 72 61 63 65 20  ipt {stackTrace
cc70: 66 61 6c 73 65 7d 20 7b 73 74 72 69 63 74 20 74  false} {strict t
cc80: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
cc90: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
cca0: 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 73 63   Evaluate the sc
ccb0: 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79  ript provided by
ccc0: 20 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 74   our caller in t
ccd0: 68 65 69 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20  heir context,..
cce0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 70       #       cap
ccf0: 74 75 72 69 6e 67 20 62 6f 74 68 20 74 68 65 20  turing both the
cd00: 72 65 73 75 6c 74 20 61 6e 64 20 74 68 65 20 72  result and the r
cd10: 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...
cd20: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
cd30: 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 75 70 6c  code [catch {upl
cd40: 65 76 65 6c 20 31 20 24 73 63 72 69 70 74 7d 20  evel 1 $script} cd50: 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 result].... cd60: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE cd70: 3a 20 44 69 64 20 74 68 65 20 73 63 72 69 70 74 : Did the script cd80: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 provided by our cd90: 20 63 61 6c 6c 65 72 20 4e 4f 54 20 72 61 69 73 caller NOT rais cda0: 65 20 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 20 e an error?.. cdb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { cdc0: 24 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 65$strict && $code cdd0: 20 3d 3d 20 30 20 7c 7c 20 21 24 73 74 72 69 63 == 0 || !$stric
cde0: 74 20 26 26 20 24 63 6f 64 65 20 21 3d 20 31 7d  t && $code != 1} cdf0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. ce00: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO ce10: 54 45 3a 20 53 75 63 63 65 73 73 2e 20 20 52 65 TE: Success. Re ce20: 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 turn a list with ce30: 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 the return code ce40: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 2e and the result. ce50: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. ce60: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis ce70: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d t$code $result] ce80: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif ce90: 20 7b 24 73 74 61 63 6b 54 72 61 63 65 7d 20 74 {$stackTrace} t
cea0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
ceb0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
cec0: 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20  : Failure.  Our
ced0: 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 61 20 66  caller wants a f
cee0: 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20  ull stack trace
cef0: 28 69 66 20 61 70 70 6c 69 63 61 62 6c 65 29 2c  (if applicable),
cf00: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
cf10: 20 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20    return a list
cf20: 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20  with the return
cf30: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73  code and the res
cf40: 75 6c 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20  ult verbatim...
cf50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
cf60: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24    return [list $cf70: 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 code$result]..
cf80: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
cf90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
cfa0: 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72    # NOTE: Failur
cfb0: 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 64  e.  Our caller d
cfc0: 6f 65 73 20 6e 6f 74 20 77 61 6e 74 20 61 20 66  oes not want a f
cfd0: 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20  ull stack trace
cfe0: 28 69 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20  (if..        #
cff0: 20 20 20 20 20 61 70 70 6c 69 63 61 62 6c 65 29       applicable)
d000: 2c 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20  , return a list
d010: 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20  with the return
d020: 63 6f 64 65 2c 20 74 68 65 20 65 72 72 6f 72 0d  code, the error.
d030: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
d040: 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 69 6e   code for the in
d050: 74 65 72 70 72 65 74 65 72 2c 20 61 6e 64 20 74  terpreter, and t
d060: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
d070: 20 75 70 20 74 6f 20 74 68 65 0d 0a 20 20 20 20   up to the..
d080: 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 69 6e      #       poin
d090: 74 20 77 68 65 72 65 20 74 68 65 20 73 74 61 63  t where the stac
d0a0: 6b 20 74 72 61 63 65 20 73 68 6f 75 6c 64 20 73  k trace should s
d0b0: 74 61 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  tart...        #
d0c0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 69 6e  ..        set in
d0d0: 64 65 78 20 5b 73 74 72 69 6e 67 20 66 69 72 73  dex [string firs
d0e0: 74 20 22 20 20 20 61 74 20 22 20 24 72 65 73 75  t "   at " $resu d0f0: 6c 74 5d 3b 20 23 20 48 41 43 4b 3a 20 52 65 6c lt]; # HACK: Rel d100: 69 61 62 6c 65 3f 0d 0a 0d 0a 20 20 20 20 20 20 iable?.... d110: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 return [list$
d120: 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f 64  code $::errorCod d130: 65 20 5b 65 78 70 72 20 7b 24 69 6e 64 65 78 20 e [expr {$index
d140: 21 3d 20 2d 31 20 3f 20 5c 0d 0a 20 20 20 20 20  != -1 ? \..
d150: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 74         [string t
d160: 72 69 6d 20 5b 73 74 72 69 6e 67 20 72 61 6e 67  rim [string rang
d170: 65 20 24 72 65 73 75 6c 74 20 30 20 24 69 6e 64  e $result 0$ind
d180: 65 78 5d 5d 20 3a 20 24 72 65 73 75 6c 74 7d 5d  ex]] : $result}] d190: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. d1a0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c d1b0: 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 ompileCSharpWith d1c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. d1d0: 74 65 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62 text memory symb d1e0: 6f 6c 73 20 73 74 72 69 63 74 20 72 65 73 75 6c ols strict resul d1f0: 74 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 tsVarName errors d200: 56 61 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 VarName fileName d210: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 s.. a d220: 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 rgs } {.. # d230: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: d240: 53 69 6e 63 65 20 77 65 20 61 72 65 20 67 6f 69 Since we are goi d250: 6e 67 20 74 6f 20 75 73 65 20 74 68 69 73 20 6d ng to use this m d260: 65 74 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f 74 ethod name a lot d270: 2c 20 61 73 73 69 67 6e 20 69 74 20 74 6f 20 61 , assign it to a d280: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # d290: 76 61 72 69 61 62 6c 65 20 66 69 72 73 74 2e 0d variable first.. d2a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. d2b0: 73 65 74 20 61 64 64 20 52 65 66 65 72 65 6e 63 set add Referenc d2c0: 65 64 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 edAssemblies.Add d2d0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. d2e0: 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 # NOTE: Creat d2f0: 65 20 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 e the base comma d300: 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 nd to evaluate a d310: 6e 64 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 nd add the prope d320: 72 74 79 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 rty settings.. d330: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 # that d340: 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 are almost alwa d350: 79 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72 ys needed by our d360: 20 75 6e 69 74 20 74 65 73 74 73 20 28 69 2e 65 unit tests (i.e d370: 2e 20 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 20 . the System.. d380: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and d390: 53 79 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 System.Data asse d3a0: 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 mbly references) d3b0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d3c0: 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c set command [l d3d0: 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. d3e0: 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24 compileCSharp$
d3f0: 74 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79  text $memory$sy
d400: 6d 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65  mbols $strict re d410: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5c 0d 0a sults errors \.. d420: 20 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53$add S
d430: 79 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53  ystem.dll $add S d440: 79 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 ystem.Data.dll$
d450: 61 64 64 20 53 79 73 74 65 6d 2e 54 72 61 6e 73  add System.Trans
d460: 61 63 74 69 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20  actions.dll \..
d470: 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79           $add Sy d480: 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d stem.Xml.dll]... d490: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. d4a0: 23 20 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 # NOTE: Add all d4b0: 74 68 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c the provided fil d4c0: 65 20 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d e names as assem d4d0: 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d bly references.. d4e0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. d4f0: 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName d500: 20 24 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20$fileNames {..
d510: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
d520: 6f 6d 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74  ommand $add [get d530: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
d540: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
d550: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
d560: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64       # NOTE: Add
d570: 20 74 68 65 20 65 78 74 72 61 20 61 72 67 75 6d   the extra argum
d580: 65 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f  ents, if any, to
d590: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20   the command to
d5a0: 65 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20  evaluate...
d5b0: 20 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c   #..      eval l
d5c0: 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24  append command $d5d0: 61 72 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d args.... #. d5e0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A d5f0: 6c 69 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 lias the compile d600: 72 20 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 r local results d610: 61 6e 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 and errors varia d620: 62 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 bles to the.. d630: 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 # varia d640: 62 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 ble names provid d650: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller d660: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d670: 20 20 75 70 76 61 72 20 31 20 24 72 65 73 75 6c upvar 1$resul
d680: 74 73 56 61 72 4e 61 6d 65 20 72 65 73 75 6c 74  tsVarName result
d690: 73 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  s..      upvar 1
d6a0: 20 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20   $errorsVarName d6b0: 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 20 20 20 20 errors.... d6c0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: d6d0: 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f Evaluate the co d6e0: 6e 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 nstructed [compi d6f0: 6c 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e leCSharp] comman d700: 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 d and return the d710: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # d720: 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 result... # d730: 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f .. eval$co
d740: 6d 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  mmand..    }....
d750: 0a 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f  .    proc isMemo
d760: 72 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20  ryDb { fileName
d770: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
d780: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74      # NOTE: Is t
d790: 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74  he specified dat
d7a0: 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20  abase file name
d7b0: 72 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d  really an in-mem
d7c0: 6f 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20  ory database?..
d7d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
d7e0: 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c  turn [expr {$fil d7f0: 65 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 eName eq ":memor d800: 79 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 y:" || \.. d810: 20 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 [string rang d820: 65 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 e$fileName 0 12
d830: 5d 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f  ] eq "file::memo
d840: 72 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c  ry:"}]..    }...
d850: 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61 62  ..    proc isTab
d860: 6c 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76  leInDb { name {v
d870: 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a  arName db} } {..
d880: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
d890: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
d8a0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
d8b0: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
d8c0: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
d8d0: 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
d8e0: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20  #       caller.
d8f0: 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   It contains the
d900: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
d910: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74  tion handle that
d920: 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20   will be..
d930: 23 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20  #       used to
d940: 65 78 65 63 75 74 65 20 74 68 65 20 71 75 65 72  execute the quer
d950: 79 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  y used to determ
d960: 69 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64  ine if the named
d970: 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20   table is..
d980: 20 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74   #       present
d990: 20 69 6e 20 74 68 61 74 20 64 61 74 61 62 61 73   in that databas
d9a0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
d9b0: 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN d9c0: 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 ame db.... d9d0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: d9e0: 20 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 5f Use the sqlite_ d9f0: 6d 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f 20 master table to da00: 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 determine if the da10: 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d named table is. da20: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 . # p da30: 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 resent in the da da40: 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 tabase... # da50: 0d 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 .. set sql da60: 7b 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 {.. SELEC da70: 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 T COUNT(*) FROM da80: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 sqlite_master WH da90: 45 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c ERE type = 'tabl daa0: 65 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b e' AND name = ?; dab0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... dac0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO dad0: 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a TE: Return non-z dae0: 65 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 64 ero if the named daf0: 20 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 6e table is presen db00: 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 t... #.. db10: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 return [expr db20: 7b 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 20 {.. [sql db30: 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 execute -execute db40: 20 73 63 61 6c 61 72 20 24 64 62 20 24 73 71 6c scalar$db $sql db50: 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 74 [list param1 St db60: 72 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 ring$name]] > 0
db70: 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20  ..      }]..
db80: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
db90: 72 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b  rimSql { sql } {
dba0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
dbb0: 72 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b  regsub -all -- {
dbc0: 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69  \s+} [string tri
dbd0: 6d 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20  m $sql] " "].. dbe0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc dbf0: 20 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 executeSql { sq dc00: 6c 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d l {execute none} dc10: 20 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b {format none} { dc20: 66 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b fileName ""} } { dc30: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str dc40: 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 ing length$file
dc50: 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  Name] == 0} then
dc60: 20 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a   {set fileName :
dc70: 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20  memory:}..
dc80: 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d  setupDb $fileNam dc90: 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 e "" "" "" "" "" dca0: 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c false false fal dcb0: 73 65 20 66 61 6c 73 65 20 64 62 20 74 72 75 65 se false db true dcc0: 0d 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d .... try {. dcd0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return dce0: 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 [uplevel 1 [list dcf0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. dd00: 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 sql execute -exe dd10: 63 75 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 cute$execute -f
dd20: 6f 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64  ormat $format$d
dd30: 62 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20  b $sql]].. dd40: 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 } finally {.. dd50: 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 cleanupDb$
dd60: 66 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73  fileName db fals
dd70: 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20  e false false..
dd80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
dd90: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f  ..    proc getCo
dda0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 7b 20  nnectionFlags {
ddb0: 66 69 6c 65 4e 61 6d 65 20 66 6c 61 67 73 20 7b  fileName flags {
ddc0: 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
ddd0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
dde0: 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20   # NOTE: Figure
ddf0: 6f 75 74 20 77 68 69 63 68 20 64 61 74 61 62 61  out which databa
de00: 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 20  se file name or
de10: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
de20: 67 20 74 68 65 73 65 0d 0a 20 20 20 20 20 20 23  g these..      #
de30: 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
de40: 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 61 63 74  n flags will act
de50: 75 61 6c 6c 79 20 61 70 70 6c 79 20 74 6f 2e 20  ually apply to.
de60: 20 54 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 63   This is not nec
de70: 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20  essary..      #
de80: 20 20 20 20 20 20 69 6e 20 71 75 69 65 74 20 6d        in quiet m
de90: 6f 64 65 20 62 65 63 61 75 73 65 20 74 68 69 73  ode because this
dea0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is
deb0: 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 6f  only used for lo
dec0: 67 67 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20  gging..      #
ded0: 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 69       and reporti
dee0: 6e 67 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20  ng purposes...
def0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
df00: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { df10: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s df20: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 tring length$fi
df30: 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65  leName] > 0} the
df40: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
df50: 65 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70  et database [app
df60: 65 6e 64 41 72 67 73 20 22 66 69 6c 65 20 6e 61  endArgs "file na
df70: 6d 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  me \"" $fileName df80: 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 \"].. } df90: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 elseif {[info ex dfa0: 69 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 ists ::dataSourc dfb0: 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 e] && \.. dfc0: 20 20 20 20 20 21 5b 61 72 72 61 79 20 65 78 69 ![array exi dfd0: 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 sts ::dataSource dfe0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. dff0: 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73 set databas e000: 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 64 e [appendArgs "d e010: 61 74 61 20 73 6f 75 72 63 65 20 5c 22 22 20 24 ata source \""$
e020: 3a 3a 64 61 74 61 53 6f 75 72 63 65 20 5c 22 5d  ::dataSource \"]
e030: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
e040: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
e050: 74 20 64 61 74 61 62 61 73 65 20 3c 75 6e 6b 6e  t database <unkn
e060: 6f 77 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  own>..        }.
e070: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
e080: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
e090: 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67  E: Show (and log
e0a0: 29 20 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e  ) the local conn
e0b0: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64  ection flags and
e0c0: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d   the associated.
e0d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
e0e0: 61 74 61 20 73 6f 75 72 63 65 20 6f 72 20 66 69  ata source or fi
e0f0: 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  le name...
e100: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71  #..      if {!$q e110: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. e120: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
e130: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
e140: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
e150: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63         "---- loc
e160: 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  al connection fl
e170: 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62  ags for " $datab e180: 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ase \.. e190: 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 " are: " [exp e1a0: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 r {[string lengt e1b0: 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 20 3f 20 h$flags] > 0 ?
e1c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
e1d0: 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 66  appendArgs \" $f e1e0: 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e lags \"] : "<non e1f0: 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 e>"}] \n].. e200: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. e210: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho e220: 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 w (and log) the e230: 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f shared connectio e240: 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 n flags... e250: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 #.. if {!$q
e260: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
e270: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
e280: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
e290: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74  ject invoke Syst
e2a0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
e2b0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20  QLiteConnection
e2c0: 53 68 61 72 65 64 46 6c 61 67 73 0d 0a 20 20 20  SharedFlags..
e2d0: 20 20 20 20 20 7d 20 73 68 61 72 65 64 46 6c 61       } sharedFla
e2e0: 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  gs] == 0} then {
e2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
e300: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe e310: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. e320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " e330: 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e ---- shared conn e340: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 ection flags for e350: 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a "$database \..
e360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                "
e370: 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 5b 73  are: " [expr {[s
e380: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 68  tring length $sh e390: 61 72 65 64 46 6c 61 67 73 5d 20 3e 20 30 20 26 aredFlags] > 0 & e3a0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. e3b0: 20 20 20 24 73 68 61 72 65 64 46 6c 61 67 73 20$sharedFlags
e3c0: 6e 65 20 22 4e 6f 6e 65 22 20 3f 20 5c 0d 0a 20  ne "None" ? \..
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70               [ap
e3e0: 70 65 6e 64 41 72 67 73 20 5c 22 20 24 73 68 61  pendArgs \" $sha e3f0: 72 65 64 46 6c 61 67 73 20 5c 22 5d 20 3a 20 22 redFlags \"] : " e400: 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 <none>"}] \n].. e410: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. e420: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs e430: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
e440: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
e460: 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e 65  --- shared conne
e470: 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20  ction flags for
e480: 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20  " $database \.. e490: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 " a e4a0: 72 65 3a 20 3c 75 6e 61 76 61 69 6c 61 62 6c 65 re: <unavailable e4b0: 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d >\n"].. } e4c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... e4d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO e4e0: 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 TE: If there are e4f0: 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 any global (per e500: 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 test run) conne e510: 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 ction flags curr e520: 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 ently.. # e530: 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 set, use th e540: 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 em now (i.e. by e550: 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 combining them w e560: 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 ith the ones for e570: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 this.. # e580: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 connection) e590: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. e5a0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis e5b0: 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f ts ::connection_ e5c0: 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 20 flags] && \.. e5d0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l e5e0: 65 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 ength$::connect
e5f0: 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d 20  ion_flags] > 0}
e600: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
e610: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
e620: 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67  E: Show (and log
e630: 29 20 74 68 65 20 64 65 74 65 63 74 65 64 20 67  ) the detected g
e640: 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e  lobal connection
e650: 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20   flags...
e660: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
e670: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. e680: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs e690: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
e6a0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
e6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
e6c0: 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65  --- global conne
e6d0: 63 74 69 6f 6e 20 66 6c 61 67 73 20 64 65 74 65  ction flags dete
e6e0: 63 74 65 64 3a 20 22 20 5c 0d 0a 20 20 20 20 20  cted: " \..
e6f0: 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b           [expr {
e700: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63  [info exists ::c
e710: 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d  onnection_flags]
e720: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
e730: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
e740: 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f  gth $::connectio e750: 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 20 3f 20 5c n_flags] > 0 ? \ e760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e770: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
e780: 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61  ::connection_fla
e790: 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e  gs \"] : "<none>
e7a0: 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  "}] \n]..
e7b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
e7c0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
e7d0: 20 43 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20   Combine and/or
e7e0: 72 65 70 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e  replace the conn
e7f0: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64  ection flags and
e800: 20 74 68 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a   then show the..
e810: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
e820: 6e 65 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20  new value...
e830: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
e840: 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e  et flags [combin
e850: 65 46 6c 61 67 73 20 24 66 6c 61 67 73 20 24 3a  eFlags $flags$:
e860: 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67  :connection_flag
e870: 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  s]....        #.
e880: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
e890: 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20   Show (and log)
e8a0: 74 68 65 20 6e 65 77 20 65 66 66 65 63 74 69 76  the new effectiv
e8b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  e connection fla
e8c0: 67 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  gs...        #..
e8d0: 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu e8e0: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. e8f0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
e900: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
e910: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
e920: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
e930: 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74  combined connect
e940: 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20  ion flags for "
e950: 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20  $database \.. e960: 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 " are e970: 3a 20 22 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 : " [expr {[stri e980: 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 ng length$flags
e990: 5d 20 3e 20 30 20 3f 20 5c 0d 0a 20 20 20 20 20  ] > 0 ? \..
e9a0: 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64           [append
e9b0: 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c  Args \" $flags \ e9c0: 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 "] : "<none>"}] e9d0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. e9e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... e9f0: 20 72 65 74 75 72 6e 20 24 66 6c 61 67 73 0d 0a return$flags..
ea00: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
ea10: 6f 63 20 67 65 74 46 6c 61 67 73 50 72 6f 70 65  oc getFlagsPrope
ea20: 72 74 79 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d  rty { {flags ""}
ea30: 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d   {quiet false} }
ea40: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
ea50: 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72     # NOTE: Deter
ea60: 6d 69 6e 65 20 77 68 61 74 20 74 68 65 20 63 6f  mine what the co
ea70: 6d 62 69 6e 65 64 20 28 67 6c 6f 62 61 6c 20 61  mbined (global a
ea80: 6e 64 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 63  nd local) connec
ea90: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
eaa0: 20 20 20 20 66 6c 61 67 73 20 73 68 6f 75 6c 64      flags should
eab0: 20 62 65 2c 20 70 6f 73 73 69 62 6c 79 20 71 75   be, possibly qu
eac0: 69 65 74 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d  ietly...      #.
ead0: 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73  .      set flags
eae0: 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46   [getConnectionF
eaf0: 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 20 24  lags "" $flags$
eb00: 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20  quiet]....
eb10: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
eb20: 20 49 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f 72   If no global or
eb30: 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f   local connectio
eb40: 6e 20 66 6c 61 67 73 20 77 65 72 65 20 73 70 65  n flags were spe
eb50: 63 69 66 69 65 64 2c 20 74 68 65 0d 0a 20 20 20  cified, the..
eb60: 20 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75     #       defau
eb70: 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  lt connection fl
eb80: 61 67 73 20 73 68 6f 75 6c 64 20 62 65 20 75 73  ags should be us
eb90: 65 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72  ed; therefore, r
eba0: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 23 20 20  eturn..      #
ebb0: 20 20 20 20 20 61 6e 20 65 6d 70 74 79 20 73 74       an empty st
ebc0: 72 69 6e 67 20 69 6e 20 74 68 61 74 20 63 61 73  ring in that cas
ebd0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
ebe0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
ebf0: 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d  ength $flags] == ec00: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. ec10: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 return "".. ec20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... ec30: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: ec40: 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 In order to che ec50: 63 6b 20 69 66 20 74 68 65 20 64 65 66 61 75 6c ck if the defaul ec60: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 t connection fla ec70: 67 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 gs are being use ec80: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # ec90: 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 it is necessary eca0: 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20 63 6f to attempt a co ecb0: 6e 76 65 72 73 69 6f 6e 20 74 6f 20 74 68 65 20 nversion to the ecc0: 61 63 74 75 61 6c 20 65 6e 75 6d 65 72 61 74 65 actual enumerate ecd0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # ece0: 20 74 79 70 65 2e 20 20 46 61 69 6c 69 6e 67 20 type. Failing ecf0: 74 68 61 74 2c 20 74 68 65 20 63 68 65 63 6b 20 that, the check ed00: 61 67 61 69 6e 73 74 20 74 68 65 20 64 65 66 61 against the defa ed10: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 ult value will b ed20: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # ed30: 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 skipped... ed40: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 65 72 #.. set er ed50: 72 6f 72 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f ror null; # IGNO ed60: 52 45 44 0d 0a 20 20 20 20 20 20 73 65 74 20 76 RED.. set v ed70: 61 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 alue [object inv ed80: 6f 6b 65 20 55 74 69 6c 69 74 79 20 54 72 79 50 oke Utility TryP ed90: 61 72 73 65 46 6c 61 67 73 45 6e 75 6d 20 22 22 arseFlagsEnum "" eda0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 \.. Sy edb0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite edc0: 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f .SQLiteConnectio edd0: 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 nFlags ""$flags
ede0: 20 6e 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20 20   null true \..
edf0: 20 20 20 20 20 20 20 20 74 72 75 65 20 65 72 72          true err
ee00: 6f 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  or]....      #..
ee10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
ee20: 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c   the combined fl
ee30: 61 67 73 20 73 74 72 69 6e 67 20 63 6f 75 6c 64  ags string could
ee40: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 62 65   not actually be
ee50: 20 63 6f 6e 76 65 72 74 65 64 0d 0a 20 20 20 20   converted..
ee60: 20 20 23 20 20 20 20 20 20 20 74 6f 20 74 68 65    #       to the
ee70: 20 65 6e 75 6d 65 72 61 74 65 64 20 74 79 70 65   enumerated type
ee80: 20 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75   it is the defau
ee90: 6c 74 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 6a  lt value, then j
eea0: 75 73 74 20 75 73 65 0d 0a 20 20 20 20 20 20 23  ust use..      #
eeb0: 20 20 20 20 20 20 20 69 74 20 76 65 72 62 61 74         it verbat
eec0: 69 6d 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6a  im; otherwise, j
eed0: 75 73 74 20 72 65 74 75 72 6e 20 61 6e 20 65 6d  ust return an em
eee0: 70 74 79 20 73 74 72 69 6e 67 2e 20 20 49 6e 20  pty string.  In
eef0: 74 68 61 74 0d 0a 20 20 20 20 20 20 23 20 20 20  that..      #
ef00: 20 20 20 20 63 61 73 65 2c 20 74 68 65 20 64 65      case, the de
ef10: 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e  fault connection
ef20: 20 66 6c 61 67 73 20 77 69 6c 6c 20 62 65 20 75   flags will be u
ef30: 73 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  sed...      #..
ef40: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
ef50: 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20   length $value] ef60: 3d 3d 20 30 20 7c 7c 20 24 76 61 6c 75 65 20 6e == 0 ||$value n
ef70: 65 20 22 44 65 66 61 75 6c 74 22 7d 20 74 68 65  e "Default"} the
ef80: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
ef90: 20 20 20 20 20 20 20 20 23 20 57 41 52 4e 49 4e          # WARNIN
efa0: 47 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 20  G: This returns
efb0: 74 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  the string value
efc0: 20 6f 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64   of the combined
efd0: 20 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a 20 20 20   flags, not..
efe0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
eff0: 74 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 76  the enumerated v
f000: 61 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 62  alue.  This is b
f010: 79 20 64 65 73 69 67 6e 20 61 6e 64 20 73 68 6f  y design and sho
f020: 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20  uld not..
f030: 20 23 20 20 20 20 20 20 20 20 20 20 62 65 20 63   #          be c
f040: 68 61 6e 67 65 64 20 77 69 74 68 6f 75 74 20 63  hanged without c
f050: 61 72 65 66 75 6c 20 63 6f 6e 73 69 64 65 72 61  areful considera
f060: 74 69 6f 6e 20 28 65 2e 67 2e 20 69 74 20 77 6f  tion (e.g. it wo
f070: 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20  uld..        #
f080: 20 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20          prevent
f090: 74 68 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  the SQLiteConnec
f0a0: 74 69 6f 6e 20 63 6c 61 73 73 20 66 72 6f 6d 20  tion class from
f0b0: 61 6c 6c 6f 77 69 6e 67 20 69 6e 76 61 6c 69 64  allowing invalid
f0c0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
f0d0: 20 20 20 20 20 5b 22 6d 61 67 69 63 61 6c 22 5d       ["magical"]
f0e0: 20 6d 65 74 61 2d 66 6c 61 67 73 29 2e 0d 0a 20   meta-flags)...
f0f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f100: 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64    return [append
f110: 41 72 67 73 20 22 46 6c 61 67 73 3d 22 20 24 66  Args "Flags=" $f f120: 6c 61 67 73 20 5c 3b 5d 0d 0a 20 20 20 20 20 20 lags \;].. f130: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur f140: 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a n "".. }..... f150: 20 20 20 20 70 72 6f 63 20 65 6e 61 62 6c 65 53 proc enableS f160: 68 61 72 65 64 43 61 63 68 65 20 7b 20 63 68 61 haredCache { cha f170: 6e 6e 65 6c 20 65 6e 61 62 6c 65 20 7b 71 75 69 nnel enable {qui f180: 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 et false} } {.. f190: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch f1a0: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec f1b0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags f1c0: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. f1d0: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System f1e0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 .Data.SQLite.Uns f1f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 afeNativeMethods f200: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. f210: 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 sqlite3_enable_s f220: 68 61 72 65 64 5f 63 61 63 68 65 20 5b 65 78 70 hared_cache [exp f230: 72 20 69 6e 74 28 24 65 6e 61 62 6c 65 29 5d 0d r int($enable)].
f240: 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d  .      } result]
f250: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
f260: 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui f270: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. f280: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
f290: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
f2a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
f2b0: 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c    "---- call sql
f2c0: 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72  ite3_enable_shar
f2d0: 65 64 5f 63 61 63 68 65 28 22 20 24 65 6e 61 62  ed_cache(" $enab f2e0: 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. f2f0: 20 20 20 20 22 29 2e 2e 2e 20 6f 6b 3a 20 22 20 ")... ok: " f300: 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
f310: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
f320: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
f330: 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the f340: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t f350: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
f360: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
f370: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
f380: 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e   call sqlite3_en
f390: 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68  able_shared_cach
f3a0: 65 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20  e(" $enable \.. f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 29 2e "). f3c0: 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 .. error: " \n\t f3d0: 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
f3e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
f3f0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
f400: 70 72 6f 63 20 73 65 74 75 70 44 62 20 7b 0d 0a  proc setupDb {..
f410: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
f420: 4e 61 6d 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b  Name {mode ""} {
f430: 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 22  dateTimeFormat "
f440: 22 7d 20 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64  "} {dateTimeKind
f450: 20 22 22 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d   ""} {flags ""}.
f460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 65 78  .            {ex
f470: 74 72 61 20 22 22 7d 20 7b 71 75 61 6c 69 66 79  tra ""} {qualify
f480: 20 74 72 75 65 7d 20 7b 64 65 6c 65 74 65 20 74   true} {delete t
f490: 72 75 65 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d  rue} {uri false}
f4a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 74  ..            {t
f4b0: 65 6d 70 6f 72 61 72 79 20 74 72 75 65 7d 20 7b  emporary true} {
f4c0: 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 71 75 69  varName db} {qui
f4d0: 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  et false} } {..
f4e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
f4f0: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65  NOTE: First, see
f500: 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68   if our caller h
f510: 61 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20  as requested an
f520: 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61  in-memory databa
f530: 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  se...      #..
f540: 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79      set isMemory
f550: 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69   [isMemoryDb $fi f560: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 leName].... f570: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE f580: 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 : For now, all t f590: 65 73 74 20 64 61 74 61 62 61 73 65 73 20 75 73 est databases us f5a0: 65 64 20 62 79 20 74 68 65 20 74 65 73 74 20 73 ed by the test s f5b0: 75 69 74 65 20 61 72 65 20 70 6c 61 63 65 64 0d uite are placed. f5c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i f5d0: 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 nto the database f5e0: 20 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61 63 directory. Eac f5f0: 68 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 72 h database and r f600: 65 6c 61 74 65 64 20 66 69 6c 65 73 0d 0a 20 20 elated files.. f610: 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 # used f620: 20 62 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c by a test shoul f630: 64 20 62 65 20 63 6c 65 61 6e 65 64 20 75 70 20 d be cleaned up f640: 62 79 20 74 68 61 74 20 74 65 73 74 20 75 73 69 by that test usi f650: 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 ng the.. # f660: 20 20 20 20 20 20 22 63 6c 65 61 6e 75 70 44 62 "cleanupDb f670: 22 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c " procedure, bel f680: 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ow... #.. f690: 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f if {!$isMemo
f6a0: 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20  ry && $qualify} f6b0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. f6c0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi f6d0: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 le join [getData f6e0: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b baseDirectory] [ f6f0: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e file tail$fileN
f700: 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ame]]..      }..
f710: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
f720: 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61   # NOTE: By defa
f730: 75 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20  ult, delete any
f740: 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74  pre-existing dat
f750: 61 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73  abase with the s
f760: 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20  ame file..
f770: 23 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20  #       name if
f780: 69 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69  it currently exi
f790: 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  sts...      #..
f7a0: 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d       if {!$isMem f7b0: 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 ory &&$delete &
f7c0: 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  & [file exists $f7d0: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then f7e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. f7f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At f800: 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 tempt to delete f810: 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 any pre-existing f820: 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 database with t f830: 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 he same file.. f840: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 # na f850: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a me... #.. f860: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat f870: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 ch {file delete f880: 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72$fileName} error
f890: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
f8a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
f8b0: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d    # NOTE: We som
f8c0: 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64  ehow failed to d
f8d0: 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20  elete the file,
f8e0: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
f8f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f900: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} f910: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. f920: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
f930: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
f940: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
f950: 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
f960: 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
f970: 74 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61  to delete databa
f980: 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  se file \"" $fil f990: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. f9a0: 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 "\" dur f9b0: 69 6e 67 20 73 65 74 75 70 2c 20 65 72 72 6f 72 ing setup, error f9c0: 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
f9d0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
f9e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
f9f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
fa00: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
fa10: 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63  efer to the spec
fa20: 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28  ified variable (
fa30: 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68  e.g. "db") in th
fa40: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72  e context of our
fa50: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
fa60: 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e  caller.  The han
fa70: 64 6c 65 20 74 6f 20 74 68 65 20 6f 70 65 6e 65  dle to the opene
fa80: 64 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20  d database will
fa90: 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e  be stored there.
faa0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
fab0: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam fac0: 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d e db.... #. fad0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 . # NOTE: S fae0: 74 61 72 74 20 62 75 69 6c 64 69 6e 67 20 74 68 tart building th faf0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str fb00: 69 6e 67 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 ing. The only r fb10: 65 71 75 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d equired portion. fb20: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f . # o fb30: 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e f the connection fb40: 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 64 string is the d fb50: 61 74 61 20 73 6f 75 72 63 65 2c 20 77 68 69 63 ata source, whic fb60: 68 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a h contains the.. fb70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 # da fb80: 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 tabase file name fb90: 20 69 74 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 itself. If our fba0: 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f caller wants to fbb0: 20 75 73 65 20 61 20 55 52 49 20 61 73 0d 0a 20 use a URI as.. fbc0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the fbd0: 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20 75 73 data source, us fbe0: 65 20 74 68 65 20 46 75 6c 6c 55 72 69 20 63 6f e the FullUri co fbf0: 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 nnection string fc00: 70 72 6f 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 property to.. fc10: 20 20 20 23 20 20 20 20 20 20 20 70 72 65 76 65 # preve fc20: 6e 74 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 nt the data sour fc30: 63 65 20 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 ce string from b fc40: 65 69 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 eing mangled... fc50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if fc60: 20 7b 24 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a {$uri} then {..
fc70: 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e          set conn
fc80: 65 63 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d  ection {FullUri=
fc90: 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20  ${fileName}}.. fca0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. fcb0: 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 set connec fcc0: 74 69 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 tion {Data Sourc fcd0: 65 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a e=${fileName}}..
fce0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
fcf0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
fd00: 3a 20 53 69 6e 63 65 20 74 68 69 73 20 70 72 6f  : Since this pro
fd10: 63 65 64 75 72 65 20 68 61 73 20 6e 6f 20 73 70  cedure has no sp
fd20: 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20  ecial knowledge
fd30: 6f 66 20 77 68 61 74 20 74 68 65 20 64 65 66 61  of what the defa
fd40: 75 6c 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ult..      #
fd50: 20 20 20 73 65 74 74 69 6e 67 20 69 73 20 66 6f     setting is fo
fd60: 72 20 74 68 65 20 54 6f 46 75 6c 6c 50 61 74 68  r the ToFullPath
fd70: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
fd80: 6e 67 20 70 72 6f 70 65 72 79 2c 20 61 6c 77 61  ng propery, alwa
fd90: 79 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ys..      #
fda0: 20 20 61 64 64 20 74 68 65 20 76 61 6c 75 65 20    add the value
fdb0: 77 65 20 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f  we know about to
fdc0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
fdd0: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23  string...      #
fde0: 0d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 63  ..      append c
fdf0: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75  onnection {;ToFu
fe00: 6c 6c 50 61 74 68 3d 24 7b 71 75 61 6c 69 66 79  llPath=${qualify fe10: 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }}.... #.. fe20: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If fe30: 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 our caller speci fe40: 66 69 65 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d fied a journal m fe50: 6f 64 65 2c 20 61 64 64 20 74 68 65 20 6e 65 63 ode, add the nec fe60: 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a essary portion.. fe70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 # of fe80: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection fe90: 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 string now... fea0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { feb0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
fec0: 6d 6f 64 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  mode] > 0} then
fed0: 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  {..        appen
fee0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a  d connection {;J
fef0: 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f  ournal Mode=${mo ff00: 64 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d de}}.. }... ff10: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. ff20: 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 # NOTE: If our c ff30: 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 aller specified ff40: 61 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 a DateTime forma ff50: 74 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 t, add the neces ff60: 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 sary.. # ff70: 20 20 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 portion of t ff80: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st ff90: 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ring now... ffa0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s ffb0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 tring length$da
ffc0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20  teTimeFormat] >
ffd0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
ffe0: 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63     append connec
fff0: 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46  tion {;DateTimeF
10000 6f 72 6d 61 74 3d 24 7b 64 61 74 65 54 69 6d 65  ormat=${dateTime 10010 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 Format}}.. 10020 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 10030 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f # NOTE: If o 10040 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 ur caller specif 10050 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 4b 69 ied a DateTimeKi 10060 6e 64 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 nd, add the nece 10070 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 ssary portion.. 10080 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 # of 10090 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 the connection s 100a0 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 tring now... 100b0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 100c0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 string length$d
100d0 61 74 65 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30  ateTimeKind] > 0
100e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
100f0 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74    append connect
10100 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69  ion {;DateTimeKi
10110 6e 64 3d 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e  nd=${dateTimeKin 10120 64 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a d}}.. }.... 10130 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 10140 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 NOTE: Figure ou 10150 74 20 77 68 61 74 20 74 68 65 20 66 69 6e 61 6c t what the final 10160 20 66 6c 61 67 73 20 66 6f 72 20 74 68 69 73 20 flags for this 10170 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65 65 64 20 connection need 10180 74 6f 20 62 65 2e 0d 0a 20 20 20 20 20 20 23 0d to be... #. 10190 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 . set flags 101a0 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 [getConnectionF 101b0 6c 61 67 73 20 24 66 69 6c 65 4e 61 6d 65 20 24 lags$fileName $101c0 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d flags$quiet]...
101d0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
101e0 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63  # NOTE: If our c
101f0 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20  aller specified
10200 73 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65  some SQLiteConne
10210 63 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20  ctionFlags, add
10220 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
10230 20 20 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72     necessary por
10240 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e  tion of the conn
10250 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f  ection string no
10260 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
10270 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
10280 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20  ength $flags] > 10290 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 102a0 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 append connec 102b0 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 tion {;Flags=${f
102c0 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d  lags}}..      }.
102d0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
102e0 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72    # NOTE: If our
102f0 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65   caller specifie
10300 64 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f  d an extra paylo
10310 61 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63  ad to the connec
10320 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
10330 20 20 20 20 73 74 72 69 6e 67 2c 20 61 70 70 65      string, appe
10340 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20  nd it now...
10350 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
10360 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65  string length $e 10370 78 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 xtra] > 0} then 10380 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e {.. appen 10390 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 d connection \; 103a0 24 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d$extra..      }.
103b0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
103c0 20 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74    # NOTE: Open t
103d0 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
103e0 65 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63  ection now, plac
103f0 69 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 68  ing the opaque h
10400 61 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20  andle value..
10410 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20     #       into
10420 74 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65  the variable spe
10430 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61  cified by our ca
10440 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ller...      #..
10450 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 71        set db [sq
10460 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c  l open -type SQL
10470 69 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e  ite [subst $conn 10480 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 ection]].... 10490 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 104a0 45 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 E: Configure the 104b0 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 temporary direc 104c0 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 tory for the new 104d0 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 ly opened databa 104e0 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 se.. # 104f0 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 connection now 10500 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c unless our call 10510 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a er forbids it... 10520 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 10530 66 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 f {$temporary &&
10540 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   ![info exists :
10550 3a 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79  :no(setTemporary
10560 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65  Directory)]} the
10570 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c  n {..        sql
10580 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70   execute $db [ap 10590 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 105a0 20 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 "PRAGMA 105b0 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 temp_store_direc 105c0 74 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 tory = \"" [getT 105d0 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 emporaryDirector 105e0 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 y] \"\;].. 105f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 10600 20 20 20 20 23 20 4e 4f 54 45 3a 20 50 65 72 66 # NOTE: Perf 10610 6f 72 6d 20 61 6e 79 20 65 78 74 72 61 20 70 65 orm any extra pe 10620 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 65 74 r-connection set 10630 75 70 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 up for the newly 10640 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20 20 23 opened.. # 10650 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 database 10660 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 now unless our c 10670 61 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74 aller forbids it 10680 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 10690 20 20 73 65 74 20 65 78 65 63 75 74 65 4f 6e 53 set executeOnS 106a0 65 74 75 70 20 5b 67 65 74 45 78 65 63 75 74 65 etup [getExecute 106b0 4f 6e 53 65 74 75 70 5d 0d 0a 0d 0a 20 20 20 20 OnSetup].... 106c0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 106d0 6e 67 74 68 20 24 65 78 65 63 75 74 65 4f 6e 53 ngth$executeOnS
106e0 65 74 75 70 5d 20 3e 20 30 20 26 26 20 5c 0d 0a  etup] > 0 && \..
106f0 20 20 20 20 20 20 20 20 20 20 21 5b 69 6e 66 6f            ![info
10700 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65   exists ::no(exe
10710 63 75 74 65 4f 6e 53 65 74 75 70 29 5d 7d 20 74  cuteOnSetup)]} t
10720 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
10730 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
10740 3a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6d  : This command m
10750 61 79 20 72 61 69 73 65 20 61 6e 20 65 72 72 6f  ay raise an erro
10760 72 3b 20 69 66 20 73 6f 2c 20 74 68 61 74 20 69  r; if so, that i
10770 73 20 66 69 6e 65 2c 20 61 73 0d 0a 20 20 20 20  s fine, as..
10780 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
10790 65 6e 63 6c 6f 73 69 6e 67 20 74 65 73 74 20 77  enclosing test w
107a0 69 6c 6c 20 74 68 65 6e 20 66 61 69 6c 2e 20 20  ill then fail.
107b0 54 68 65 20 5b 73 75 62 73 74 5d 20 63 6f 6d 6d  The [subst] comm
107c0 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20  and is..
107d0 23 20 20 20 20 20 20 20 75 73 65 64 20 6f 6e 20  #       used on
107e0 74 68 65 20 53 51 4c 20 69 6e 20 63 61 73 65 20  the SQL in case
107f0 69 74 20 6e 65 65 64 73 20 74 6f 20 72 65 66 65  it needs to refe
10800 72 20 74 6f 20 73 74 61 74 65 20 69 6e 20 6f 75  r to state in ou
10810 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  r..        #
10820 20 20 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20     context...
10830 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
10840 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20  sql execute $db 10850 5b 73 75 62 73 74 20 24 65 78 65 63 75 74 65 4f [subst$executeO
10860 6e 53 65 74 75 70 5d 0d 0a 20 20 20 20 20 20 7d  nSetup]..      }
10870 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
10880 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79     # NOTE: Alway
10890 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f 6e  s return the con
108a0 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75  nection handle u
108b0 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20  pon success...
108c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
108d0 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a  urn $db.. }.. 108e0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 ... proc getD 108f0 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 bConnection { {v 10900 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a arName db} } {.. 10910 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 10920 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 NOTE: Refer to 10930 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 the specified va 10940 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 riable (e.g. "db 10950 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 ") in the contex 10960 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 t of our.. 10970 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 # caller. 10980 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 The handle to t 10990 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 he database prev 109a0 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 iously opened vi 109b0 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 a the.. # 109c0 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 [setupDb] p 109d0 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 rocedure should 109e0 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e be stored there. 109f0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 10a00 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
10a10 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  e db....      #.
10a20 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
10a30 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 20  his returns the
10a40 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e 65  ADO.NET IDbConne
10a50 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e 73  ction object ins
10a60 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a 20  tance for the..
10a70 20 20 20 20 20 23 20 20 20 20 20 20 20 73 70 65       #       spe
10a80 63 69 66 69 65 64 20 64 61 74 61 62 73 65 20 68  cified databse h
10a90 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 65  andle.  Since ge
10aa0 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 63  tting this objec
10ab0 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a 20  t relies upon..
10ac0 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
10ad0 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 72  le internals, gr
10ae0 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 20  eat care should
10af0 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f 69  be taken to avoi
10b00 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d 0a  d disposing of..
10b10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
10b20 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 68  is object or oth
10b30 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 69  erwise putting i
10b40 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c 69  t into an invali
10b50 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 20  d state...
10b60 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
10b70 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74  fo exists db]} t
10b80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
10b90 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
10ba0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
10bb0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
10bc0 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c  Public -objectfl
10bd0 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 2d  ags +NoDispose -
10be0 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20  alias \..
10bf0 20 20 20 20 20 20 20 49 6e 74 65 72 70 72 65 74         Interpret
10c00 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e  er.GetActive.con
10c10 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d 20 24 64  nections Item $d 10c20 62 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 b.. } res 10c30 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then 10c40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 10c50 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 10c60 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74 75 72 : Success, retur 10c70 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a n the opaque obj 10c80 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 ect handle... 10c90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 10ca0 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
10cb0 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c  lt..        } el
10cc0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
10cd0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
10ce0 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 65  OTE: Failure, re
10cf0 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20  port why...
10d00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
10d10 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 10d20 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 10d30 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 10d40 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 10d50 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 NG: failed to ge 10d60 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e t connection han 10d70 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 dle for database 10d80 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 10d90 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65$db "\", e
10da0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65  rror: " \n\t $re 10db0 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 10dc0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 10dd0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 10de0 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f freeDbConnectio 10df0 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e n { {varName con 10e00 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 nection} } {.. 10e10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 10e20 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 OTE: Refer to th 10e30 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 e specified vari 10e40 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e able (e.g. "conn 10e50 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d ection") in the. 10e60 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 10e70 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 ontext of our ca 10e80 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71 75 ller. The opaqu 10e90 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 e object handle 10ea0 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a for an ADO.NET.. 10eb0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 10ec0 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 nnection previou 10ed0 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62 79 20 sly returned by 10ee0 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e [getDbConnection 10ef0 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 ] should be.. 10f00 20 20 20 23 20 20 20 20 20 20 20 73 74 6f 72 65 # store 10f10 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 d there... 10f20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 10f30 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63$varName connec
10f40 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  tion....      #.
10f50 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
10f60 74 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65  ttempt to remove
10f70 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65   the opaque obje
10f80 63 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74  ct handle from t
10f90 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 0d 0a  he interpreter..
10fa0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 6f        #       no
10fb0 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65 63 74  w.  This [object
10fc0 20 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77   dispose] call w
10fd0 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  ill not actually
10fe0 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 0d   dispose of the.
10ff0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75  .      #       u
11000 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74  nderlying object
11010 20 62 65 63 61 75 73 65 20 74 68 65 20 2b 4e 6f   because the +No
11020 44 69 73 70 6f 73 65 20 66 6c 61 67 20 77 61 73  Dispose flag was
11030 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20   set on it..
11040 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67    #       during
11050 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 74 68 65   creation of the
11060 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68   opaque object h
11070 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d  andle...      #.
11080 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
11090 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 63 74 69   exists connecti
110a0 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  on] && \..
110b0 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65      [catch {obje
110c0 63 74 20 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e  ct dispose $conn 110d0 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20 ection} error]} 110e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 110f0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 11100 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 11110 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 74 iled to remove t 11120 68 65 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72 he handle, repor 11130 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 t why... 11140 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 11150 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
11160 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
11170 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
11180 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
11190 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e  d to remove conn
111a0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22  ection handle \"
111b0 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d  " $connection \. 111c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 . "\" 111d0 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 111e0 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
111f0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
11200 20 20 20 70 72 6f 63 20 61 64 64 44 62 43 6f 6e     proc addDbCon
11210 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63  nection { connec
11220 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62  tion {varName db
11230 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
11240 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
11250 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69  fer to the speci
11260 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65  fied variable (e
11270 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65  .g. "db") in the
11280 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d   context of our.
11290 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
112a0 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d  aller...      #.
112b0 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $112c0 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 varName db.... 112d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 112e0 4f 54 45 3a 20 43 72 65 61 74 65 20 61 20 63 6f OTE: Create a co 112f0 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 65 rrectly formatte 11300 64 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64 d name for the d 11310 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 atabase connecti 11320 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 on to.. # 11330 20 20 20 20 20 62 65 20 61 64 64 65 64 20 74 6f be added to 11340 20 74 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 65 the list manage 11350 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 20 69 d by the Eagle i 11360 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 nterpreter... 11370 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 11380 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b db [object invok 11390 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 113a0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 113b0 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e Eagle._Componen 113c0 74 73 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d 61 ts.Private.Forma 113d0 74 4f 70 73 20 44 61 74 61 62 61 73 65 4f 62 6a tOps DatabaseObj 113e0 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74 ectName$connect
113f0 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
11400 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
11410 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  n [object invoke
11420 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
11430 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d  Active NextId]].
11440 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
11450 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68    # NOTE: Add th
11460 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
11470 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62  ction provided b
11480 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f 20  y our caller to
11490 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 20 20  the list..
114a0 23 20 20 20 20 20 20 20 6f 66 20 74 68 6f 73 65  #       of those
114b0 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61   known to the Ea
114c0 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  gle interpreter.
114d0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
114e0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
114f0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
11500 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
11510 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f  Active.connectio
11520 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 20 20 20  ns Add \..
11530 20 20 20 20 24 64 62 20 24 63 6f 6e 6e 65 63 74      $db$connect
11540 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ion..    }.....
11550 20 20 20 70 72 6f 63 20 67 65 74 52 6f 77 73 46     proc getRowsF
11560 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b 20 64  romDataTable { d
11570 61 74 61 54 61 62 6c 65 20 7d 20 7b 0d 0a 20 20  ataTable } {..
11580 20 20 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69      set rows [li
11590 73 74 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 63  st]..      set c
115a0 6f 75 6e 74 20 5b 24 64 61 74 61 54 61 62 6c 65  ount [$dataTable 115b0 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d Columns.Count]. 115c0 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 ... for {se 115d0 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 t index 0} {$ind
115e0 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e  ex < $count} {in 115f0 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 cr index} {.. 11600 20 20 20 20 20 73 65 74 20 64 61 74 61 43 6f 6c set dataCol 11610 75 6d 6e 20 5b 24 64 61 74 61 54 61 62 6c 65 20 umn [$dataTable
11620 2d 61 6c 69 61 73 20 43 6f 6c 75 6d 6e 73 2e 67  -alias Columns.g
11630 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d  et_Item $index]. 11640 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d . set nam 11650 65 73 28 24 69 6e 64 65 78 29 20 5b 24 64 61 74 es($index) [$dat 11660 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61 aColumn ColumnNa 11670 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a me].. }.... 11680 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 11690 65 61 63 68 20 2d 61 6c 69 61 73 20 64 61 74 61 each -alias data 116a0 52 6f 77 20 5b 73 65 74 20 64 61 74 61 52 6f 77 Row [set dataRow 116b0 73 20 5b 24 64 61 74 61 54 61 62 6c 65 20 52 6f s [$dataTable Ro
116c0 77 73 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ws]] {..
116d0 73 65 74 20 72 6f 77 20 5b 6c 69 73 74 5d 0d 0a  set row [list]..
116e0 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73  ..        for {s
116f0 65 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e  et index 0} {$in 11700 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 dex <$count} {i
11710 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20  ncr index} {..
11720 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75          set valu
11730 65 20 5b 24 64 61 74 61 52 6f 77 20 2d 63 72 65  e [$dataRow -cre 11740 61 74 65 20 2d 61 6c 69 61 73 20 67 65 74 5f 49 ate -alias get_I 11750 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20 tem$index]....
11760 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
11770 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c  ring length $val 11780 75 65 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 ue] > 0 && \.. 11790 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 6f 62 ![ob 117a0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 76 ject invoke Conv 117b0 65 72 74 20 49 73 44 42 4e 75 6c 6c 20 24 76 61 ert IsDBNull$va
117c0 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  lue]} then {..
117d0 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
117e0 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d  d row [list $nam 117f0 65 73 28 24 69 6e 64 65 78 29 20 5b 24 76 61 6c es($index) [$val 11800 75 65 20 54 6f 53 74 72 69 6e 67 5d 5d 0d 0a 20 ue ToString]].. 11810 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 11820 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c {.. l 11830 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 append row [list 11840 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 5d$names($index)] 11850 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 11860 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 11870 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 73 lappend rows 11880 20 24 72 6f 77 0d 0a 20 20 20 20 20 20 7d 0d 0a$row..      }..
11890 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $118a0 72 6f 77 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a rows.. }..... 118b0 20 20 20 20 70 72 6f 63 20 64 75 6d 70 52 6f 77 proc dumpRow 118c0 73 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b sFromDataTable { 118d0 20 63 68 61 6e 6e 65 6c 20 72 6f 77 73 20 7d 20 channel rows } 118e0 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 65 71 {.. set seq 118f0 75 65 6e 63 65 20 31 0d 0a 0d 0a 20 20 20 20 20 uence 1.... 11900 20 66 6f 72 65 61 63 68 20 72 6f 77 20 24 72 6f foreach row$ro
11910 77 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  ws {..        tp
11920 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 11930 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 11940 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 [expr {$
11950 73 65 71 75 65 6e 63 65 20 3e 20 31 20 3f 20 22  sequence > 1 ? "
11960 5c 6e 22 20 3a 20 22 22 7d 5d 20 22 2d 2d 2d 2d  \n" : ""}] "----
11970 20 52 4f 57 20 23 22 20 24 73 65 71 75 65 6e 63   ROW #" $sequenc 11980 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 e :\n].... 11990 20 20 66 6f 72 65 61 63 68 20 70 61 69 72 20 24 foreach pair$
119a0 72 6f 77 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  row {..
119b0 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70   if {[llength $p 119c0 61 69 72 5d 20 3e 3d 20 32 7d 20 74 68 65 6e 20 air] >= 2} then 119d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 119e0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
119f0 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a  ppendArgs \t \..
11a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11a10 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70  [list [lindex $p 11a20 61 69 72 20 30 5d 5d 20 22 3a 20 22 20 5b 6c 69 air 0]] ": " [li 11a30 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 st [lindex$pair
11a40 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20   1]] \n]..
11a50 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6c      } elseif {[l
11a60 6c 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3d 3d  length $pair] == 11a70 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 1} then {.. 11a80 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
11a90 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
11aa0 67 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20  gs \t \..
11ab0 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b           [list [
11ac0 6c 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d  lindex $pair 0]] 11ad0 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e 22 5d 0d 0a ": <null>\n"].. 11ae0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 11af0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 11b00 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c tputs$channel \
11b10 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20 23 20 4e 4f  t<empty>\n; # NO
11b20 54 45 3a 20 4e 6f 20 64 61 74 61 3f 0d 0a 20 20  TE: No data?..
11b30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
11b40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
11b50 69 6e 63 72 20 73 65 71 75 65 6e 63 65 0d 0a 20  incr sequence..
11b60 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
11b70 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e  ..    proc clean
11b80 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20  upDb { fileName
11b90 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f  {varName db} {co
11ba0 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61  llect true} {qua
11bb0 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20  lify true}..
11bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11bd0 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d   {delete true} }
11be0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
11bf0 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
11c00 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20  pt to force all
11c10 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65  pending "garbage
11c20 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20  " objects to be
11c30 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20  collected,..
11c40 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64    #       includ
11c50 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65  ing SQLite state
11c60 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70  ments and backup
11c70 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73   objects; this s
11c80 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20  hould allow..
11c90 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75     #       the u
11ca0 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61  nderlying databa
11cb0 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65  se file to be de
11cc0 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  leted...      #.
11cd0 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c  .      if {$coll 11ce0 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ect} then {.. 11cf0 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 collectGarb 11d00 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e age$::test_chan
11d10 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  nel..      }....
11d20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
11d30 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
11d40 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
11d50 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
11d60 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
11d70 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
11d80 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20  #       caller.
11d90 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74   The handle to t
11da0 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76  he database prev
11db0 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69  iously opened vi
11dc0 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  a the..      #
11dd0 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70       [setupDb] p
11de0 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20  rocedure should
11df0 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e  be stored there.
11e00 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
11e10 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 11e20 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d e db.... #. 11e30 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 11e40 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 lose the connect 11e50 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 ion to the datab 11e60 61 73 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73 ase now. This s 11e70 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a hould allow us.. 11e80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f # to 11e90 20 64 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65 delete the unde 11ea0 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 rlying database 11eb0 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a file... #.. 11ec0 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 11ed0 65 78 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63 exists db] && [c 11ee0 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 atch {sql close 11ef0 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65$db} error]} the
11f00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
11f10 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
11f20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65  We somehow faile
11f30 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64  d to close the d
11f40 61 74 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20  atabase, report
11f50 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  why...        #.
11f60 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $11f70 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 11f80 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 11f90 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 11fa0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 11fb0 74 6f 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73 to close databas 11fc0 65 20 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65 e \""$db "\", e
11fd0 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20  rror: " \..
11fe0 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72         \n\t $err 11ff0 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d or \n].. }. 12000 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 12010 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c # NOTE: First, 12020 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c see if our call 12030 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 er has requested 12040 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 an in-memory da 12050 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 tabase... # 12060 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 .. set isMe 12070 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 mory [isMemoryDb 12080 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20$fileName]....
12090 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
120a0 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
120b0 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65  full path to the
120c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e   database file n
120d0 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61  ame.  For now, a
120e0 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23  ll test..      #
120f0 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20         database
12100 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64  files are stored
12110 20 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72   in the temporar
12120 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20  y directory...
12130 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
12140 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24  {!$isMemory &&$
12150 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d  qualify} then {.
12160 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c  .        set fil
12170 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  eName [file join
12180 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
12190 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61  ectory] [file ta
121a0 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  il $fileName]].. 121b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 121c0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 121d0 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 : Check if the f 121e0 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 ile still exists 121f0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 12200 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 if {!$isMemory
12210 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b   && $delete && [ 12220 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
12230 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
12240 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12250 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
12260 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73  deleting databas
12270 65 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62  e files if someb
12280 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f  ody sets the glo
12290 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  bal..        #
122a0 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f       variable to
122b0 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20   prevent it...
122c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
122d0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
122e0 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44  ts ::no(cleanupD
122f0 62 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  bFile)]} then {.
12300 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
12310 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
12320 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74  Attempt to delet
12330 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62  e the test datab
12340 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20  ase file now...
12350 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
12360 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63        if {[set c
12370 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65  ode [catch {file
12380 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d   delete $fileNam 12390 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e e} error]]} then 123a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 123b0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 123c0 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f NOTE: We someho 123d0 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 w failed to dele 123e0 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 te the file, rep 123f0 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 ort why... 12400 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 12410 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
12420 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
12430 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
12440 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
12450 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
12460 74 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61  to delete databa
12470 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  se file \"" $fil 12480 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. 12490 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 "\" dur 124a0 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 ing cleanup, err 124b0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
124c0 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
124d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
124e0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
124f0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
12500 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77  OTE: Show that w
12510 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  e skipped deleti
12520 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20  ng the file...
12530 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12540 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d       set code 0.
12550 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  ...          tpu
12560 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 12570 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 12580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12590 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 "==== WARNING: s 125a0 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 kipped deleting 125b0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 database file \" 125c0 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 "$fileName \..
125d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
125e0 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c   during cleanup\
125f0 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n"]..        }..
12600 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
12610 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12620 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66     # NOTE: The f
12630 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  ile does not exi
12640 73 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20  st, success!..
12650 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12660 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20   set code 0..
12670 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
12680 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20  turn $code.. 12690 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 }..... proc s 126a0 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 etupDbInterruptC 126b0 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 allback { channe 126c0 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 l log } {.. 126d0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
126e0 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70  "---- setting up
126f0 20 64 65 62 75 67 67 65 72 20 69 6e 74 65 72 72   debugger interr
12700 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20  upt callback...
12710 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  "....      if {[
12720 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
12730 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
12740 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68  TE: Make sure th
12750 65 20 73 63 72 69 70 74 20 64 65 62 75 67 67 65  e script debugge
12760 72 20 61 6e 64 20 74 68 65 20 69 73 6f 6c 61 74  r and the isolat
12770 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 20 61  ed interpreter a
12780 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  re..        #
12790 20 20 20 20 73 65 74 75 70 20 61 6e 64 20 72 65      setup and re
127a0 61 64 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20  ady for use...
127b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
127c0 20 64 65 62 75 67 20 73 65 74 75 70 20 74 72 75   debug setup tru
127d0 65 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20  e true....
127e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
127f0 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65  OTE: Load the ne
12800 63 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 73  cessary packages
12810 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74   into the isolat
12820 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  ed interpreter..
12830 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
12840 20 20 20 20 64 65 62 75 67 20 65 76 61 6c 20 7b      debug eval {
12850 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b  ..          pack
12860 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c  age require Eagl
12870 65 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63  e..          pac
12880 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67  kage require Eag
12890 6c 65 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 20  le.Library..
128a0 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65        package re
128b0 71 75 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74  quire Eagle.Test
128c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
128d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
128e0 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74    # NOTE: Copy t
128f0 68 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 72  he necessary var
12900 69 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20  iables into the
12910 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72  isolated interpr
12920 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23  eter...        #
12930 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20  ..        debug
12940 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74  invoke 0 set ::t
12950 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 61  est_channel $cha 12960 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46 6f nnel; # NOTE: Fo 12970 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20 20 r [tputs]... 12980 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 debug invoke 12990 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 0 set ::test_lo 129a0 67 20 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a 20 g$log; # NOTE:
129b0 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20  For [tlog].....
129c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
129d0 20 20 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c    # NOTE: Instal
129e0 6c 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73  l the callback s
129f0 63 72 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c  cript to be eval
12a00 75 61 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f  uated in the iso
12a10 6c 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 23  lated..        #
12a20 20 20 20 20 20 20 20 69 6e 74 65 72 70 72 65 74         interpret
12a30 65 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74  er when this int
12a40 65 72 70 72 65 74 65 72 20 69 73 20 69 6e 74 65  erpreter is inte
12a50 72 72 75 70 74 65 64 20 62 79 20 73 63 72 69 70  rrupted by scrip
12a60 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
12a70 20 20 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c     cancellation,
12a80 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 23   etc...        #
12a90 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20  ..        debug
12aa0 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b  callback apply {
12ab0 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20  {sender e} {..
12ac0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12ad0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
12ae0 63 6b 20 69 66 20 74 68 69 73 20 63 61 6c 6c 62  ck if this callb
12af0 61 63 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20  ack is one that
12b00 77 65 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a  we care about...
12b10 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
12b20 20 20 20 20 20 20 20 69 66 20 7b 22 43 61 6e 63         if {"Canc
12b30 65 6c 65 64 22 20 69 6e 20 5b 73 70 6c 69 74 20  eled" in [split
12b40 5b 24 65 20 49 6e 74 65 72 72 75 70 74 54 79 70  [$e InterruptTyp 12b50 65 5d 20 22 2c 20 22 5d 7d 20 74 68 65 6e 20 7b e] ", "]} then { 12b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 12b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 12b80 4f 54 45 3a 20 49 74 65 72 61 74 65 20 74 68 72 OTE: Iterate thr 12b90 6f 75 67 68 20 61 6c 6c 20 64 61 74 61 62 61 73 ough all databas 12ba0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e e connections kn 12bb0 6f 77 6e 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 own to the.. 12bc0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 12bd0 70 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 parent interpret 12be0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er... 12bf0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 12c00 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d object foreach - 12c10 61 6c 69 61 73 20 70 61 69 72 20 5c 0d 0a 20 20 alias pair \.. 12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f [o 12c30 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 12c40 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 24 ags +NonPublic$
12c50 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 63 6f  e Interpreter.co
12c60 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20  nnections] {..
12c70 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
12c90 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
12ca0 63 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71  cancel any SQL q
12cb0 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65  ueries in progre
12cc0 73 73 20 6f 6e 20 74 68 69 73 0d 0a 20 20 20 20  ss on this..
12cd0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
12ce0 20 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65    database conne
12cf0 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20  ction...
12d00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12d10 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
12d20 68 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43  h {$pair Value.C 12d30 61 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 ancel} error]} t 12d40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 12d50 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
12d60 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
12d70 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20  pendArgs \n \..
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12d90 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
12da0 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61 6e 63  : failed to canc
12db0 65 6c 20 71 75 65 72 79 20 66 6f 72 20 63 6f 6e  el query for con
12dc0 6e 65 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20  nection \"" \..
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12de0 20 20 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22     [$pair Key] " 12df0 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c \", error: " \n\ 12e00 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
12e10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
12e20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
12e30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
12e40 20 20 20 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65     }}..      } e
12e50 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  rror] == 0} then
12e60 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   {..        addC
12e70 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72  onstraint interr
12e80 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69  uptCallback.sqli
12e90 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  te3....        t
12ea0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65  puts $channel ye 12eb0 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 s\n.. } els 12ec0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu 12ed0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
12ee0 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72  endArgs "no, err
12ef0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 12f00 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a r \n].. }.. 12f10 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 12f20 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b oc cleanupFile { 12f30 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 fileName {colle 12f40 63 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 ct true} {force 12f50 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 12f60 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12f70 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f E: Attempt to fo 12f80 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 rce all pending 12f90 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 "garbage" object 12fa0 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 s to be collecte 12fb0 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 d,.. # 12fc0 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 including SQLi 12fd0 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e te statements an 12fe0 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 d backup objects 12ff0 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c ; this should al 13000 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 low.. # 13010 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e the underlyin 13020 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 g database file 13030 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a to be deleted... 13040 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 13050 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 f {$collect} the
13060 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c  n {..        col
13070 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74  lectGarbage $::t 13080 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 est_channel.. 13090 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 130a0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 130b0 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 heck if the file 130c0 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a still exists... 130d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 130e0 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 f {[file exists 130f0 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
13100 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
13110 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
13120 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73  kip deleting tes
13130 74 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62  t files if someb
13140 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f  ody sets the glo
13150 62 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20  bal variable..
13160 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
13170 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20   prevent it...
13180 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13190 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21   if {$force || ! 131a0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 131b0 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d o(cleanupFile)]} 131c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 131d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 131e0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 131f0 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 to delete the te 13200 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 st file now... 13210 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 13220 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f if {[set co 13230 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 de [catch {file 13240 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 delete$fileName
13250 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20  } error]]} then
13260 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
13270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
13280 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
13290 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
132a0 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f  e the file, repo
132b0 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20  rt why...
132c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
132d0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 132e0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 132f0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 13300 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 13310 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 13320 6f 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 o delete test fi 13330 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
13340 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13350 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63      "\" during c
13360 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22  leanup, error: "
13370 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 13380 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 13390 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 133a0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 133b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 133c0 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 Show that we ski 133d0 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 pped deleting th 133e0 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 e file... 133f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 13400 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 set code 0.... 13410 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
13420 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
13430 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
13440 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
13450 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65   WARNING: skippe
13460 64 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20  d deleting test
13470 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa 13480 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 13490 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c 134a0 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 leanup\n"].. 134b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 134c0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 134d0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 134e0 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 : The file does 134f0 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 not exist, succe 13500 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ss!.. #.. 13510 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code 13520 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 0.. }.... 13530 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 return$cod
13540 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
13550 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72   proc collectGar
13560 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  bage { channel {
13570 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30  milliseconds 100
13580 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20  0} {quiet true}
13590 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
135a0 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e  catch {object in
135b0 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c  voke GC GetTotal
135c0 4d 65 6d 6f 72 79 20 66 61 6c 73 65 7d 20 72 65  Memory false} re
135d0 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sult] == 0} then
135e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
135f0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 13600 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 13610 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
13620 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
13630 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d         "---- mem
13640 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68  ory in use by th
13650 65 20 43 4c 52 20 62 65 66 6f 72 65 20 63 6f 6c  e CLR before col
13660 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a  lection... " \..
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72                $r 13680 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 esult " bytes\n" 13690 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 136a0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 136b0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
136c0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
136d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
136e0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
136f0 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52  ailed to get CLR
13700 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65   memory usage, e
13710 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20  rror: " \..
13720 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73         \n\t $res 13730 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d ult \n].. } 13740 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23 23 .... ###### 13750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13790 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a ###.... #.. 137a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 137b0 70 65 61 74 65 64 6c 79 20 61 74 74 65 6d 70 74 peatedly attempt 137c0 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 to collect garb 137d0 61 67 65 20 75 6e 74 69 6c 20 74 68 65 20 61 6c age until the al 137e0 6c 6f 74 74 65 64 20 6e 75 6d 62 65 72 0d 0a 20 lotted number.. 137f0 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 # of 13800 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 68 61 73 milliseconds has 13810 20 65 6c 61 70 73 65 64 2e 20 20 41 6c 77 61 79 elapsed. Alway 13820 73 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c s attempt to col 13830 6c 65 63 74 20 67 61 72 62 61 67 65 0d 0a 20 20 lect garbage.. 13840 20 20 20 20 23 20 20 20 20 20 20 20 61 74 20 6c # at l 13850 65 61 73 74 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 east once... 13860 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 #.. set s 13870 74 61 72 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f tart [clock seco 13880 6e 64 73 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 nds].. set 13890 73 74 6f 70 20 5b 65 78 70 72 20 7b 24 73 74 61 stop [expr {$sta
138a0 72 74 20 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f  rt + ($milliseco 138b0 6e 64 73 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d nds / 1000)}]... 138c0 0a 20 20 20 20 20 20 64 6f 20 7b 0d 0a 20 20 20 . do {.. 138d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 138e0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 138f0 74 6f 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20 to force a full 13900 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 garbage collecti 13910 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20 on now. Report 13920 61 6e 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 any.. # 13930 20 20 20 20 20 65 72 72 6f 72 20 74 68 61 74 20 error that 13940 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 is encountered i 13950 66 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 f we fail... 13960 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 13970 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 f {[catch {objec 13980 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 t invoke GC GetT 13990 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 7d otalMemory true} 139a0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. 139b0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 139c0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
139d0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
139e0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
139f0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 66 75 6c  NING: failed ful
13a00 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63  l garbage collec
13a10 74 69 6f 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c  tion, error: " \
13a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13a30 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 13a40 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 13a50 20 20 20 20 20 20 73 65 74 20 6e 6f 77 20 5b 63 set now [c 13a60 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 lock seconds].. 13a70 20 20 20 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 } while {$s
13a80 74 61 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20  tart <= $now && 13a90 24 6e 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 0d$now < $stop}... 13aa0 0a 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 . ######### 13ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 13af0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c 13b00 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 atch {object inv 13b10 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d oke GC GetTotalM 13b20 65 6d 6f 72 79 20 66 61 6c 73 65 7d 20 72 65 73 emory false} res 13b30 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then 13b40 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 {.. if {! 13b50 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
13b60 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
13b70 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 13b80 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 13b90 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f "---- memo 13ba0 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 ry in use by the 13bb0 20 43 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c 65 CLR after colle 13bc0 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 ction... " \.. 13bd0 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73$res
13be0 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ult " bytes\n"].
13bf0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
13c00 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
13c10 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 13c20 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 13c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d .. "= 13c40 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 13c50 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d led to get CLR m 13c60 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 emory usage, err 13c70 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 13c80 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
13c90 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  t \n]..      }..
13ca0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
13cb0 6f 63 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64  oc getSQLiteHand
13cc0 6c 65 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e  leCounts { chann
13cd0 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d  el {quiet false}
13ce0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
13cf0 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d  result [list]...
13d00 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
13d10 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20  Constraint \..
13d20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69              defi
13d30 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
13d40 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 43 4f  m.Data.SQLite.CO
13d50 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65  UNT_HANDLE]} the
13d60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
13d70 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
13d80 41 64 64 20 65 61 63 68 20 63 72 69 74 69 63 61  Add each critica
13d90 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74  l handle count t
13da0 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20  o the resulting
13db0 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  list...        #
13dc0 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
13dd0 68 20 6e 61 6d 65 20 5b 6c 69 73 74 20 63 6f 6e  h name [list con
13de0 6e 65 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61  nectionCount sta
13df0 74 65 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b  tementCount back
13e00 75 70 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20  upCount] {..
13e10 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20        set value
13e20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
13e30 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
13e40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13e50 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
13e60 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
13e70 65 4d 65 74 68 6f 64 73 20 24 6e 61 6d 65 5d 0d  eMethods $name]. 13e80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 13e90 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
13ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
13eb0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 13ec0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 13ed0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 13ee0 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c - critical handl 13ef0 65 20 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d e count \""$nam
13f00 65 20 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75  e "\" is " $valu 13f10 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 e \n].. 13f20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 13f30 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 lappend result$
13f40 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7d  value..        }
13f50 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
13f60 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 13f70 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 13f80 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 13f90 65 20 61 63 74 75 61 6c 20 68 61 6e 64 6c 65 20 e actual handle 13fa0 63 6f 75 6e 74 73 20 61 72 65 20 6e 6f 74 20 61 counts are not a 13fb0 76 61 69 6c 61 62 6c 65 3b 20 74 68 65 72 65 66 vailable; theref 13fc0 6f 72 65 2c 20 6a 75 73 74 0d 0a 20 20 20 20 20 ore, just.. 13fd0 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72 # retur 13fe0 6e 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 2e n an empty list. 13ff0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 14000 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
14010 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63  nel "---- critic
14020 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73  al handle counts
14030 20 75 6e 61 76 61 69 6c 61 62 6c 65 5c 6e 22 0d   unavailable\n".
14040 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
14050 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 14060 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 14070 70 72 6f 63 20 73 68 75 74 64 6f 77 6e 53 51 4c proc shutdownSQL 14080 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 66 ite { channel {f 14090 6f 72 63 65 20 66 61 6c 73 65 7d 20 7b 71 75 69 orce false} {qui 140a0 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 et false} } {.. 140b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 140c0 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 NOTE: Make sure 140d0 74 68 61 74 20 53 51 4c 69 74 65 20 63 6f 72 65 that SQLite core 140e0 20 6c 69 62 72 61 72 79 20 69 73 20 63 6f 6d 70 library is comp 140f0 6c 65 74 65 6c 79 20 73 68 75 74 64 6f 77 6e 2e letely shutdown. 14100 20 20 54 68 69 73 0d 0a 20 20 20 20 20 20 23 20 This.. # 14110 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79 is used by 14120 20 74 65 73 74 73 20 74 68 61 74 20 63 68 61 6e tests that chan 14130 67 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ge configuration 14140 20 6f 70 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 options and/or 14150 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 23 20 20 those.. # 14160 20 20 20 20 20 74 68 61 74 20 6e 65 65 64 20 74 that need t 14170 6f 20 6d 61 6b 65 20 73 75 72 65 20 6c 6f 67 67 o make sure logg 14180 69 6e 67 20 69 73 20 69 6e 69 74 69 61 6c 69 7a ing is initializ 14190 65 64 20 28 69 2e 65 2e 20 6a 75 73 74 20 69 6e ed (i.e. just in 141a0 20 63 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20 case.. # 141b0 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 the SQLite 141c0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 73 core library was 141d0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e 20 initialized in 141e0 74 68 65 20 70 72 6f 63 65 73 73 20 70 72 69 6f the process prio 141f0 72 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 r to.. # 14200 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 4c 6f the SQLiteLo 14210 67 20 63 6c 61 73 73 20 62 65 69 6e 67 20 61 62 g class being ab 14220 6c 65 20 74 6f 20 73 65 74 75 70 20 69 74 73 20 le to setup its 14230 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b logging callback 14240 29 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 )... # 14250 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 Normally, this 14260 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20 should only be 14270 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c performed if SQL 14280 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e ite is loaded an 14290 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 142a0 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 ready for use b 142b0 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 y the test suite 142c0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 142d0 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 if {$force ||
142e0 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d  [isSQLiteReady]}
142f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14300 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55   #..        # BU
14310 47 46 49 58 3a 20 4d 61 6b 65 20 73 75 72 65 20  GFIX: Make sure
14320 74 68 61 74 20 61 6e 79 20 22 6c 65 61 6b 65 64  that any "leaked
14330 22 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61  " transactions a
14340 6e 64 2f 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  nd/or connection
14350 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
14360 20 20 20 20 20 61 72 65 20 63 6c 65 61 6e 65 64       are cleaned
14370 20 75 70 20 62 65 66 6f 72 65 20 63 61 6c 6c 69   up before calli
14380 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 68  ng the native sh
14390 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2e  utdown function.
143a0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
143b0 20 20 20 20 20 66 6f 72 65 61 63 68 20 74 72 61       foreach tra
143c0 6e 73 61 63 74 69 6f 6e 20 5b 69 6e 66 6f 20 74  nsaction [info t
143d0 72 61 6e 73 61 63 74 69 6f 6e 73 5d 20 7b 0d 0a  ransactions] {..
143e0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
143f0 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a 20  tring match \..
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
14410 74 65 6d 23 44 61 74 61 23 53 51 4c 69 74 65 23  tem#Data#SQLite#
14420 53 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f  SQLiteTransactio
14430 6e 23 2a 20 24 74 72 61 6e 73 61 63 74 69 6f 6e  n#* $transaction 14440 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 14450 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 14460 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 14470 20 20 20 73 71 6c 20 74 72 61 6e 73 61 63 74 69 sql transacti 14480 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 24 74 72 61 on rollback$tra
14490 6e 73 61 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  nsaction..
144a0 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d        } error] =
144b0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
144c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
144d0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 144f0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
14500 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14520 20 20 22 2d 2d 2d 2d 20 72 6f 6c 6c 65 64 20 62    "---- rolled b
14530 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 61 6e 73  ack leaked trans
14540 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20  action \"" \..
14550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14560 20 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c    $transaction \ 14570 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 "\n].. 14580 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 14590 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 145a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 145b0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
145c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
145d0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 145e0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14600 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 14610 20 66 61 69 6c 65 64 20 74 6f 20 72 6f 6c 6c 62 failed to rollb 14620 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 61 6e 73 ack leaked trans 14630 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 action \"" \.. 14640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14650 20 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 20 22$transaction "
14660 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  \", error: " \n\
14670 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 14680 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 14690 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 146a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 146b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 146c0 66 6f 72 65 61 63 68 20 64 62 20 5b 69 6e 66 6f foreach db [info 146d0 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d connections] {. 146e0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 146f0 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a string match \.. 14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 14710 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69 74 65 stem#Data#SQLite 14720 23 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f #SQLiteConnectio 14730 6e 23 2a 20 24 64 62 5d 7d 20 74 68 65 6e 20 7b n#*$db]} then {
14740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
14750 20 7b 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c   {[catch {sql cl
14760 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 20  ose $db} error] 14770 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 14780 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 14790 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
147a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
147b0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 147c0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 147e0 20 20 20 22 2d 2d 2d 2d 20 63 6c 6f 73 65 64 20 "---- closed 147f0 6c 65 61 6b 65 64 20 64 61 74 61 62 61 73 65 20 leaked database 14800 5c 22 22 20 24 64 62 20 5c 22 5c 6e 5d 0d 0a 20 \""$db \"\n]..
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14820 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
14830 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
14840 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 14850 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 14860 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
14870 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
14880 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
14890 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
148a0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
148b0 20 74 6f 20 63 6c 6f 73 65 20 6c 65 61 6b 65 64   to close leaked
148c0 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c 0d   database \"" \.
148d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
148e0 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65 72       $db "\", er 148f0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
14900 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
14910 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
14920 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
14930 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
14940 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
14950 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 42       # BUGFIX: B
14960 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68  efore calling th
14970 65 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77  e native shutdow
14980 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65  n function, make
14990 20 73 75 72 65 20 62 6f 74 68 0d 0a 20 20 20 20   sure both..
149a0 20 20 20 20 23 20 20 20 20 20 20 20 20 20 6f 66      #         of
149b0 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61   the PRAGMA rela
149c0 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61  ted directory na
149d0 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a  mes are freed...
149e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
149f0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
14a00 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 63 68  eDirectories $ch 14a10 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 annel true.... 14a20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 14a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 14a40 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 14a50 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 14a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 14a70 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 14a80 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 e.UnsafeNativeMe 14a90 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 73 68 thods sqlite3_sh 14aa0 75 74 64 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 utdown.. 14ab0 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 } result] == 0} 14ac0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 14ad0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
14ae0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
14af0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 14b00 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 14b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 14b20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 "---- call sqli 14b30 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e te3_shutdown().. 14b40 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 . ok: "$result
14b50 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
14b60 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
14b70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
14b80 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 14b90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 14ba0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
14bb0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
14bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
14bd0 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  -- call sqlite3_
14be0 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 65 72  shutdown()... er
14bf0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73  ror: " \n\t $res 14c00 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 14c10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 14c20 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 14c30 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 .... proc rep 14c40 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 ortSQLiteResourc 14c50 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 14c60 20 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 channel {quiet 14c70 20 66 61 6c 73 65 7d 20 7b 72 65 73 65 74 20 74 false} {reset t 14c80 72 75 65 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 rue} {collect tr 14c90 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ue} } {.. # 14ca0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 14cb0 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 If available, re 14cc0 70 6f 72 74 20 6f 6e 20 28 61 6e 64 20 70 6f 73 port on (and pos 14cd0 73 69 62 6c 79 20 72 65 73 65 74 29 20 74 68 65 sibly reset) the 14ce0 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 runtime.. 14cf0 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 # configur 14d00 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73 ation statistics 14d10 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 14d20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 if {[haveConst 14d30 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69 raint buildConfi 14d40 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d 20 guration.Debug] 14d50 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 && [catch {.. 14d60 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 14d70 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 14d80 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 blic -alias \.. 14d90 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 14da0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e m.Data.SQLite.Un 14db0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 safeNativeMethod 14dc0 73 20 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 s settingReadCou 14dd0 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 73 65 74 nts.. } set 14de0 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 5d 20 tingReadCounts] 14df0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 14e00 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f set nameCo 14e10 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 52 65 61 unt [$settingRea
14e20 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a  dCounts Count]..
14e30 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75          set valu
14e40 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20  eCount 0....
14e50 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
14e60 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24  ch -alias pair $14e70 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 settingReadCount 14e80 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 s {.. i 14e90 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b ncr valueCount [ 14ea0 24 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a$pair Value]....
14eb0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$14ec0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 14ed0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 14ee0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
14ef0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
14f00 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
14f10 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69  etting \"" [$pai 14f20 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72 r Key] "\" was r 14f30 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ead " \.. 14f40 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 [$pair
14f50 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 73 5c 6e  Value] " times\n
14f60 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  "]..          }.
14f70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
14f80 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74        if {$reset 14f90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14fa0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 14fb0 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e$settingReadCoun
14fc0 74 73 20 43 6c 65 61 72 7d 20 65 72 72 6f 72 5d  ts Clear} error]
14fd0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
14fe0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
14ff0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 15000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 15010 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
15020 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
15040 2d 2d 2d 20 72 65 73 65 74 20 73 65 74 74 69 6e  --- reset settin
15050 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72  g statistics for
15060 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20   the previous "
15070 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
15080 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20       $nameCount 15090 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 " names and "$v
150a0 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61 6c 75  alueCount " valu
150b0 65 73 20 72 65 61 64 5c 6e 22 5d 0d 0a 20 20 20  es read\n"]..
150c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
150d0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
150e0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
150f0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 15100 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 15110 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 15120 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 15130 74 6f 20 72 65 73 65 74 20 73 65 74 74 69 6e 67 to reset setting 15140 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 20 statistics for 15150 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 15160 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69 6f "the previo 15170 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20 us "$nameCount
15180 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76  " names and " $v 15190 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 alueCount \.. 151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 76 " v 151b0 61 6c 75 65 73 20 72 65 61 64 2c 20 65 72 72 6f alues read, erro 151c0 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
151d0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
151e0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
151f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
15200 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69  f {[haveConstrai
15210 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  nt \..
15220 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61      defineConsta
15230 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nt.System.Data.S
15240 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49  QLite.INTEROP_VI
15250 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 20  RTUAL_TABLE] &&
15260 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61  \..          [ha
15270 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a  veConstraint \..
15280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
15290 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
152a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
152b0 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54  TRACK_MEMORY_BYT
152c0 45 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ES]} then {..
152d0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 152e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 152f0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
15300 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74  el "---- current
15310 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62   memory in use b
15320 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e  y SQLiteMemory..
15330 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  . "..        }..
15340 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
15350 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
15360 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
15370 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
15380 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
15390 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
153a0 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f  QLite.SQLiteMemo
153b0 72 79 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65  ry bytesAllocate
153c0 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d  d..        } mem
153d0 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
153e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
153f0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 15400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 15410 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
15420 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 15430 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 " bytes\n"].. 15440 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 15450 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 15460 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 15470 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 y unknown.... 15480 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
15490 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
154a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 154b0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 154c0 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
154d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
154e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
154f0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 15500 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 15510 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
15520 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65  "---- maximum me
15530 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53  mory in use by S
15540 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22  QLiteMemory... "
15550 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
15560 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
15570 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
15580 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
15590 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
155a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
155b0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
155c0 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20  te.SQLiteMemory
155d0 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f  maximumBytesAllo
155e0 63 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d  cated..        }
155f0 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74   memory] == 0} t
15600 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
15610 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 15620 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 15630 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
15640 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 15650 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d mory " bytes\n"] 15660 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 15670 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 15680 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d . set m 15690 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d emory unknown... 156a0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 156b0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
156c0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
156d0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 156e0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c ndArgs$memory \
156f0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
15700 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
15710 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
15720 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 15730 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 15740 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
15750 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e  urrent memory in
15760 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e   use by SQLite..
15770 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  . "..      }....
15780 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
15790 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
157a0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
157b0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
157c0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
157d0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
157e0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
157f0 73 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79  s sqlite3_memory
15800 5f 75 73 65 64 0d 0a 20 20 20 20 20 20 7d 20 6d  _used..      } m
15810 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
15820 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
15830 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 15840 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 15850 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
15860 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 15870 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 15880 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 15890 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 158a0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 158b0 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 : Maybe the SQLi 158c0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 158d0 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d is unavailable?. 158e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 158f0 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 15900 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 nknown.... 15910 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
15920 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
15930 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 15940 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
15950 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ory \n]..
15960 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
15970 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20       set result
15980 24 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a  $memory; # NOTE: 15990 20 52 65 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69 Return memory i 159a0 6e 2d 75 73 65 20 74 6f 20 6f 75 72 20 63 61 6c n-use to our cal 159b0 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ler..... if 159c0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
159d0 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
159e0 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 159f0 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 maximum memory i 15a00 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e n use by SQLite. 15a10 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d .. ".. }... 15a20 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc 15a30 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a h {.. obj 15a40 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 15a50 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 15a60 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 15a70 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U 15a80 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho 15a90 64 73 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 ds sqlite3_memor 15aa0 79 5f 68 69 67 68 77 61 74 65 72 20 30 0d 0a 20 y_highwater 0.. 15ab0 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d } memory] = 15ac0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 15ad0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
15ae0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15af0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 15b00 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
15b10 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e  memory " bytes\n
15b20 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  "]..        }..
15b30 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
15b40 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15b50 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20    # NOTE: Maybe
15b60 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
15b70 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61  library is unava
15b80 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20  ilable?..
15b90 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
15ba0 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a  memory unknown..
15bb0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$15bc0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 15bd0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
15be0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
15bf0 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d  rgs $memory \n]. 15c00 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 15c10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 15c20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 {$collect} then
15c30 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65  {..        colle
15c40 63 74 47 61 72 62 61 67 65 20 24 63 68 61 6e 6e  ctGarbage $chann 15c50 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 el.. }.... 15c60 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
15c70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15c80 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 15c90 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d "---- current m 15ca0 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 15cb0 74 68 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 the CLR... ".. 15cc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 15cd0 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 f {[catch {objec 15ce0 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 t invoke GC GetT 15cf0 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 otalMemory false 15d00 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 } memory] == 0} 15d10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 15d20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 if {[string is i 15d30 6e 74 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 nteger -strict$
15d40 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  memory]} then {.
15d50 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
15d60 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 15d70 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 15d80 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
15d90 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 15da0 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 15db0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 15dc0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 15dd0 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 set memory 15de0 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 invalid.... 15df0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
15e00 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15e10 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 15e20 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 15e30 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20$memory \n]..
15e40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
15e50 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
15e60 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  se {..        se
15e70 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
15e80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
15e90 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 15ea0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 15eb0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
15ec0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e  dArgs $memory \n 15ed0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 15ee0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r 15ef0 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 eturn$result..
15f00 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
15f10 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
15f20 44 69 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68  Directories { ch
15f30 61 6e 6e 65 6c 20 7b 72 65 73 65 74 20 66 61 6c  annel {reset fal
15f40 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
15f50 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
15f60 43 68 65 63 6b 20 69 66 20 74 68 65 20 73 71 6c  Check if the sql
15f70 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
15f80 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f  irectory functio
15f90 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d  n is available..
15fa0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
15fb0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c  tputs $channel \ 15fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d .. "--- 15fd0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 - checking for f 15fe0 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f unction sqlite3_ 15ff0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 16000 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 ory... ".... 16010 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 16020 45 3a 20 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 E: This call to 16030 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 16040 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 16050 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 function uses th 16060 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 16070 20 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 30 invalid value 0 16080 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 61 for the first a 16090 72 67 75 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 rgument. This c 160a0 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 0d ode is designed. 160b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 160c0 6f 20 63 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 o check if calli 160d0 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 ng the function 160e0 77 69 6c 6c 20 72 61 69 73 65 20 61 6e 20 65 78 will raise an ex 160f0 63 65 70 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 ception (i.e... 16100 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 16110 20 61 63 74 75 61 6c 20 72 65 73 75 6c 74 20 6f actual result o 16120 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 f the function d 16130 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 oes not matter a 16140 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 s long as no.. 16150 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 # dire 16160 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 ctory is changed 16170 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 )... #.. 16180 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 16190 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 . object 161a0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 161b0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 161c0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 161d0 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 ata.SQLite.Unsaf 161e0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c eNativeMethods \ 161f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 .. sq 16200 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ 16210 64 69 72 65 63 74 6f 72 79 20 30 20 6e 75 6c 6c directory 0 null 16220 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d .. }] == 0} 16230 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 16240 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 16250 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 20 TE: Calling the 16260 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 16270 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 t_directory func 16280 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 tion does not.. 16290 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 162a0 61 75 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f ause an exceptio 162b0 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 n; therefore, it 162c0 20 6d 75 73 74 20 62 65 20 61 76 61 69 6c 61 62 must be availab 162d0 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 le (i.e... 162e0 20 20 23 20 20 20 20 20 20 20 65 76 65 6e 20 74 # even t 162f0 68 6f 75 67 68 20 69 74 20 73 68 6f 75 6c 64 20 hough it should 16300 72 65 74 75 72 6e 20 61 20 66 61 69 6c 75 72 65 return a failure 16310 20 72 65 74 75 72 6e 20 63 6f 64 65 20 69 6e 20 return code in 16320 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 this.. # 16330 20 20 20 20 20 20 63 61 73 65 29 2e 0d 0a 20 20 case)... 16340 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 16350 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 addConstraint s 16360 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 16370 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 _directory.... 16380 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
16390 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20  nnel yes\n....
163a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
163b0 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75   # NOTE: Does ou
163c0 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f  r caller want to
163d0 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63   reset the direc
163e0 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20 20 20 20  tories?..
163f0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
16400 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $reset} then {.. 16410 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 16420 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e # NOTE: N 16430 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 ow make sure the 16440 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 database and te 16450 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 mporary director 16460 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 ies are.. 16470 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74 # reset 16480 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 their default v 16490 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f alues, which sho 164a0 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 uld be null for 164b0 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 both... 164c0 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 # Since t 164d0 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 he sqlite3_win32 164e0 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 _set_directory f 164f0 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c unction is avail 16500 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 able,.. 16510 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 2e # use it. 16520 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 16530 20 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 for {se 16540 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 t index 1} {$ind
16550 65 78 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69 6e  ex < 3} {incr in
16560 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20  dex} {..
16570 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
16580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
16590 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
165a0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
165b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
165c0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
165d0 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
165e0 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20  tiveMethods \..
165f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16600 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
16610 65 74 5f 64 69 72 65 63 74 6f 72 79 20 24 69 6e  et_directory $in 16620 64 65 78 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 dex null.. 16630 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 } result] 16640 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 16650 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 16660 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
16670 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
16680 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
16690 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77  - call sqlite3_w
166a0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
166b0 72 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20  ry(" $index \.. 166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 166d0 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a ", null)... ok: 166e0 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a "$result \n]..
166f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
16700 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
16710 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 16720 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 16730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16740 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 "---- call s 16750 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 16760 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e _directory("$in
16770 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  dex \..
16780 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c           ", null
16790 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e  )... error: " \n
167a0 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 167b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 167c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 167d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 167e0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t 167f0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f puts$channel no
16800 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  \n....        #.
16810 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
16820 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72   Does our caller
16830 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74   want to reset t
16840 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20  he directories?
16850 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a   This can only..
16860 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
16870 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20  be performed if
16880 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64  SQLite is loaded
16890 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75   and ready for u
168a0 73 65 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a  se by the test..
168b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
168c0 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  suite...
168d0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24  #..        if {$168e0 72 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69 reset && [isSQLi 168f0 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b teReady]} then { 16900 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 16910 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 16920 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 Now make sure t 16930 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 he database and 16940 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 16950 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 ories are.. 16960 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 # res 16970 65 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 et their default 16980 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 values, which s 16990 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f hould be null fo 169a0 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 r both... 169b0 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 # Since 169c0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e the sqlite3_win 169d0 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 169e0 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e function does n 169f0 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 ot.. # 16a00 20 20 20 20 20 20 61 70 70 65 61 72 20 74 6f 20 appear to 16a10 62 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 be available, us 16a20 65 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 e the associated 16a30 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 PRAGMA commands 16a40 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 16a50 20 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 instead... 16a60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 16a70 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 foreach dir 16a80 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 ectory [list dat 16a90 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 a_store_director 16aa0 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 y temp_store_dir 16ab0 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 ectory] {.. 16ac0 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b set sql [ 16ad0 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 appendArgs "PRAG 16ae0 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 MA "$directory
16af0 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20  " = \"\";"]....
16b00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
16b10 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71  catch {executeSq
16b20 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20  l $sql} result] 16b30 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 16b40 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 16b50 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
16b60 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
16b70 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
16b80 2d 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41  - execute PRAGMA
16b90 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e   " $directory ". 16ba0 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 .. ok: \"" \.. 16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16bc0 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20$result \"\n]..
16bd0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
16be0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
16bf0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 16c00 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 16c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16c20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 "---- execute 16c30 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 PRAGMA "$direc
16c40 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a  tory "... error:
16c50 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
16c60 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 16c70 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 16c80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 16c90 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 16ca0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 16cb0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 16cc0 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 E: Finally, show 16cd0 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c the current val 16ce0 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 ue of the databa 16cf0 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 se and temporary 16d00 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 16d10 64 69 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 directories. Th 16d20 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 is can only be p 16d30 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 erformed if SQLi 16d40 74 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 te is loaded.. 16d50 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and 16d60 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 ready for use by 16d70 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 16d80 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 16d90 20 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 if {[isSQLiteRe 16da0 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ady]} then {.. 16db0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 foreach di 16dc0 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 rectory [list da 16dd0 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f ta_store_directo 16de0 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 ry temp_store_di 16df0 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 rectory] {.. 16e00 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
16e10 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
16e20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
16e30 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e  " $directory ".. 16e40 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 . "].... 16e50 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e set sql [appen 16e60 64 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 dArgs "PRAGMA " 16e70 24 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a$directory \;]..
16e80 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
16e90 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53  [catch {executeS
16ea0 71 6c 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20  ql $sql scalar} 16eb0 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 16ec0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16ed0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
16ee0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b   [appendArgs "ok
16ef0 3a 20 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22  : \"" $result \" 16f00 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 16f10 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 16f20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
16f30 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
16f40 22 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24  "error: " \n\t $16f50 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 result \n].. 16f60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 16f70 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. }.. 16f80 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 16f90 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 loadSQLiteTestSe 16fa0 74 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c ttings { channel 16fb0 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 {suffix ""} {qu 16fc0 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a iet false} } {.. 16fd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 16fe0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 NOTE: Skip load 16ff0 69 6e 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 ing the settings 17000 20 69 66 20 74 68 65 69 72 20 75 73 61 67 65 20 if their usage 17010 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 has been disable 17020 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 17030 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 17040 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 ists ::no(sqlite 17050 54 65 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 TestSettings)]} 17060 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 17070 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 17080 45 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 E: Load custom p 17090 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 er-user and/or p 170a0 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 er-host test set 170b0 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 tings now... 170c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 170d0 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 170e0 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 ::tcl_platform(u 170f0 73 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ser)]} then {.. 17100 20 20 20 20 20 20 20 20 20 73 65 74 20 75 73 65 set use 17110 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 17120 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 e [file join [ge 17130 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 tCommonDirectory 17140 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 17150 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 [appendArgs s 17160 65 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 ettings$suffix
17170 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  . $::tcl_platfor 17180 6d 28 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d m(user) .eagle]] 17190 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 171a0 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
171b0 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65  userSettingsFile
171c0 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
171d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
171e0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 171f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 17200 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
17210 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
17220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
17230 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d  --- loading per-
17240 75 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e  user test settin
17250 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20  gs file \"" \..
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17270 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69   $userSettingsFi 17280 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d leName \"...\n]. 17290 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 172a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 172b0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 172c0 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 upleve 172d0 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 l 1 [list source 172e0 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69$userSettingsFi
172f0 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
17300 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74       } error]} t
17310 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
17320 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 17330 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 17340 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 17350 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
17360 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
17370 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
17380 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
17390 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 75 73  d to load per-us
173a0 65 72 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65  er settings file
173b0 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
173c0 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65              $use 173d0 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 173e0 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 e "\", error: " 173f0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
17400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
17410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
17420 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
17430 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
17440 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 17450 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 17460 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
17470 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
17480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17490 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
174a0 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73  d loading per-us
174b0 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  er test settings
174c0 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20   file \"" \..
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $174e0 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 userSettingsFile 174f0 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 Name "\", it doe 17500 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. 17510 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 17520 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 17530 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 17540 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############## 17550 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 17560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 17570 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 17580 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 #########.... 17590 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 175a0 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 xists ::tcl_plat 175b0 66 6f 72 6d 28 68 6f 73 74 29 5d 7d 20 74 68 65 form(host)]} the 175c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 175d0 65 74 20 68 6f 73 74 53 65 74 74 69 6e 67 73 46 et hostSettingsF 175e0 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ileName [file jo 175f0 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 in [getCommonDir 17600 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 ectory] \.. 17610 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 [append 17620 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 Args settings$s
17630 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70  uffix . $::tcl_p 17640 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 20 2e 65 latform(host) .e 17650 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 agle]].... 17660 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 17670 69 73 74 73 20 24 68 6f 73 74 53 65 74 74 69 6e ists$hostSettin
17680 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65  gsFileName]} the
17690 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
176a0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 176b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 176c0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
176d0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
176e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
176f0 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e      "---- loadin
17700 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20  g per-host test
17710 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
17720 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
17730 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74         $hostSett 17740 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e ingsFileName \". 17750 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ..\n].. 17760 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 17770 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 17780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17790 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list 177a0 73 6f 75 72 63 65 20 24 68 6f 73 74 53 65 74 74 source$hostSett
177b0 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20  ingsFileName]..
177c0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72             } err
177d0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
177e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
177f0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 17800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17810 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
17820 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17840 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
17850 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20   failed to load
17860 70 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e 67  per-host setting
17870 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20  s file \"" \..
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17890 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46    $hostSettingsF 178a0 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 ileName "\", err 178b0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
178c0 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
178d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
178e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
178f0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
17900 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 17910 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 17920 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 17930 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
17940 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
17950 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
17960 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20  skipped loading
17970 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65  per-host test se
17980 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20  ttings file \""
17990 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
179a0 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e       $hostSettin 179b0 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 gsFileName "\", 179c0 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 179d0 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 t\n"].. 179e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 179f0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 17a00 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 17a10 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c . proc runSQL 17a20 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 iteTestPrologue 17a30 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 17a40 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 17a50 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 p running our cu 17a60 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 stom prologue if 17a70 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 the main one ha 17a80 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 s been.. # 17a90 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a skipped... 17aa0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 17ab0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 17ac0 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 ::no(prologue.e 17ad0 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a agle)]} then {.. 17ae0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17af0 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 # NOTE: Load 17b00 74 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 the "before-cons 17b10 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 traints" custom 17b20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 per-user and/or 17b30 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 per-host.. 17b40 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 # test s 17b50 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 ettings now... 17b60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 17b70 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 17b80 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 loadSQLiteTestS 17b90 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f ettings$::test_
17ba0 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d  channel .before]
17bb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
17bc0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44         # NOTE: D
17bd0 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d  etermine the nam
17be0 65 73 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65  es of the native
17bf0 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72   platform and ar
17c00 63 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20  chitecture...
17c10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
17c20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65  set platform [ge
17c30 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74  tBuildPlatform t
17c40 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65  rue]..        se
17c50 74 20 61 72 63 68 69 74 65 63 74 75 72 65 20 5b  t architecture [
17c60 61 72 63 68 69 74 65 63 74 75 72 65 46 6f 72 50  architectureForP
17c70 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72  latform $platfor 17c80 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d m].... #. 17c90 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 17ca0 20 53 68 6f 77 20 74 68 65 20 70 6c 61 74 66 6f Show the platfo 17cb0 72 6d 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 rm and architect 17cc0 75 72 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 ure used to help 17cd0 20 6c 6f 63 61 74 65 20 74 68 65 0d 0a 20 20 20 locate the.. 17ce0 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 # nat 17cf0 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 2e ive build files. 17d00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 17d10 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
17d20 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
17d30 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
17d40 20 20 20 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74        "---- plat
17d50 66 6f 72 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e  form for locatin
17d60 67 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66  g native build f
17d70 69 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20  iles is \"" \..
17d80 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74             $plat 17d90 66 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 form \"\n].... 17da0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
17db0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
17dc0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
17dd0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63         "---- arc
17de0 68 69 74 65 63 74 75 72 65 20 66 6f 72 20 6c 6f  hitecture for lo
17df0 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75  cating native bu
17e00 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22  ild files is \""
17e10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17e20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22  $architecture \" 17e30 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 \n].... # 17e40 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 17e50 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f : Build a list o 17e60 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 f configuration 17e70 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 files that we ha 17e80 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 ndle... # 17e90 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f .. set co 17ea0 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c nfigFileNames [l 17eb0 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 17ec0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 17ed0 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 QLite.dll.config 17ee0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 17ef0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 17f00 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 Build a list of 17f10 61 75 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 auxiliary Manage 17f20 64 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 d Debugging Assi 17f30 73 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 stants (MDA).. 17f40 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 17f50 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 nfiguration file 17f60 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 s that we handle 17f70 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 17f80 20 20 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e set mdaCon 17f90 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 figFileNames [li 17fa0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 17fb0 20 20 45 61 67 6c 65 53 68 65 6c 6c 33 32 2e 65 EagleShell32.e 17fc0 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e xe.mda.config In 17fd0 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e staller.exe.mda. 17fe0 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 config \.. 17ff0 20 20 20 20 20 20 74 65 73 74 2e 65 78 65 2e 6d test.exe.m 18000 64 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 6c 69 da.config testli 18010 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 nq.exe.mda.confi 18020 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 g \.. 18030 20 74 65 73 74 65 66 36 2e 65 78 65 2e 6d 64 61 testef6.exe.mda 18040 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 .config].... 18050 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 18060 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 NOTE: Build the 18070 20 6c 69 73 74 20 6f 66 20 65 78 74 65 72 6e 61 list of externa 18080 6c 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 l files that we 18090 68 61 6e 64 6c 65 2e 20 20 53 6f 6d 65 20 6f 66 handle. Some of 180a0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 180b0 20 20 74 68 65 73 65 20 66 69 6c 65 73 20 6d 61 these files ma 180c0 79 20 62 65 20 6e 61 74 69 76 65 20 61 6e 64 2f y be native and/ 180d0 6f 72 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d or managed assem 180e0 62 6c 69 65 73 20 74 68 61 74 20 61 72 65 0d 0a blies that are.. 180f0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 18100 72 65 71 75 69 72 65 64 20 74 6f 20 70 65 72 66 required to perf 18110 6f 72 6d 20 76 61 72 69 6f 75 73 20 74 65 73 74 orm various test 18120 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 18130 20 20 20 20 20 20 20 73 65 74 20 65 78 74 65 72 set exter 18140 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 nalFileNames [li 18150 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 18160 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 45 6e 74 [file join Ent 18170 69 74 79 46 72 61 6d 65 77 6f 72 6b 20 6c 69 62 ityFramework lib 18180 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 [string map [li 18190 73 74 20 46 78 20 22 22 5d 20 5b 73 74 72 69 6e st Fx ""] [strin 181a0 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 g \.. 181b0 20 6d 61 70 20 5b 6c 69 73 74 20 6e 65 74 46 78 map [list netFx 181c0 34 35 31 20 6e 65 74 46 78 34 35 5d 20 5b 67 65 451 netFx45] [ge 181d0 74 42 75 69 6c 64 4e 65 74 46 78 5d 5d 5d 20 45 tBuildNetFx]]] E 181e0 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64 ntityFramework.d 181f0 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ll]].... 18200 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 18210 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 E: Build the lis 18220 74 20 6f 66 20 6e 61 74 69 76 65 20 61 73 73 65 t of native asse 18230 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 mbly files that 18240 77 65 20 68 61 6e 64 6c 65 2e 20 20 54 68 65 0d we handle. The. 18250 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 18260 20 72 65 61 73 6f 6e 20 74 68 65 20 22 53 79 73 reason the "Sys 18270 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 18280 64 6c 6c 22 20 66 69 6c 65 20 69 73 20 69 6e 63 dll" file is inc 18290 6c 75 64 65 64 20 68 65 72 65 20 69 73 0d 0a 20 luded here is.. 182a0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 182b0 65 63 61 75 73 65 20 69 74 20 63 6f 75 6c 64 20 ecause it could 182c0 62 65 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 be the mixed-mod 182d0 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 e assembly... 182e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 182f0 73 65 74 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 set nativeFileNa 18300 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 mes [list \.. 18310 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 sqlite3 18320 2e 64 6c 6c 20 53 51 4c 69 74 65 2e 49 6e 74 65 .dll SQLite.Inte 18330 72 6f 70 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44 rop.dll System.D 18340 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d ata.SQLite.dll]. 18350 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 18360 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 18370 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 ild the list of 18380 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 managed assembly 18390 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 files that we h 183a0 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 andle... 183b0 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d #.. set m 183c0 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 anagedFileNames 183d0 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 [list \.. 183e0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 183f0 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 53 79 73 74 .SQLite.dll Syst 18400 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c em.Data.SQLite.L 18410 69 6e 71 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 inq.dll \.. 18420 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 18430 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c ta.SQLite.EF6.dl 18440 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d l].... #. 18450 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 18460 20 52 65 6d 6f 76 65 20 61 6e 79 20 74 65 73 74 Remove any test 18470 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61 constraints tha 18480 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6e t refer to the n 18490 61 74 69 76 65 20 61 6e 64 2f 6f 72 0d 0a 20 20 ative and/or.. 184a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 # ma 184b0 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 naged assembly f 184c0 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e iles that we han 184d0 64 6c 65 20 75 6e 6c 65 73 73 20 66 6f 72 62 69 dle unless forbi 184e0 64 64 65 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 20 dden from.. 184f0 20 20 20 23 20 20 20 20 20 20 20 64 6f 69 6e 67 # doing 18500 20 73 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d so... #. 18510 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i 18520 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 18530 73 71 6c 69 74 65 52 65 6d 6f 76 65 43 6f 6e 73 sqliteRemoveCons 18540 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 traints)]} then 18550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 {.. for 18560 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 each fileName$c
18570 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b  onfigFileNames {
18580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
18590 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  moveConstraint [
185a0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
185b0 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20   $fileName].. 185c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 185d0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 185e0 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 leName$mdaConfi
185f0 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  gFileNames {..
18600 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
18610 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
18620 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69  ndArgs file_ $fi 18630 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 leName].. 18640 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 18650 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 18660 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 me$externalFile
18670 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
18680 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74       removeConst
18690 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
186a0 73 20 66 69 6c 65 5f 20 5b 66 69 6c 65 20 74 61  s file_ [file ta
186b0 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  il $fileName]].. 186c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 186d0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 186e0 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 fileName$nativ
186f0 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  eFileNames {..
18700 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
18710 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
18720 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69  ndArgs file_ $fi 18730 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 leName].. 18740 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 18750 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 18760 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e me$managedFileN
18770 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
18780 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72      removeConstr
18790 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
187a0 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65   file_ $fileName 187b0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 187c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 187d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 187e0 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c # NOTE: Skip all 187f0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 18800 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65 ite related file 18810 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 handling (delet 18820 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 ing,.. # 18830 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 copying, a 18840 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69 nd loading) if i 18850 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 18860 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 18870 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 18880 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 ::no(sqliteFile 18890 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 188a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 188b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 188c0 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 trying to delet 188d0 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 e any files if i 188e0 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 188f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 18900 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 18910 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 18920 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 SqliteFiles)]} t 18930 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 18940 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 18950 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 18960 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 SqliteConfigFile 18970 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 18980 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 18990 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e ch fileName$con
189a0 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  figFileNames {..
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
189c0 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46  tryDeleteBinaryF
189d0 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  ile $fileName.. 189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 189f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 18a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 18a10 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 18a20 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 18a30 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d ExternalFiles)]} 18a40 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 18a50 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 18a60 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 ileName$mdaConf
18a70 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  igFileNames {..
18a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
18a90 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c  ryDeleteBuildFil
18aa0 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  e $fileName.. 18ab0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 18ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 18ad0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
18ae0 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65  externalFileName
18af0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
18b00 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69       tryDeleteBi
18b10 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61  naryFile $fileNa 18b20 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 me.. 18b30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 18b40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 18b50 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 18b60 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 sts ::no(deleteS 18b70 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73 qliteNativeFiles 18b80 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 18b90 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 18ba0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 18bb0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 49 6d 70 (deleteSqliteImp 18bc0 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 licitFiles)]} th 18bd0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 18be0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 18bf0 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 leName$nativeFi
18c00 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
18c20 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24  DeleteAssembly $18c30 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 18c40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 18c50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 18c70 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 18c80 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 18c90 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 eNonImplicitFile 18ca0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 18cc0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 18cd0 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 18ce0 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 PlatformFiles)] 18cf0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 18d00 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 18d10 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f g length$platfo
18d20 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  rm] > 0} then {.
18d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18d40 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
18d50 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  ame $nativeFileN 18d60 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 18d70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 18d80 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 eleteAssembly$f
18d90 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72  ileName $platfor 18da0 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 m.. 18db0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 18dc0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 18de0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 18df0 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 18e00 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 ArchitectureFile 18e10 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 [s 18e30 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 tring length$ar
18e40 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d  chitecture] > 0}
18e50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18e60 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
18e70 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74  ch fileName $nat 18e80 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a iveFileNames {.. 18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18ea0 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 tryDeleteAss 18eb0 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 embly$fileName
18ec0 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20  $architecture.. 18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18ee0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 18ef0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 18f00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 18f10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 18f20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 18f30 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 18f40 74 65 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 teSqliteManagedF 18f50 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 18f70 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
18f80 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73  managedFileNames
18f90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
18fa0 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73      tryDeleteAss
18fb0 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d  embly $fileName. 18fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 18fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 18fe0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 18ff0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 19000 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 19010 68 65 63 6b 20 66 6f 72 20 74 68 65 20 22 61 75 heck for the "au 19020 74 6f 53 65 6c 65 63 74 22 20 72 75 6e 74 69 6d toSelect" runtim 19030 65 20 6f 70 74 69 6f 6e 2e 20 20 49 66 20 70 72 e option. If pr 19040 65 73 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 esent,.. 19050 20 20 23 20 20 20 20 20 20 20 61 74 74 65 6d 70 # attemp 19060 74 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c t to automatical 19070 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 ly select the fi 19080 72 73 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 rst available.. 19090 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 190a0 20 62 75 69 6c 64 20 28 6f 72 20 22 72 65 6c 65 build (or "rele 190b0 61 73 65 22 29 20 6f 66 20 53 51 4c 69 74 65 20 ase") of SQLite 190c0 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e and System.Data. 190d0 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 SQLite.. 190e0 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 75 73 # for us 190f0 65 20 77 69 74 68 20 74 68 65 20 74 65 73 74 20 e with the test 19100 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 suite... 19110 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 19120 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 f {[hasRuntimeOp 19130 74 69 6f 6e 20 61 75 74 6f 53 65 6c 65 63 74 5d tion autoSelect] 19140 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 19150 20 20 20 20 20 20 69 66 20 7b 21 5b 63 68 65 63 if {![chec 19160 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 kForSQLiteBuilds 19170 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
19180 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a   true]} then {..
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68                ch
191a0 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65  eckForSQLiteRele
191b0 61 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ases $::test_cha 191c0 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 20 nnel true.. 191d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 191e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 191f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 19200 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 # NOTE: Skip try 19210 69 6e 67 20 74 6f 20 76 65 72 69 66 79 20 74 68 ing to verify th 19220 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 e build director 19230 79 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 3b y if instructed; 19240 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 19250 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6d otherwise, m 19260 61 6b 65 20 73 75 72 65 20 69 74 20 61 63 74 75 ake sure it actu 19270 61 6c 6c 79 20 65 78 69 73 74 73 20 6f 72 20 68 ally exists or h 19280 61 6c 74 20 74 68 65 20 65 6e 74 69 72 65 0d 0a alt the entire.. 19290 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 192a0 20 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 testing proces 192b0 73 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 s if it does not 192c0 20 65 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 exist... 192d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 192e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 192f0 73 20 3a 3a 6e 6f 28 76 65 72 69 66 79 42 75 69 s ::no(verifyBui 19300 6c 64 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 ldDirectory)]} t 19310 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 19320 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 19330 20 20 23 20 4e 4f 54 45 3a 20 41 74 20 74 68 69 # NOTE: At thi 19340 73 20 70 6f 69 6e 74 2c 20 74 68 65 20 62 75 69 s point, the bui 19350 6c 64 20 64 69 72 65 63 74 6f 72 79 20 4d 55 53 ld directory MUS 19360 54 20 65 78 69 73 74 20 61 73 20 61 0d 0a 20 20 T exist as a.. 19370 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 19380 20 20 76 61 6c 69 64 20 64 69 72 65 63 74 6f 72 valid director 19390 79 20 66 6f 72 20 74 68 65 20 74 65 73 74 69 6e y for the testin 193a0 67 20 70 72 6f 63 65 73 73 20 74 6f 20 63 6f 6e g process to con 193b0 74 69 6e 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 tinue... 193c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 193d0 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 set directory 193e0 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 [getBuildDirect 193f0 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ory].... 19400 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e 19410 78 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 xists$directory
19420 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] || \..
19430 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69          ![file i
19440 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65  sdirectory $dire 19450 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a ctory]} then {.. 19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 19470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 19480 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f NOTE: Just prio 19490 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 r to actually ha 194a0 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e lting the testin 194b0 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 g process,.. 194c0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 194d0 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 add an error t 194e0 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 o the test log f 194f0 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ile... 19500 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 19510 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
19520 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
19530 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
19540 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
19550 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69  - could not veri
19560 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f  fy build directo
19570 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72  ry \"" $director 19580 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 19590 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 "\", all 195a0 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e testing halted\n 195b0 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... 195c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 195d0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 # NOTE: Rai 195e0 73 69 6e 67 20 61 20 73 63 72 69 70 74 20 65 72 sing a script er 195f0 72 6f 72 20 66 72 6f 6d 20 74 68 69 73 20 70 6f ror from this po 19600 69 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d int should halt. 19610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 19620 20 20 20 20 20 20 20 74 68 65 20 74 65 73 74 69 the testi 19630 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 ng process... 19640 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 19650 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro 19660 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d r [appendArgs \. 19670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 19680 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 "could not ve 19690 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 rify build direc 196a0 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 tory \""$direct
196b0 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
196c0 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c           "\", al
196d0 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64  l testing halted
196e0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
196f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
19700 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
19710 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
19720 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20   Skip trying to
19730 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69  copy any files i
19740 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20  f instructed...
19750 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
19760 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
19770 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
19780 79 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20  ySqliteFiles)]}
19790 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
197a0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
197b0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
197c0 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73  qliteConfigFiles
197d0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
197e0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
197f0 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66  h fileName $conf 19800 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 igFileNames {.. 19810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 19820 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 ryCopyBuildFile 19830 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
19840 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
19850 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
19860 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
19870 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
19880 63 6f 70 79 53 71 6c 69 74 65 45 78 74 65 72 6e  copySqliteExtern
19890 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  alFiles)]} then
198a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
198b0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
198c0 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74    # NOTE: Copy t
198d0 68 65 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67  he Managed Debug
198e0 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20  ging Assistants
198f0 28 4d 44 41 29 20 63 6f 6e 66 69 67 75 72 61 74  (MDA) configurat
19900 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..
19910 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20     #       file
19920 66 6f 72 20 74 68 65 20 45 61 67 6c 65 20 73 68  for the Eagle sh
19930 65 6c 6c 20 74 6f 20 74 68 65 20 62 75 69 6c 64  ell to the build
19940 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72   output director
19950 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..
19960 20 20 23 20 20 20 20 20 20 20 77 68 69 6c 65 20    #       while
19970 75 73 69 6e 67 20 65 61 63 68 20 6f 66 20 74 68  using each of th
19980 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 76  e names of the v
19990 61 72 69 6f 75 73 20 6c 65 67 61 63 79 20 74 65  arious legacy te
199a0 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..
199b0 20 20 23 20 20 20 20 20 20 20 65 78 65 63 75 74    #       execut
199c0 61 62 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c  ables.  This wil
199d0 6c 20 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73  l help to make s
199e0 75 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65  ure that all the
199f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19a00 23 20 20 20 20 20 20 20 6c 65 67 61 63 79 20 74  #       legacy t
19a10 65 73 74 73 20 72 75 6e 20 77 69 74 68 20 65 78  ests run with ex
19a20 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 73  actly the same s
19a30 65 74 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20  et of Managed..
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
19a50 20 20 20 20 20 44 65 62 75 67 67 69 6e 67 20 41       Debugging A
19a60 73 73 69 73 74 61 6e 74 73 20 63 6f 6e 66 69 67  ssistants config
19a70 75 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  ured...
19a80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
19a90 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
19aa0 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69  leName $mdaConfi 19ab0 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 gFileNames {.. 19ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 19ad0 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20 yCopyBinaryFile 19ae0 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d EagleShell.exe.m 19af0 64 61 2e 63 6f 6e 66 69 67 20 22 22 20 24 66 69 da.config ""$fi
19b00 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..
19b10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
19b20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
19b30 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
19b40 3a 20 43 6f 70 79 20 74 68 65 20 65 78 74 65 72  : Copy the exter
19b50 6e 61 6c 20 62 69 6e 61 72 69 65 73 2c 20 69 66  nal binaries, if
19b60 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 64 69 72   any, to the dir
19b70 65 63 74 6f 72 79 20 74 68 61 74 0d 0a 20 20 20  ectory that..
19b80 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
19b90 20 20 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20     contains the
19ba0 45 61 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68  Eagle shell.  Th
19bb0 69 73 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20  is is typically
19bc0 75 73 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20  used to make..
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
19be0 20 20 20 20 73 75 72 65 20 61 73 73 65 6d 62 6c      sure assembl
19bf0 69 65 73 20 72 65 66 65 72 65 6e 63 65 64 20 62  ies referenced b
19c00 79 20 74 68 65 20 6f 6e 65 73 20 62 65 69 6e 67  y the ones being
19c10 20 74 65 73 74 65 64 20 61 72 65 0d 0a 20 20 20   tested are..
19c20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
19c30 20 20 20 61 76 61 69 6c 61 62 6c 65 20 64 75 72     available dur
19c40 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20  ing the testing
19c50 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  process...
19c60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
19c70 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
19c80 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72   fileName $exter 19c90 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a nalFileNames {.. 19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19cb0 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 tryCopyExternalF 19cc0 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 ile$fileName..
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
19cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
19d00 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
19d10 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 61  :no(copySqliteNa
19d20 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65  tiveFiles)]} the
19d30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
19d40 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
19d50 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
19d60 68 65 20 74 65 73 74 20 70 6c 61 74 66 6f 72 6d  he test platform
19d70 20 69 73 20 6c 69 6b 65 6c 79 20 74 68 65 20 64   is likely the d
19d80 65 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73 0d  efault for this.
19d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
19da0 20 20 20 20 20 20 20 6d 61 63 68 69 6e 65 2c 20         machine,
19db0 61 6c 73 6f 20 74 72 79 20 74 6f 20 63 6f 70 79  also try to copy
19dc0 20 74 68 65 20 6e 61 74 69 76 65 20 66 69 6c 65   the native file
19dd0 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  s to the..
19de0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
19df0 62 69 6e 61 72 79 20 6c 6f 63 61 74 69 6f 6e 2e  binary location.
19e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19e10 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
19e20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
19e30 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
19e40 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29  teImplicitFiles)
19e50 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
19e60 20 20 20 20 20 20 20 20 20 20 5b 69 73 44 65 66            [isDef
19e70 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72  aultBuildPlatfor
19e80 6d 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d  m true]} then {.
19e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
19ea0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
19eb0 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  e $nativeFileNam 19ec0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 19ed0 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 tryCopyA 19ee0 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
19ef0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
19f00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
19f10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
19f20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
19f30 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f  o exists ::no(co
19f40 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69  pySqliteNonImpli
19f50 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  citFiles)]} then
19f60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
19f70 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
19f80 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
19f90 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c  qlitePlatformFil
19fa0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
19fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
19fc0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70  string length $p 19fd0 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 latform] > 0} th 19fe0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19ff0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1a000 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 fileName$native
1a010 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a030 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79   tryCopyAssembly
1a040 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74   $fileName$plat
1a050 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20  form..
1a060 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1a070 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a090 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
1a0a0 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74  s ::no(copySqlit
1a0b0 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c  eArchitectureFil
1a0c0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
1a0e0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61  string length $a 1a0f0 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 rchitecture] > 0 1a100 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a110 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 1a120 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 ach fileName$na
1a130 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  tiveFileNames {.
1a140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1a150 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
1a160 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24  mbly $fileName$
1a170 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20  architecture..
1a180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a190 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
1a1a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1a1b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1a1c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1a1d0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
1a1e0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
1a1f0 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65  qliteManagedFile
1a200 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
1a210 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
1a220 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e  ch fileName $man 1a230 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d agedFileNames {. 1a240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1a250 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 tryCopyAssembly 1a260 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
1a270 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1a280 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1a290 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1a2a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1a2b0 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74    # NOTE: Skip t
1a2c0 72 79 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e  rying to load an
1a2d0 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72  y files if instr
1a2e0 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  ucted...
1a2f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
1a300 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
1a310 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65   ::no(loadSqlite
1a320 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
1a330 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
1a340 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
1a350 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 49 6d  :no(loadSqliteIm
1a360 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74  plicitFiles)]} t
1a370 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1a380 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65       tryLoadAsse
1a390 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
1a3a0 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20  .SQLite.dll..
1a3b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
1a3c0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
1a3d0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
1a3e0 28 6c 6f 61 64 53 71 6c 69 74 65 4c 69 6e 71 46  (loadSqliteLinqF
1a3f0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
1a400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1a410 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79  yLoadAssembly Sy
1a420 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1a430 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20  .Linq.dll..
1a440 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1a450 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
1a460 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c  fo exists ::no(l
1a470 6f 61 64 53 71 6c 69 74 65 45 66 36 46 69 6c 65  oadSqliteEf6File
1a480 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
1a490 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f             tryLo
1a4a0 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65  adAssembly Syste
1a4b0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46  m.Data.SQLite.EF
1a4c0 36 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20  6.dll..
1a4d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1a4e0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
1a4f0 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53  xists ::no(loadS
1a500 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74  qliteNonImplicit
1a510 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
1a520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
1a530 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
1a540 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65   ::no(loadSqlite
1a550 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20  PlatformFiles)]
1a560 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
1a570 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
1a580 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d  length $platform 1a590 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 1a5b0 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 ryLoadAssembly S 1a5c0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1a5d0 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 0d e.dll$platform.
1a5e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
1a5f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
1a600 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
1a610 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c  sts ::no(loadSql
1a620 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46  iteArchitectureF
1a630 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
1a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
1a650 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61  string length $a 1a660 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 rchitecture] > 0 1a670 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a680 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 1a690 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 1a6a0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 1a6b0 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a$architecture..
1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1a6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1a6e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1a6f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1a700 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
1a710 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1a720 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1a730 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1a740 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 1a750 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 1a760 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e sqlite3.dll\"... 1a770 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 1a780 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f [file versio 1a790 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 n [getBinaryFile 1a7a0 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c Name sqlite3.dll 1a7b0 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. 1a7c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat 1a7d0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1a7e0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1a7f0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1a800 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1a810 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
1a820 72 73 69 6f 6e 20 6f 66 20 5c 22 53 51 4c 69 74  rsion of \"SQLit
1a830 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e  e.Interop.dll\".
1a840 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
1a850 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73        [file vers
1a860 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
1a870 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e  leName SQLite.In
1a880 74 65 72 6f 70 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d  terop.dll]] \n].
1a890 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1a8a0 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
1a8b0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1a8c0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1a8d0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1a8f0 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 1a900 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e f \"System.Data. 1a910 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 SQLite.dll\"... 1a920 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1a930 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e [file version 1a940 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 1a950 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e ame System.Data. 1a960 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d SQLite.dll]] \n] 1a970 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 1a980 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 1a990 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1a9a0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1a9b0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1a9d0 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
1a9e0 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61  of \"System.Data
1a9f0 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
1aa00 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20  \"... " \..
1aa10 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76           [file v
1aa20 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72  ersion [getBinar
1aa30 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d  yFileName System
1aa40 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
1aa50 71 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20  q.dll]] \n]..
1aa60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1aa70 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
1aa80 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1aa90 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1aaa0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1aab0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 1aac0 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 1aad0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1aae0 74 65 2e 45 46 36 2e 64 6c 6c 5c 22 2e 2e 2e 20 te.EF6.dll\"... 1aaf0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1ab00 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e [file version 1ab10 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 1ab20 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e ame System.Data. 1ab30 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 5d SQLite.EF6.dll]] 1ab40 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 1ab50 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 1ab60 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 string length$p
1ab70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68  latform] > 0} th
1ab80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1ab90 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1aba0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1abb0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1abc0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1abd0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1abe0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 1abf0 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d \""$platform \.
1ac00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1ac10 20 22 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22   "/sqlite3.dll\"
1ac20 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73  ... " [file vers
1ac30 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
1ac40 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72         [getBinar
1ac50 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65  yFileName sqlite
1ac60 33 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d  3.dll $platform] 1ac70 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ] \n].. 1ac80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 1ac90 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1aca0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1acb0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1acc0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1acd0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1ace0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  file version of
1acf0 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d  \"" $platform \. 1ad00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1ad10 20 22 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f "/SQLite.Intero 1ad20 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 p.dll\"... " [fi 1ad30 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 le version \.. 1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 1ad50 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 1ad60 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e SQLite.Interop. 1ad70 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 dll$platform]]
1ad80 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1ad90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61  ....          ca
1ada0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1adb0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1adc0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1add0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1ade0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 1adf0 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 1ae00 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 "$platform \..
1ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ae20 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  /System.Data.SQL
1ae30 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b  ite.dll\"... " [
1ae40 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a  file version \..
1ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ae60 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
1ae70 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  me System.Data.S
1ae80 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66  QLite.dll $platf 1ae90 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 orm]] \n].. 1aea0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1aeb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 1aec0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 1aed0 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e$architecture] >
1aee0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1aef0 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
1af00 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1af10 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1af20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1af30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1af40 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 1af50 6f 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 on of \""$archi
1af60 74 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20  tecture \..
1af70 20 20 20 20 20 20 20 20 20 20 20 22 2f 73 71 6c             "/sql
1af80 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20  ite3.dll\"... "
1af90 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d  [file version \.
1afa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1afb0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
1afc0 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20  ame sqlite3.dll
1afd0 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20  $architecture]] 1afe0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 1aff0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 .... ca 1b000 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 1b010 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1b020 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1b030 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1b040 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
1b050 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
1b060 22 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20  " $architecture 1b070 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b080 20 20 20 22 2f 53 51 4c 69 74 65 2e 49 6e 74 65 "/SQLite.Inte 1b090 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b rop.dll\"... " [ 1b0a0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a file version \.. 1b0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1b0c0 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 1b0d0 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f me SQLite.Intero 1b0e0 70 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 p.dll$architect
1b0f0 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  ure]] \n]..
1b100 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1b110 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
1b120 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1b130 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1b140 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 1b160 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 1b170 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 of \""$archite
1b180 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20  cture \..
1b190 20 20 20 20 20 20 20 20 20 22 2f 53 79 73 74 65           "/Syste
1b1a0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
1b1b0 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76  l\"... " [file v
1b1c0 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20  ersion \..
1b1d0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69            [getBi
1b1e0 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73  naryFileName Sys
1b1f0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1b200 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72  dll $architectur 1b210 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 e]] \n].. 1b220 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 1b230 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1b240 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 # NOTE: Gr 1b250 61 62 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d ab the list of m 1b260 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 anaged assemblie 1b270 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e s for the curren 1b280 74 20 70 72 6f 63 65 73 73 0d 0a 20 20 20 20 20 t process.. 1b290 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 # and r 1b2a0 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 79 73 eport on the Sys 1b2b0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 1b2c0 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 related ones... 1b2d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1b2e0 20 20 73 65 74 20 61 73 73 65 6d 62 6c 69 65 73 set assemblies 1b2f0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 1b300 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e AppDomain.Curren 1b310 74 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d tDomain GetAssem 1b320 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 blies].... 1b330 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 object foreach 1b340 20 61 73 73 65 6d 62 6c 79 20 24 61 73 73 65 6d assembly$assem
1b350 62 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  blies {..
1b360 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d     if {[string m
1b370 61 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61  atch \{System.Da
1b380 74 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65  ta.SQLite* $asse 1b390 6d 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mbly]} then {.. 1b3a0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1b3b0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1b3c0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1b3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b3e0 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64  "---- found load
1b3f0 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20 24  ed assembly: " $1b400 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 assembly \n].. 1b410 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1b420 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1b430 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1b440 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1b450 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
1b460 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1b470 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73  define constants
1b480 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44 61   for \"System.Da
1b490 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20 22  ta.SQLite\"... "
1b4a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1b4b0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
1b4c0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
1b4d0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
1b4e0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
1b4f0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
1b500 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
1b510 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73  Lite3 DefineCons
1b520 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20  tants..
1b530 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e   } defineConstan
1b540 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ts] == 0} then {
1b550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
1b560 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 1b570 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1b580 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f [formatList [lso 1b590 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 rt \.. 1b5a0 20 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f 6e$defineCon
1b5b0 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d 20  stants] <none>]
1b5c0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1b5d0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1b5e0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1b5f0 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f st_channel unkno 1b600 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 wn\n.. 1b610 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 1b620 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 1b630 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 1b640 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1b650 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b660 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 76    "---- source v
1b670 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74  ersion of \"Syst
1b680 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
1b690 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  ll\"... "....
1b6a0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
1b6b0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
1b6c0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
1b6d0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
1b6e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1b6f0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
1b700 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e  SQLite.SQLiteCon
1b710 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72  nection Provider
1b720 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20  Version..
1b730 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d     } version] ==
1b740 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1b750 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
1b760 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73  ing length $vers 1b770 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ion] == 0} then 1b780 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1b790 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c set version nul 1b7a0 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d l.. } 1b7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1b7c0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
1b7d0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1b7e0 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20  $version \n].. 1b7f0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1b800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1b810 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
1b820 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20  nel unknown\n..
1b830 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1b840 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1b850 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
1b860 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1b870 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 t_channel \.. 1b880 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1b890 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74 source checkout 1b8a0 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 of \"System.Dat 1b8b0 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e a.SQLite.dll\".. 1b8c0 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 . ".... 1b8d0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1b8e0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 1b8f0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 1b900 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 1b910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 1b920 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1b930 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f .SQLiteConnectio 1b940 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 65 n ProviderSource 1b950 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 Id.. } 1b960 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 sourceId] == 0} 1b970 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1b980 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 1b990 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 length$sourceId
1b9a0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1b9c0 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d  t sourceId null.
1b9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1b9e0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1b9f0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1ba00 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 73 l [appendArgs$s
1ba10 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20 20  ourceId \n]..
1ba20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1ba30 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1ba40 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1ba50 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 el unknown\n.. 1ba60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1ba70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1ba80 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1ba90 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 61 E: Check the ava 1baa0 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 61 ilable builds (a 1bab0 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 6f nd "releases") o 1bac0 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 20 f SQLite and.. 1bad0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 79 # Sy 1bae0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1baf0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1bb00 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 1bb10 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 LiteBuilds$::te
1bb20 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20  st_channel..
1bb30 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
1bb40 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65  teReleases $::te 1bb50 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 1bb60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1bb70 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 # NOTE: Now, we 1bb80 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 66 need to know if 1bb90 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 the SQLite core 1bba0 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 69 library is avai 1bbb0 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 lable.. # 1bbc0 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 63 (i.e. bec 1bbd0 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 64 ause the managed 1bbe0 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 -only System.Dat 1bbf0 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c a.SQLite assembl 1bc00 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 23 y can.. # 1bc10 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 68 load with 1bc20 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 2c out it; however, 1bc30 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 6e it cannot do an 1bc40 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 69 ything useful wi 1bc50 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 23 thout.. # 1bc60 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 20 it). If 1bc70 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 65 we are using the 1bc80 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 1bc90 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 65 mbly and we alre 1bca0 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ady.. # 1bcb0 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 61 found it (a 1bcc0 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f 75 bove), this shou 1bcd0 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 65 ld always succee 1bce0 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 1bcf0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 1bd00 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a 3a QLiteLibrary$::
1bd10 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a  test_channel....
1bd20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1bd30 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
1bd40 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 69   if the SQLite i
1bd50 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20  nterop assembly
1bd60 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20  is available...
1bd70 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1bd80 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
1bd90 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74 5f  Interop $::test_ 1bda0 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 1bdb0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1bdc0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 NOTE: Check the 1bdd0 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 SQLite database 1bde0 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 and temporary di 1bdf0 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 20 rectories... 1be00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 #.. c 1be10 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 heckForSQLiteDir 1be20 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 ectories$::test
1be30 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
1be40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1be50 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
1be60 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 76  o determine if v
1be70 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d 74  arious compile-t
1be80 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64  ime options need
1be90 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  ed for..
1bea0 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e  #       test con
1beb0 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 65 6e  straints were en
1bec0 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61  abled for the ma
1bed0 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 20  naged assembly.
1bee0 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20   There..
1bef0 23 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d 65  #       are some
1bf00 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
1bf10 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 20  tions that must
1bf20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20 65  also have been e
1bf30 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  nabled..
1bf40 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20  #       for the
1bf50 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
1bf60 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20   in order to be
1bf70 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72 20  effective.  For
1bf80 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23  those..        #
1bf90 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c 20         options,
1bfa0 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75 6d  it will be assum
1bfb0 65 64 20 74 68 61 74 20 69 74 20 77 61 73 20 65  ed that it was e
1bfc0 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 69  nabled for the i
1bfd0 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20  nterop..
1bfe0 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79  #       assembly
1bff0 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 62 6c   if it was enabl
1c000 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67  ed for the manag
1c010 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20  ed assembly...
1c020 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1c030 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43   foreach defineC
1c040 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d  onstant [list \.
1c050 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 48 45  .            CHE
1c060 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f 48  CK_STATE COUNT_H
1c070 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54 45  ANDLE DEBUG INTE
1c080 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52 4f  ROP_CODEC INTERO
1c090 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20 20  P_DEBUG \..
1c0a0 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45         INTEROP_E
1c0b0 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f  XTENSION_FUNCTIO
1c0c0 4e 53 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55  NS INTEROP_INCLU
1c0d0 44 45 5f 43 45 52 4f 44 20 5c 0d 0a 20 20 20 20  DE_CEROD \..
1c0e0 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f          INTEROP_
1c0f0 49 4e 43 4c 55 44 45 5f 45 58 54 52 41 20 49 4e  INCLUDE_EXTRA IN
1c100 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45  TEROP_INCLUDE_SE
1c110 45 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59  E INTEROP_LEGACY
1c120 5f 43 4c 4f 53 45 20 5c 0d 0a 20 20 20 20 20 20  _CLOSE \..
1c130 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 4c 4f        INTEROP_LO
1c140 47 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45  G INTEROP_TEST_E
1c150 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50  XTENSION INTEROP
1c160 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 4e  _VIRTUAL_TABLE N
1c170 45 54 5f 32 30 20 5c 0d 0a 20 20 20 20 20 20 20  ET_20 \..
1c180 20 20 20 20 20 4e 45 54 5f 33 35 20 4e 45 54 5f       NET_35 NET_
1c190 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 5f 34 35  40 NET_45 NET_45
1c1a0 31 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30  1 NET_COMPACT_20
1c1b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1c1c0 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
1c1d0 46 52 41 4d 45 57 4f 52 4b 20 50 52 45 4c 4f 41  FRAMEWORK PRELOA
1c1e0 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59  D_NATIVE_LIBRARY
1c1f0 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 5c 0d   RETARGETABLE \.
1c200 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
1c210 49 54 45 5f 53 54 41 4e 44 41 52 44 20 54 48 52  ITE_STANDARD THR
1c220 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54  OW_ON_DISPOSED T
1c230 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45  RACE TRACE_CONNE
1c240 43 54 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20  CTION \..
1c250 20 20 20 20 20 54 52 41 43 45 5f 44 45 54 45 43       TRACE_DETEC
1c260 54 49 4f 4e 20 54 52 41 43 45 5f 48 41 4e 44 4c  TION TRACE_HANDL
1c270 45 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44 20  E TRACE_PRELOAD
1c280 54 52 41 43 45 5f 53 48 41 52 45 44 20 5c 0d 0a  TRACE_SHARED \..
1c290 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41 43              TRAC
1c2a0 45 5f 53 54 41 54 45 4d 45 4e 54 20 54 52 41 43  E_STATEMENT TRAC
1c2b0 45 5f 57 41 52 4e 49 4e 47 20 54 52 41 43 4b 5f  E_WARNING TRACK_
1c2c0 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 5c 0d 0a  MEMORY_BYTES \..
1c2d0 20 20 20 20 20 20 20 20 20 20 20 20 55 53 45 5f              USE_
1c2e0 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f 52 4b  ENTITY_FRAMEWORK
1c2f0 5f 36 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44  _6 USE_INTEROP_D
1c300 4c 4c 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56  LL USE_PREPARE_V
1c310 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20  2 WINDOWS] {..
1c320 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1c330 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
1c340 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 69 6c  ck if the compil
1c350 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73  e-time option is
1c360 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65 20 6c   listed in the l
1c370 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  ist of..
1c380 20 20 23 20 20 20 20 20 20 20 22 64 65 66 69 6e    #       "defin
1c390 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70  e constants" kep
1c3a0 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20 74 68  t track of by th
1c3b0 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  e managed assemb
1c3c0 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ly...          #
1c3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63  ..          chec
1c3e0 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65  kForSQLiteDefine
1c3f0 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 74  Constant $::test 1c400 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65 _channel$define
1c410 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20 20  Constant..
1c420 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
1c430 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1c440 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 53  : Check if the S
1c450 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1c460 65 20 70 72 6f 76 69 64 65 72 20 77 61 73 20 63  e provider was c
1c470 6f 6d 70 69 6c 65 64 20 77 69 74 68 0d 0a 20 20  ompiled with..
1c480 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75        #       su
1c490 70 70 6f 72 74 20 66 6f 72 20 61 6e 79 20 65 6e  pport for any en
1c4a0 63 72 79 70 74 65 64 20 64 61 74 61 62 61 73 65  crypted database
1c4b0 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
1c4c0 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65         if {[have
1c4d0 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20  Constraint \..
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
1c4f0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
1c500 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1c510 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 5d 20 7c  INTEROP_CODEC] |
1c520 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  | \..
1c530 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74   [haveConstraint
1c540 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1c550 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61      defineConsta
1c560 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nt.System.Data.S
1c570 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 49 4e  QLite.INTEROP_IN
1c580 43 4c 55 44 45 5f 53 45 45 5d 7d 20 74 68 65 6e  CLUDE_SEE]} then
1c590 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
1c5a0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
1c5b0 45 3a 20 59 65 73 2c 20 61 64 64 20 67 65 6e 65  E: Yes, add gene
1c5c0 72 69 63 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  ric constraint f
1c5d0 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65  or use by the te
1c5e0 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20  st suite...
1c5f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1c600 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
1c610 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1c620 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20  te.Encryption..
1c630 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1c640 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1c650 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65   NOTE: Check the
1c660 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 79   current build y
1c670 65 61 72 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c  ear.  Basically,
1c680 20 74 68 69 73 20 69 6e 64 69 63 61 74 65 73 0d   this indicates.
1c690 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1c6a0 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f   which version o
1c6b0 66 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72  f MSBuild and/or
1c6c0 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 77   Visual Studio w
1c6d0 61 73 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20  as used to..
1c6e0 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70      #       comp
1c6f0 69 6c 65 20 74 68 65 20 61 73 73 65 6d 62 6c 79  ile the assembly
1c700 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20   binaries under
1c710 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  test...        #
1c720 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
1c730 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1c740 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 1c750 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo 1c760 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 r System.Data.SQ 1c770 4c 69 74 65 20 62 75 69 6c 64 20 79 65 61 72 2e Lite build year. 1c780 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 1c790 73 65 74 20 79 65 61 72 20 5b 67 65 74 42 75 69 set year [getBui 1c7a0 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 ldYear].. 1c7b0 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b addConstraint [ 1c7c0 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 appendArgs build 1c7d0 59 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 Year.$year]..
1c7e0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1c7f0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 1c800 65 6e 64 41 72 67 73 20 5c 22 20 24 79 65 61 72 endArgs \"$year
1c810 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20   \"\n]....
1c820 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1c830 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63  OTE: Check the c
1c840 75 72 72 65 6e 74 20 62 75 69 6c 64 20 2e 4e 45  urrent build .NE
1c850 54 20 46 72 61 6d 65 77 6f 72 6b 2e 20 20 42 61  T Framework.  Ba
1c860 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 0d 0a 20  sically, this..
1c870 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
1c880 6e 64 69 63 61 74 65 73 20 77 68 69 63 68 20 76  ndicates which v
1c890 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 2e 4e  ersion of the .N
1c8a0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 69 73 20  ET Framework is
1c8b0 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23  being..        #
1c8c0 20 20 20 20 20 20 20 75 73 65 64 20 62 79 20 74         used by t
1c8d0 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61  he assembly bina
1c8e0 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e  ries under test.
1c8f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1c900 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1c910 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 1c920 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1c930 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 checking for Sys 1c940 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 1c950 62 75 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 build .NET Frame 1c960 77 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 work... ".... 1c970 20 20 20 20 20 73 65 74 20 6e 65 74 46 78 20 5b set netFx [ 1c980 67 65 74 42 75 69 6c 64 4e 65 74 46 78 5d 0d 0a getBuildNetFx].. 1c990 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 1c9a0 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 1c9b0 73 20 62 75 69 6c 64 46 72 61 6d 65 77 6f 72 6b s buildFramework 1c9c0 2e 20 24 6e 65 74 46 78 5d 0d 0a 20 20 20 20 20 .$netFx]..
1c9d0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1c9e0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1c9f0 41 72 67 73 20 5c 22 20 24 6e 65 74 46 78 20 5c Args \"$netFx \
1ca00 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "\n]....
1ca10 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1ca20 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72  E: Check the cur
1ca30 72 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69  rent build confi
1ca40 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 20  guration.  This
1ca50 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d  should normally.
1ca60 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1ca70 20 62 65 20 65 69 74 68 65 72 20 22 44 65 62 75   be either "Debu
1ca80 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 2e  g" or "Release".
1ca90 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1caa0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1cab0 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 1cac0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1cad0 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 checking for Sys 1cae0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 1caf0 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 build configurat 1cb00 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 ion... ".... 1cb10 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 75 72 set configur 1cb20 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 ation [getBuildC 1cb30 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 onfiguration].. 1cb40 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 1cb50 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 1cb60 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 buildConfigurat 1cb70 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61 74 ion.$configurat
1cb80 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74 70  ion]..        tp
1cb90 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 1cba0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 1cbb0 5c 22 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f \"$configuratio
1cbc0 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  n \"\n]....
1cbd0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
1cbe0 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 73 65 74  NOTE: Try to set
1cbf0 75 70 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20  up an interrupt
1cc00 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 74  callback using t
1cc10 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67 67  he script debugg
1cc20 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  er..        #
1cc30 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20 63 61      that will ca
1cc40 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75 65  ncel all SQL que
1cc50 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ries in progress
1cc60 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73   for all databas
1cc70 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
1cc80 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b     connections k
1cc90 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 69 6e 74  nown to this int
1cca0 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20  erpreter...
1ccb0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
1ccc0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
1ccd0 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65 72  ::no(sqliteInter
1cce0 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d 20  ruptCallback)]}
1ccf0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1cd00 20 20 73 65 74 75 70 44 62 49 6e 74 65 72 72 75    setupDbInterru
1cd10 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 65  ptCallback $::te 1cd20 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 st_channel$::te
1cd30 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20  st_log..
1cd40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
1cd50 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1cd60 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 6e 61  Check for the na
1cd70 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f 70 74  tive runtime opt
1cd80 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c 64  ion, which would
1cd90 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a 20 20   mean we are..
1cda0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73        #       us
1cdb0 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f  ing the mixed-mo
1cdc0 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20  de assembly...
1cdd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1cde0 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65   checkForRuntime
1cdf0 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63  Option $::test_c 1ce00 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d hannel native... 1ce10 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1ce20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 1ce30 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 73 75 k if the test su 1ce40 69 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e 74 ite should count 1ce50 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 the number of c 1ce60 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 onnections.. 1ce70 20 20 20 20 23 20 20 20 20 20 20 20 22 6f 70 65 # "ope 1ce80 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 64 ned" and "closed 1ce90 22 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 " from the pool 1cea0 77 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 when determining 1ceb0 20 69 66 20 61 20 74 65 73 74 0d 0a 20 20 20 20 if a test.. 1cec0 20 20 20 20 23 20 20 20 20 20 20 20 70 61 73 73 # pass 1ced0 65 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 74 ed. Disabling t 1cee0 68 69 73 20 62 65 68 61 76 69 6f 72 20 69 73 20 his behavior is 1cef0 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 73 sometimes necess 1cf00 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 ary (e.g... 1cf10 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e # durin 1cf20 67 20 74 68 65 20 72 65 6c 65 61 73 65 20 74 65 g the release te 1cf30 73 74 69 6e 67 20 70 72 6f 63 65 73 73 29 20 62 sting process) b 1cf40 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 ecause there are 1cf50 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 20 several.. 1cf60 20 20 23 20 20 20 20 20 20 20 74 65 73 74 73 20 # tests 1cf70 74 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 65 that rely on the 1cf80 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 6f "opened from po 1cf90 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 20 ol" count being 1cfa0 67 72 65 61 74 65 72 0d 0a 20 20 20 20 20 20 20 greater.. 1cfb0 20 23 20 20 20 20 20 20 20 74 68 61 6e 20 7a 65 # than ze 1cfc0 72 6f 2e 20 20 54 68 65 73 65 20 74 65 73 74 73 ro. These tests 1cfd0 20 6d 61 79 20 66 61 69 6c 20 64 75 65 20 74 6f may fail due to 1cfe0 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 the non-determi 1cff0 6e 69 73 74 69 63 0d 0a 20 20 20 20 20 20 20 20 nistic.. 1d000 23 20 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 # behavior 1d010 20 6f 66 20 74 68 65 20 43 4c 52 20 47 43 2c 20 of the CLR GC, 1d020 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72 65 20 even when there 1d030 69 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 65 is no bug in the 1d040 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 23 code.. # 1d050 20 20 20 20 20 20 20 62 65 69 6e 67 20 74 65 73 being tes 1d060 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ted... #. 1d070 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f . checkFo 1d080 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 rRuntimeOption$
1d090 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e  ::test_channel n
1d0a0 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20  oPoolCounts....
1d0b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1d0c0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
1d0d0 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74  if the test suit
1d0e0 65 20 73 68 6f 75 6c 64 20 75 73 65 20 73 68 61  e should use sha
1d0f0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e 0d  red-cache mode..
1d100 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1d110 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74      checkForRunt
1d120 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73  imeOption $::tes 1d130 74 5f 63 68 61 6e 6e 65 6c 20 73 68 61 72 65 64 t_channel shared 1d140 43 61 63 68 65 0d 0a 0d 0a 20 20 20 20 20 20 20 Cache.... 1d150 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1d160 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 72 TE: Report the r 1d170 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 70 72 esource usage pr 1d180 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61 ior to running a 1d190 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 ny tests... 1d1a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 1d1b0 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 portSQLiteResour 1d1c0 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ces$::test_chan
1d1d0 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  nel....        #
1d1e0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1d1f0 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73 74 20  : Grab the list
1d200 6f 66 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65  of native module
1d210 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  s for the curren
1d220 74 20 70 72 6f 63 65 73 73 20 61 6e 64 0d 0a 20  t process and..
1d230 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
1d240 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 79 73  eport on the Sys
1d250 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
1d260 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20  related ones...
1d270 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1d280 20 20 73 65 74 20 6d 6f 64 75 6c 65 73 20 5b 6f    set modules [o
1d290 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a  bject invoke \..
1d2a0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
1d2b0 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50  em.Diagnostics.P
1d2c0 72 6f 63 65 73 73 2e 47 65 74 43 75 72 72 65 6e  rocess.GetCurren
1d2d0 74 50 72 6f 63 65 73 73 20 4d 6f 64 75 6c 65 73  tProcess Modules
1d2e0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  ]....        obj
1d2f0 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69  ect foreach -ali
1d300 61 73 20 6d 6f 64 75 6c 65 20 24 6d 6f 64 75 6c  as module $modul 1d310 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 1d320 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1d330 4f 54 45 3a 20 54 68 65 20 6d 6f 64 75 6c 65 20 OTE: The module 1d340 66 69 6c 65 20 6e 61 6d 65 20 68 65 72 65 20 6d file name here m 1d350 75 73 74 20 62 65 20 6e 6f 72 6d 61 6c 69 7a 65 ust be normalize 1d360 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d d... #. 1d370 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66 . set f 1d380 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f ileName [file no 1d390 72 6d 61 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 rmalize [$module
1d3a0 20 46 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20   FileName]]....
1d3b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
1d3c0 72 69 6e 67 20 6d 61 74 63 68 20 2d 6e 6f 63 61  ring match -noca
1d3d0 73 65 20 2a 2f 73 71 6c 69 74 65 33 2e 64 6c 6c  se */sqlite3.dll
1d3e0 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65   $fileName]} the 1d3f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1d400 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1d410 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1d420 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1d430 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e        "---- foun
1d440 64 20 6c 6f 61 64 65 64 20 53 51 4c 69 74 65 20  d loaded SQLite
1d450 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 6d  native library m
1d460 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20  odule: " \..
1d470 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil 1d480 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 eName \n].. 1d490 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 1d4a0 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a string match \.. 1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 6e -n 1d4c0 6f 63 61 73 65 20 2a 2f 53 51 4c 69 74 65 2e 49 ocase */SQLite.I 1d4d0 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 66 69 6c 65 nterop.dll$file
1d4e0 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
1d4f0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1d500 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1d510 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1d520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d530 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 "---- found load 1d540 65 64 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f ed SQLite intero 1d550 70 20 61 73 73 65 6d 62 6c 79 20 6d 6f 64 75 6c p assembly modul 1d560 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 e: " \.. 1d570 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d$fileNam
1d580 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  e \n]..
1d590 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
1d5a0 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b  .        catch {
1d5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
1d5c0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1d5d0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 1d5e0 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 "---- compile 1d5f0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f -time options fo 1d600 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 r SQLite core li 1d610 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 brary... ".... 1d620 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 1d630 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1d640 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 1d650 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 1d660 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 1d670 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 1d680 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 1d690 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 SQLiteCompileOpt 1d6a0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ions.. 1d6b0 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 } compileOptions 1d6c0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1d6d0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1d6e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1d6f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66  l [appendArgs [f
1d700 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74  ormatList [lsort
1d710 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1d720 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69      $compileOpti 1d730 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d ons] <none>] \n] 1d740 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 1d750 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 1d760 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1d770 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c  channel unknown\
1d780 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  n..          }..
1d790 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1d7a0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
1d7b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1d7c0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 1d7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 1d7e0 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d ---- compile-tim 1d7f0 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 e options for SQ 1d800 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 Lite interop ass 1d810 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 embly... ".... 1d820 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 1d830 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1d840 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 1d850 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 1d860 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 1d870 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 1d880 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 1d890 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 InteropCompileOp 1d8a0 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 tions.. 1d8b0 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e } compileOption 1d8c0 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. 1d8d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1d8e0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1d8f0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b  el [appendArgs [
1d900 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72  formatList [lsor
1d910 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
1d920 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74       $compileOpt 1d930 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e ions] <none>] \n 1d940 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 ].. } e 1d950 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 1d960 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1d970 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e  _channel unknown
1d980 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  \n..          }.
1d990 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1d9a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1d9b0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68   # NOTE: Show th
1d9c0 65 20 61 63 74 69 76 65 20 74 65 73 74 20 63 6f  e active test co
1d9d0 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20  nstraints...
1d9e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
1d9f0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1da00 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1da10 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e "---- constrain 1da20 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ts: " \.. 1da30 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 [formatList 1da40 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 [lsort [getCons 1da50 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e traints]] <none> 1da60 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ] \n].... 1da70 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1da80 54 45 3a 20 53 61 76 65 20 74 68 65 20 74 65 73 TE: Save the tes 1da90 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f t constraints fo 1daa0 72 20 75 73 65 20 62 79 20 74 68 72 65 61 64 73 r use by threads 1dab0 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 69 73 created in this 1dac0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1dad0 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f application do 1dae0 6d 61 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e main. This is n 1daf0 65 63 65 73 73 61 72 79 20 62 65 63 61 75 73 65 ecessary because 1db00 20 61 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a all the Eagle.. 1db10 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1db20 22 74 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69 "test context" i 1db30 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 nformation is pe 1db40 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 r-thread... 1db50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 1db60 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1db70 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e ::test_constrain 1db80 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ts]} then {.. 1db90 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 set ::tes 1dba0 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a t_constraints$:
1dbb0 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e  :eagle_tests(con
1dbc0 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20  straints)..
1dbd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1dbe0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1dbf0 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74  E: Load the "aft
1dc00 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20  er-constraints"
1dc10 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20  custom per-user
1dc20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d  and/or per-host.
1dc30 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1dc40 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e   test settings n
1dc50 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
1dc60 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20          uplevel
1dc70 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69  1 [list loadSQLi
1dc80 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24  teTestSettings $1dc90 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e ::test_channel . 1dca0 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 after].... 1dcb0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1dcc0 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 OTE: If necessar 1dcd0 79 2c 20 65 6e 61 62 6c 65 20 73 68 61 72 65 64 y, enable shared 1dce0 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e -cache mode now. 1dcf0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1dd00 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e if {[hasRun 1dd10 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 timeOption share 1dd20 64 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d dCache]} then {. 1dd30 0a 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c . enabl 1dd40 65 53 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a eSharedCache$::
1dd50 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75  test_channel tru
1dd60 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
1dd70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1dd80 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
1dd90 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61  when our tests a
1dda0 63 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e  ctually began (n
1ddb0 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ow)...        #.
1ddc0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $1ddd0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1dde0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1ddf0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1de00 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1de10 74 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 te tests began a 1de20 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 t " \.. 1de30 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 [clock format 1de40 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d [clock seconds] 1de50 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ] \n].. }.. 1de60 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1de70 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 oc runSQLiteTest 1de80 46 69 6c 65 73 50 72 6f 6c 6f 67 75 65 20 7b 7d FilesPrologue {} 1de90 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 {.. upleve 1dea0 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 l 1 {.. # 1deb0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1dec0 3a 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 : Setup the vari 1ded0 61 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 ables that refer 1dee0 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 to the various 1def0 6e 6f 6e 2d 64 61 74 61 20 66 69 6c 65 73 0d 0a non-data files.. 1df00 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1df10 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 required by the 1df20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 tests in this fi 1df30 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 1df40 20 20 20 20 20 20 20 20 73 65 74 20 65 6e 74 69 set enti 1df50 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 tyFrameworkDllFi 1df60 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 1df70 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e [getBuildFileN 1df80 61 6d 65 20 45 6e 74 69 74 79 46 72 61 6d 65 77 ame EntityFramew 1df90 6f 72 6b 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 ork.dll].... 1dfa0 20 20 20 20 73 65 74 20 69 6e 73 74 61 6c 6c 65 set installe 1dfb0 72 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 rExeFile [getBui 1dfc0 6c 64 46 69 6c 65 4e 61 6d 65 20 49 6e 73 74 61 ldFileName Insta 1dfd0 6c 6c 65 72 2e 65 78 65 5d 0d 0a 20 20 20 20 20 ller.exe].. 1dfe0 20 20 20 73 65 74 20 73 71 6c 69 74 65 44 65 73 set sqliteDes 1dff0 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 5b 67 65 ignerDllFile [ge 1e000 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 tBuildFileName S 1e010 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 QLite.Designer.d 1e020 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 ll].... s 1e030 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c et systemDataSQL 1e040 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 iteDllFile \.. 1e050 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 [getBu 1e060 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 ildFileName Syst 1e070 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 1e080 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 ll].... s 1e090 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c et systemDataSQL 1e0a0 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 5c iteLinqDllFile \ 1e0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 1e0c0 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName 1e0d0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1e0e0 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 0d 0a 0d 0a te.Linq.dll].... 1e0f0 20 20 20 20 20 20 20 20 73 65 74 20 73 79 73 74 set syst 1e100 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 emDataSQLiteEf6D 1e110 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 llFile \.. 1e120 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 [getBuildF 1e130 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 ileName System.D 1e140 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 ata.SQLite.EF6.d 1e150 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 ll].... s 1e160 65 74 20 74 65 73 74 45 78 65 46 69 6c 65 20 5b et testExeFile [ 1e170 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName 1e180 20 74 65 73 74 2e 65 78 65 5d 0d 0a 20 20 20 20 test.exe].. 1e190 20 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 set testLinq 1e1a0 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c ExeFile [getBuil 1e1b0 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 6c 69 dFileName testli 1e1c0 6e 71 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 20 nq.exe].. 1e1d0 20 73 65 74 20 74 65 73 74 45 66 36 45 78 65 46 set testEf6ExeF 1e1e0 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c ile [getBuildFil 1e1f0 65 4e 61 6d 65 20 74 65 73 74 65 66 36 2e 65 78 eName testef6.ex 1e200 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d e].... #. 1e210 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1e220 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61 Setup the varia 1e230 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 20 bles that refer 1e240 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 64 to the various d 1e250 61 74 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 ata files.. 1e260 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69 # requi 1e270 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73 red by the tests 1e280 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a in this file... 1e290 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1e2a0 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 4f set testLinqO 1e2b0 75 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 utFile [file nat 1e2c0 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 1e2d0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 1e2e0 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 [getSQLiteTest 1e2f0 44 61 74 61 50 61 74 68 5d 20 74 65 73 74 6c 69 DataPath] testli 1e300 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20 20 20 20 nq.out]].... 1e310 20 20 20 20 73 65 74 20 6e 6f 72 74 68 77 69 6e set northwin 1e320 64 45 66 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 dEfDbFile [file 1e330 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 1e340 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 1e350 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72 6e 61 [file dirna 1e360 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 me [file dirname 1e370 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 1e380 61 74 61 50 61 74 68 5d 5d 5d 20 5c 0d 0a 20 20 ataPath]]] \.. 1e390 20 20 20 20 20 20 20 20 20 20 74 65 73 74 6c 69 testli 1e3a0 6e 71 20 6e 6f 72 74 68 77 69 6e 64 45 46 2e 64 nq northwindEF.d 1e3b0 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 b]].... s 1e3c0 65 74 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 20 et nonWalDbFile 1e3d0 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 1e3e0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 1e3f0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 1e400 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 1e410 68 5d 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a h] nonWal.db]].. 1e420 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 77 61 .. set wa 1e430 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 lDbFile [file na 1e440 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 1e450 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. 1e460 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 [getSQLiteTes 1e470 74 44 61 74 61 50 61 74 68 5d 20 77 61 6c 2e 64 tDataPath] wal.d 1e480 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 b]].... # 1e490 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1e4a0 3a 20 54 68 65 20 76 61 72 69 6f 75 73 20 69 6e : The various in 1e4b0 73 74 61 6c 6c 2f 75 6e 69 6e 73 74 61 6c 6c 20 stall/uninstall 1e4c0 6c 6f 67 20 66 69 6c 65 73 20 75 73 65 64 20 74 log files used t 1e4d0 6f 20 74 65 73 74 20 74 68 65 0d 0a 20 20 20 20 o test the.. 1e4e0 20 20 20 20 23 20 20 20 20 20 20 20 64 65 73 69 # desi 1e4f0 67 6e 2d 74 69 6d 65 20 63 6f 6d 70 6f 6e 65 6e gn-time componen 1e500 74 20 69 6e 73 74 61 6c 6c 65 72 2e 0d 0a 20 20 t installer... 1e510 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1e520 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c set testInstall 1e530 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 Vs2005LogFile [f 1e540 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b ile nativename [ 1e550 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 file join \.. 1e560 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c [getSQL 1e570 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d iteTestDataPath] 1e580 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f Installer_Test_ 1e590 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a Vs2005.log]].... 1e5a0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 set test 1e5b0 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 InstallVs2008Log 1e5c0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 1e5d0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 1e5e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e5f0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 1e600 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 taPath] Installe 1e610 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c 6f r_Test_Vs2008.lo 1e620 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 g]].... s 1e630 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 et testInstallVs 1e640 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 2010LogFile [fil 1e650 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 1e660 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. 1e670 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 [getSQLit 1e680 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 eTestDataPath] I 1e690 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 1e6a0 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2010.log]].... 1e6b0 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e set testIn 1e6c0 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 stallVs2012LogFi 1e6d0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e le [file nativen 1e6e0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 1e6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 1e700 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 etSQLiteTestData 1e710 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f Path] Installer_ 1e720 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d Test_Vs2012.log] 1e730 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ].... set 1e740 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 1e750 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 13LogFile [file 1e760 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 1e770 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 1e780 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 1e790 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 estDataPath] Ins 1e7a0 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 taller_Test_Vs20 1e7b0 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 13.log]].... 1e7c0 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e set testUnin 1e7d0 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 stallVs2005LogFi 1e7e0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e le [file nativen 1e7f0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 1e800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g 1e810 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 etSQLiteTestData 1e820 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 Path] Uninstalle 1e830 72 5f 54 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f r_Test_Vs2005.lo 1e840 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 g]].... s 1e850 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c et testUninstall 1e860 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 5b 66 Vs2008LogFile [f 1e870 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b ile nativename [ 1e880 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 file join \.. 1e890 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c [getSQL 1e8a0 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d iteTestDataPath] 1e8b0 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 Uninstaller_Tes 1e8c0 74 5f 56 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a t_Vs2008.log]].. 1e8d0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 .. set te 1e8e0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 1e8f0 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 0LogFile [file n 1e900 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 1e910 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 1e920 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 1e930 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e stDataPath] Unin 1e940 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 staller_Test_Vs2 1e950 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 010.log]].... 1e960 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 set testUni 1e970 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 nstallVs2012LogF 1e980 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 1e990 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 1e9a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 1e9b0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 getSQLiteTestDat 1e9c0 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c aPath] Uninstall 1e9d0 65 72 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c er_Test_Vs2012.l 1e9e0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]].... 1e9f0 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c set testUninstal 1ea00 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b lVs2013LogFile [ 1ea10 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 1ea20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 1ea30 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 1ea40 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 1ea50 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 ] Uninstaller_Te 1ea60 73 74 5f 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d st_Vs2013.log]]. 1ea70 0a 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 ... ##### 1ea80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1ea90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1eaa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1eab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1eac0 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 ##.... if 1ead0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 1eae0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 1eaf0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 1eb00 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
1eb10 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44  entityFrameworkD
1eb20 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  llFile]]]} then
1eb30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
1eb40 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 1eb50 63 68 61 6e 6e 65 6c 20 24 65 6e 74 69 74 79 46 channel$entityF
1eb60 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d  rameworkDllFile.
1eb70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1eb80 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
1eb90 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
1eba0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
1ebc0 65 20 74 61 69 6c 20 24 69 6e 73 74 61 6c 6c 65  e tail $installe 1ebd0 72 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 rExeFile]]]} the 1ebe0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 1ebf0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
1ec00 74 5f 63 68 61 6e 6e 65 6c 20 24 69 6e 73 74 61  t_channel $insta 1ec10 6c 6c 65 72 45 78 65 46 69 6c 65 20 49 6e 73 74 llerExeFile Inst 1ec20 61 6c 6c 65 72 2e 65 78 65 0d 0a 20 20 20 20 20 aller.exe.. 1ec30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1ec40 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 1ec50 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 1ec60 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 1ec70 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 1ec80 20 24 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72$sqliteDesigner
1ec90 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  DllFile]]]} then
1eca0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
1ecb0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 1ecc0 5f 63 68 61 6e 6e 65 6c 20 24 73 71 6c 69 74 65 _channel$sqlite
1ecd0 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 0d  DesignerDllFile.
1ece0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1ecf0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
1ed00 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
1ed10 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
1ed30 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61  e tail $systemDa 1ed40 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 5d taSQLiteDllFile] 1ed50 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 1ed60 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 1ed70 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
1ed80 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69   $systemDataSQLi 1ed90 74 65 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20 teDllFile.. 1eda0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1edb0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 1edc0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 1edd0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 1ede0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 1edf0 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69$systemDataSQLi
1ee00 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 5d 5d 5d  teLinqDllFile]]]
1ee10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1ee20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
1ee30 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
1ee40 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  systemDataSQLite
1ee50 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d 0a 20 20 20  LinqDllFile..
1ee60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1ee70 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
1ee80 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
1ee90 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
1eea0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
1eeb0 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51  il $systemDataSQ 1eec0 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 5d 5d LiteEf6DllFile]] 1eed0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1eee0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 1eef0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
1ef00 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  $systemDataSQLit 1ef10 65 45 66 36 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 eEf6DllFile.. 1ef20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1ef30 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 1ef40 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 1ef50 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 1ef60 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 1ef70 69 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65 5d il$testExeFile]
1ef80 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
1ef90 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
1efa0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 1efb0 20 24 74 65 73 74 45 78 65 46 69 6c 65 20 74 65$testExeFile te
1efc0 73 74 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20  st.exe..
1efd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
1efe0 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
1eff0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
1f000 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
1f010 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74     [file tail $t 1f020 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 5d 5d estLinqExeFile]] 1f030 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1f040 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 1f050 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
1f060 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65  $testLinqExeFile 1f070 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 0d 0a 20 testlinq.exe.. 1f080 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1f090 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 1f0a0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 1f0b0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 1f0c0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 1f0d0 74 61 69 6c 20 24 74 65 73 74 45 66 36 45 78 65 tail$testEf6Exe
1f0e0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
1f0f0 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
1f100 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 1f110 61 6e 6e 65 6c 20 24 74 65 73 74 45 66 36 45 78 annel$testEf6Ex
1f120 65 46 69 6c 65 20 74 65 73 74 65 66 36 2e 65 78  eFile testef6.ex
1f130 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
1f140 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
1f150 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
1f160 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
1f170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
1f180 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 4c 69  ile tail $testLi 1f190 6e 71 4f 75 74 46 69 6c 65 5d 5d 5d 7d 20 74 68 nqOutFile]]]} th 1f1a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1f1b0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
1f1c0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 1f1d0 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a 20 20 20 LinqOutFile.. 1f1e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1f1f0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 1f200 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 1f210 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 1f220 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 1f230 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 il$northwindEfD
1f240 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  bFile]]]} then {
1f250 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63  ..          chec
1f260 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 1f270 68 61 6e 6e 65 6c 20 24 6e 6f 72 74 68 77 69 6e hannel$northwin
1f280 64 45 66 44 62 46 69 6c 65 0d 0a 20 20 20 20 20  dEfDbFile..
1f290 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1f2a0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
1f2b0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
1f2c0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
1f2d0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
1f2e0 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 5d 5d   $nonWalDbFile]] 1f2f0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1f300 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 1f310 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
1f320 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d 0a 20  $nonWalDbFile.. 1f330 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1f340 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 1f350 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 1f360 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 1f370 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 1f380 74 61 69 6c 20 24 77 61 6c 44 62 46 69 6c 65 5d tail$walDbFile]
1f390 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
1f3a0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
1f3b0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 1f3c0 20 24 77 61 6c 44 62 46 69 6c 65 0d 0a 20 20 20$walDbFile..
1f3d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1f3e0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
1f3f0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
1f400 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
1f410 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
1f420 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  il $testInstallV 1f430 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2005LogFile]]]} 1f440 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1f450 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 1f460 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74$test_channel $t 1f470 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 35 estInstallVs2005 1f480 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 LogFile.. 1f490 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 1f4a0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 1f4b0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 1f4c0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 1f4d0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
1f4e0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30  testInstallVs200
1f4f0 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  8LogFile]]]} the
1f500 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
1f510 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 1f520 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 t_channel$testI
1f530 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46  nstallVs2008LogF
1f540 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
1f550 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
1f560 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
1f570 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
1f580 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f590 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 1f5a0 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 InstallVs2010Log 1f5b0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 1f5c0 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 1f5d0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
1f5e0 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61  annel $testInsta 1f5f0 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 0d llVs2010LogFile. 1f600 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 1f610 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 1f620 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 1f630 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 1f640 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 1f650 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 e tail$testInst
1f660 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
1f670 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
1f680 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
1f690 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 1f6a0 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 l$testInstallVs
1f6b0 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2012LogFile..
1f6c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1f6d0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
1f6e0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
1f6f0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
1f700 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
1f710 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  il $testInstallV 1f720 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2013LogFile]]]} 1f730 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1f740 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 1f750 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74$test_channel $t 1f760 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 estInstallVs2013 1f770 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 LogFile.. 1f780 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 1f790 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 1f7a0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 1f7b0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 1f7c0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
1f7d0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
1f7e0 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  005LogFile]]]} t
1f7f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1f800 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 1f810 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
1f820 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35  tUninstallVs2005
1f830 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
1f840 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
1f850 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
1f860 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
1f870 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
1f880 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $1f890 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 1f8a0 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 008LogFile]]]} t 1f8b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1f8c0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
1f8d0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 1f8e0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 tUninstallVs2008 1f8f0 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 LogFile.. 1f900 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 1f910 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 1f920 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 1f930 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 1f940 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
1f950 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
1f960 30 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  010LogFile]]]} t
1f970 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1f980 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 1f990 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
1f9a0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30  tUninstallVs2010
1f9b0 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
1f9c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
1f9d0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
1f9e0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
1f9f0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
1fa00 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $1fa10 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 1fa20 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 012LogFile]]]} t 1fa30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1fa40 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
1fa50 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 1fa60 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 tUninstallVs2012 1fa70 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 LogFile.. 1fa80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 1fa90 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 1faa0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 1fab0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 1fac0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
1fad0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
1fae0 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  013LogFile]]]} t
1faf0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1fb00 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 1fb10 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
1fb20 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33  tUninstallVs2013
1fb30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
1fb40 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
1fb50 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1fb60 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c  runSQLiteTestFil
1fb70 65 73 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d  esEpilogue {} {.
1fb80 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31  .      uplevel 1
1fb90 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65   {..        unse
1fba0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d  t -nocomplain \.
1fbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
1fbc0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33  tUninstallVs2013
1fbd0 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e 69 6e  LogFile testUnin
1fbe0 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69  stallVs2012LogFi
1fbf0 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
1fc00 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56    testUninstallV
1fc10 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 74 65 73  s2010LogFile tes
1fc20 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38  tUninstallVs2008
1fc30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  LogFile \..
1fc40 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73         testUnins
1fc50 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c  tallVs2005LogFil
1fc60 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32  e testInstallVs2
1fc70 30 31 33 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20  013LogFile \..
1fc80 20 20 20 20 20 20 20 20 20 20 74 65 73 74 49 6e            testIn
1fc90 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69  stallVs2012LogFi
1fca0 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  le testInstallVs
1fcb0 32 30 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20  2010LogFile \..
1fcc0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 49             testI
1fcd0 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46  nstallVs2008LogF
1fce0 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56  ile testInstallV
1fcf0 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 0d 0a  s2005LogFile....
1fd00 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
1fd10 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20  ocomplain \..
1fd20 20 20 20 20 20 20 20 20 20 6e 6f 72 74 68 77 69           northwi
1fd30 6e 64 45 66 44 62 46 69 6c 65 20 74 65 73 74 4c  ndEfDbFile testL
1fd40 69 6e 71 4f 75 74 46 69 6c 65 20 5c 0d 0a 20 20  inqOutFile \..
1fd50 20 20 20 20 20 20 20 20 20 20 77 61 6c 44 62 46            walDbF
1fd60 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65  ile nonWalDbFile
1fd70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65  ....        unse
1fd80 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d  t -nocomplain \.
1fd90 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
1fda0 74 45 66 36 45 78 65 46 69 6c 65 20 74 65 73 74  tEf6ExeFile test
1fdb0 4c 69 6e 71 45 78 65 46 69 6c 65 20 5c 0d 0a 20  LinqExeFile \..
1fdc0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 45             testE
1fdd0 78 65 46 69 6c 65 20 73 79 73 74 65 6d 44 61 74  xeFile systemDat
1fde0 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c  aSQLiteEf6DllFil
1fdf0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
1fe00 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74   systemDataSQLit
1fe10 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 73 79 73  eLinqDllFile sys
1fe20 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
1fe30 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
1fe40 20 20 20 20 73 71 6c 69 74 65 44 65 73 69 67 6e      sqliteDesign
1fe50 65 72 44 6c 6c 46 69 6c 65 20 69 6e 73 74 61 6c  erDllFile instal
1fe60 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20  lerExeFile \..
1fe70 20 20 20 20 20 20 20 20 20 20 65 6e 74 69 74 79            entity
1fe80 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65  FrameworkDllFile
1fe90 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1fea0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75  .....    proc ru
1feb0 6e 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f  nSQLiteTestEpilo
1fec0 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  gue {} {..
1fed0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
1fee0 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75   Skip running ou
1fef0 72 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f 67 75  r custom epilogu
1ff00 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e  e if the main on
1ff10 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  e has been..
1ff20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65    #       skippe
1ff30 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
1ff40 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
1ff50 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67  ists ::no(epilog
1ff60 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e  ue.eagle)]} then
1ff70 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
1ff80 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
1ff90 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73  how when our tes
1ffa0 74 73 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 65  ts actually ende
1ffb0 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20  d (now)...
1ffc0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
1ffd0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1ffe0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1fff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 20000 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e --- System.Data. 20010 53 51 4c 69 74 65 20 74 65 73 74 73 20 65 6e 64 SQLite tests end 20020 65 64 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 ed at " \.. 20030 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f [clock fo 20040 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f rmat [clock seco 20050 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 nds]] \n].... 20060 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 20070 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 # NOTE: Load the 20080 20 22 65 70 69 6c 6f 67 75 65 22 20 63 75 73 74 "epilogue" cust 20090 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f om per-user and/ 200a0 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 or per-host test 200b0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 200c0 20 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d settings now.. 200d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 200e0 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c uplevel 1 [l 200f0 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 ist loadSQLiteTe 20100 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 stSettings$::te
20110 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 65 70 69 6c  st_channel .epil
20120 6f 67 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ogue]....
20130 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55   #..        # BU
20140 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 68 65  GFIX: Before che
20150 63 6b 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20  cking the final
20160 72 65 73 6f 75 72 63 65 73 20 69 6e 20 75 73 65  resources in use
20170 20 62 79 20 53 51 4c 69 74 65 2c 20 6d 61 6b 65   by SQLite, make
20180 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
20190 20 20 20 20 73 75 72 65 20 62 6f 74 68 20 6f 66      sure both of
201a0 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61   the PRAGMA rela
201b0 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61  ted directory na
201c0 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a  mes are freed...
201d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
201e0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
201f0 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a  eDirectories $:: 20200 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 test_channel tru 20210 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e.... #.. 20220 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 20230 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 68 65 20 Also report the 20240 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 61 resource usage a 20250 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 fter running the 20260 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 tests... 20270 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f #.. repo 20280 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 rtSQLiteResource 20290 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
202a0 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  l....        #..
202b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
202c0 52 65 70 6f 72 74 20 74 68 65 20 63 72 69 74 69  Report the criti
202d0 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74  cal handle count
202e0 73 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20  s after running
202f0 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20  the tests...
20300 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 67      #..        g
20310 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f  etSQLiteHandleCo
20320 75 6e 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  unts $::test_cha 20330 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nnel.... 20340 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 20350 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c E: If necessary, 20360 20 64 69 73 61 62 6c 65 20 73 68 61 72 65 64 2d disable shared- 20370 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d cache mode now.. 20380 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 20390 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 if {[hasRunt 203a0 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 imeOption shared 203b0 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a Cache]} then {.. 203c0 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 enable 203d0 53 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 SharedCache$::t
203e0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 66 61 6c 73  est_channel fals
203f0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  e..        }..
20400 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
20410 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
20420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20460 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
20470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20480 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e  ### END Eagle ON
20490 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23 23  LY #############
204a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
204b0 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
204c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
204d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
204e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
204f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20500 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a  ##..  }....  #..
20510 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74    # NOTE: Save t
20520 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
20530 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e  irectory contain
20540 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a  ing this file...
20550 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66    #..  if {![inf
20560 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f  o exists common_
20570 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
20580 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d   {..    set comm
20590 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66 69  on_directory [fi
205a0 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f  le dirname [info
205b0 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a   script]]..  }..
205c0 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
205d0 20 50 72 6f 76 69 64 65 20 74 68 65 20 53 79 73   Provide the Sys
205e0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
205f0 74 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f 20  test package to
20600 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  the interpreter.
20610 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67 65  ..  #..  package
20620 20 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d 2e   provide System.
20630 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74  Data.SQLite.Test
20640 20 31 2e 30 0d 0a 7d 0d 0a                        1.0..}..