System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 7cf51eb2e1c2e063e05f57ab31b4e4a72903d78c:

• File Tests/common.eagle — part of check-in [601536b42f] at 2013-11-01 06:33:58 on branch trunk — Add a diagnostic message if the LKG directory is not set. (user: mistachkin size: 87822)

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 6f 72 20 32 30 31 32 20 62   2010, or 2012 b
0460: 75 69 6c 64 20 73 79 73 74 65 6d 73 2e 20 20 54  uild systems.  T
0470: 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20  o override this
0480: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20  value..      #
0490: 20 20 20 20 20 76 69 61 20 74 68 65 20 63 6f 6d       via the com
04a0: 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72  mand line, enter
04b0: 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c   a command simil
04c0: 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  ar to one of the
04d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
04e0: 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f  following (all o
04f0: 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20  n one line):..
0500: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20      #..      #
0510: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e       EagleShell.
0520: 65 78 65 20 2d 70 72 65 49 6e 69 74 69 61 6c 69  exe -preInitiali
0530: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61  ze "set test_yea
0540: 72 20 32 30 30 35 22 0d 0a 20 20 20 20 20 20 23  r 2005"..      #
0550: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e           -file .
0560: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67  \path\to\all.eag
0570: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  le..      #..
0580: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0590: 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65 49 6e  Shell.exe -preIn
05a0: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
05b0: 73 74 5f 79 65 61 72 20 32 30 30 38 22 0d 0a 20  st_year 2008"..
05c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
05d0: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
05e0: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
05f0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0600: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
0610: 2d 70 72 65 49 6e 69 74 69 61 6c 69 7a 65 20 22  -preInitialize "
0620: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
0630: 31 30 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  10"..      #
0640: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
0650: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
0660: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0670: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0680: 6c 2e 65 78 65 20 2d 70 72 65 49 6e 69 74 69 61  l.exe -preInitia
0690: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
06a0: 65 61 72 20 32 30 31 32 22 0d 0a 20 20 20 20 20  ear 2012"..
06b0: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
06c0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
06d0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
06e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
06f0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65  leShell.exe -pre
0700: 49 6e 69 74 69 61 6c 69 7a 65 20 22 75 6e 73 65  Initialize "unse
0710: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65  t -nocomplain te
0720: 73 74 5f 79 65 61 72 22 0d 0a 20 20 20 20 20 20  st_year"..
0730: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20  #         -file
0740: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
0750: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  gle..      #..
0760: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
0770: 69 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72  ists ::test_year
0780: 5d 20 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e  ] && [string len
0790: 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 72  gth $::test_year 07a0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 07b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 07c0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 07d0: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 07e0: 20 79 65 61 72 2e 20 20 49 66 20 74 68 69 73 20 year. If this 07f0: 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20 variable is not 0800: 73 65 74 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 set, the.. 0810: 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c # defaul 0820: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 t value will be 0830: 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72 based on whether 0840: 20 6f 72 20 6e 6f 74 20 45 61 67 6c 65 20 68 61 or not Eagle ha 0850: 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 20 20 s been.. 0860: 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 64 # compiled 0870: 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c 52 against the CLR 0880: 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 76 34 2e v2.0 or CLR v4. 0890: 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 0... #.. 08a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
08b0: 3a 74 65 73 74 5f 79 65 61 72 0d 0a 20 20 20 20  :test_year..
08c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
08d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
08e0: 20 4e 4f 54 45 3a 20 49 66 20 45 61 67 6c 65 20   NOTE: If Eagle
08f0: 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c 65  has been compile
0900: 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c  d against the CL
0910: 52 20 76 34 2e 30 2c 20 75 73 65 20 22 32 30 31  R v4.0, use "201
0920: 30 22 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23  0" by..        #
0930: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 28         default (
0940: 77 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 30  we could use "20
0950: 31 32 22 20 69 6e 20 74 68 61 74 20 63 61 73 65  12" in that case
0960: 20 61 73 20 77 65 6c 6c 29 20 61 73 20 74 68 65   as well) as the
0970: 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23   test..        #
0980: 20 20 20 20 20 20 20 79 65 61 72 3b 20 6f 74 68         year; oth
0990: 65 72 77 69 73 65 2c 20 75 73 65 20 22 32 30 30  erwise, use "200
09a0: 38 22 20 62 79 20 64 65 66 61 75 6c 74 20 28 77  8" by default (w
09b0: 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 30 30  e could use "200
09c0: 35 22 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 23  5" in..        #
09d0: 20 20 20 20 20 20 20 74 68 61 74 20 63 61 73 65         that case
09e0: 20 61 73 20 77 65 6c 6c 29 2e 20 20 49 66 20 61   as well).  If a
09f0: 6e 6f 74 68 65 72 20 6d 61 6a 6f 72 20 5b 69 6e  nother major [in
0a00: 63 6f 6d 70 61 74 69 62 6c 65 5d 20 76 65 72 73  compatible] vers
0a10: 69 6f 6e 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  ion of..
0a20: 23 20 20 20 20 20 20 20 74 68 65 20 43 4c 52 20  #       the CLR
0a30: 69 73 20 72 65 6c 65 61 73 65 64 2c 20 74 68 69  is released, thi
0a40: 73 20 63 68 65 63 6b 20 77 69 6c 6c 20 68 61 76  s check will hav
0a50: 65 20 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e  e to be changed.
0a60: 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 23    The..        #
0a70: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 74         default t
0a80: 65 73 74 20 79 65 61 72 20 74 6f 20 75 73 65 20  est year to use
0a90: 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72  for a particular
0aa0: 20 43 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79   CLR version may
0ab0: 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20   be..        #
0ac0: 20 20 20 20 20 6f 76 65 72 72 69 64 64 65 6e 20       overridden
0ad0: 62 79 20 73 65 74 74 69 6e 67 20 74 68 65 20 67  by setting the g
0ae0: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 22  lobal variable "
0af0: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 24  test_year_clr_v$0b00: 58 22 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 X",.. # 0b10: 20 20 20 20 20 77 68 65 72 65 20 22 24 58 22 20 where "$X"
0b20: 6d 61 79 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20  may [currently]
0b30: 62 65 20 65 69 74 68 65 72 20 22 32 22 20 6f 72  be either "2" or
0b40: 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23   "4"...        #
0b50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68  ..        if {[h
0b60: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d  aveConstraint im
0b70: 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74  ageRuntime40]} t
0b80: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
0b90: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
0ba0: 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c  s ::test_year_cl
0bb0: 72 5f 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20  r_v4] && \..
0bc0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
0bd0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74  g length $::test 0be0: 5f 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 _year_clr_v4] > 0bf0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 0c00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 0c10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 0c20: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 0c30: 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 68 test year for th 0c40: 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 e CLR v4.0... 0c50: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 0c60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
0c70: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f  ::test_year_clr_
0c80: 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  v4..          }
0c90: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0ca0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
0cb0: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
0cc0: 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74 20  he default test
0cd0: 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52  year for the CLR
0ce0: 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20   v4.0...
0cf0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
0d00: 20 20 20 72 65 74 75 72 6e 20 32 30 31 30 3b 20     return 2010;
0d10: 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61  # TODO: Good "fa
0d20: 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f  llback" default?
0d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
0d40: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
0d50: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
0d60: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
0d70: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20  st_year_clr_v2]
0d80: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
0d90: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
0da0: 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f  th $::test_year_ 0db0: 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 clr_v2] > 0} the 0dc0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 0dd0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 0de0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 0df0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 79 specified test y 0e00: 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 ear for the CLR 0e10: 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 v2.0... 0e20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 0e30: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 return$::test
0e40: 5f 79 65 61 72 5f 63 6c 72 5f 76 32 0d 0a 20 20  _year_clr_v2..
0e50: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
0e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
0e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
0e80: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66  OTE: Use the def
0e90: 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20 66  ault test year f
0ea0: 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e  or the CLR v2.0.
0eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
0ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
0ed0: 75 72 6e 20 32 30 30 38 3b 20 23 20 54 4f 44 4f  urn 2008; # TODO
0ee0: 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b  : Good "fallback
0ef0: 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20  " default?..
0f00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
0f10: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
0f20: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
0f30: 67 65 74 42 75 69 6c 64 59 65 61 72 73 20 7b 7d  getBuildYears {}
0f40: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
0f50: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
0f60: 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65  f the list of te
0f70: 73 74 20 79 65 61 72 73 20 68 61 73 20 62 65 65  st years has bee
0f80: 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20  n overridden by
0f90: 74 68 65 20 75 73 65 72 0d 0a 20 20 20 20 20 20  the user..
0fa0: 23 20 20 20 20 20 20 20 28 65 2e 67 2e 20 6f 6e  #       (e.g. on
0fb0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
0fc0: 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  e)...      #..
0fd0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
0fe0: 69 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72  ists ::test_year
0ff0: 73 5d 20 26 26 20 5b 6c 6c 65 6e 67 74 68 20 24  s] && [llength $1000: 3a 3a 74 65 73 74 5f 79 65 61 72 73 5d 20 3e 20 ::test_years] > 1010: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1020: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1030: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 1040: 65 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 20 ecified list of 1050: 74 65 73 74 20 79 65 61 72 73 2e 0d 0a 20 20 20 test years... 1060: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1070: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 return$::test_y
1080: 65 61 72 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ears..      } el
1090: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
10a0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
10b0: 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   Use the default
10c0: 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79 65   list of test ye
10d0: 61 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ars...        #.
10e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
10f0: 5b 6c 69 73 74 20 32 30 30 35 20 32 30 30 38 20  [list 2005 2008
1100: 32 30 31 30 20 32 30 31 32 5d 0d 0a 20 20 20 20  2010 2012]..
1110: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
1120: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
1130: 50 6c 61 74 66 6f 72 6d 20 7b 20 6e 61 74 69 76  Platform { nativ
1140: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20  e } {..      if
1150: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
1160: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 26  test_platform] &
1170: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
1180: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 1190: 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 :test_platform] 11a0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 11b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 11c0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 11d0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 70 specified test p 11e0: 6c 61 74 66 6f 72 6d 2e 20 20 49 66 20 74 68 69 latform. If thi 11f0: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f s variable is no 1200: 74 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 t set,.. 1210: 23 20 20 20 20 20 20 20 74 68 65 20 64 65 66 61 # the defa 1220: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 ult value will b 1230: 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6d e based on the m 1240: 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 achine architect 1250: 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ure... #. 1260: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1270: 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f [expr {$native ?
1280: 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72   $::test_platfor 1290: 6d 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 m : ""}].. 12a0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 12b0: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d 61 exists ::test_ma 12c0: 63 68 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20 20 chine] && \.. 12d0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 12e0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d 61 ength$::test_ma
12f0: 63 68 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 6e  chine] > 0} then
1300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
1310: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46         # NOTE: F
1320: 6f 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73  or native builds
1330: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61  , return the pla
1340: 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65  tform name corre
1350: 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20  sponding to..
1360: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
1370: 20 74 65 73 74 20 6d 61 63 68 69 6e 65 20 61 72   test machine ar
1380: 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65  chitecture; othe
1390: 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e  rwise, return an
13a0: 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20   empty..
13b0: 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d  #       string..
13c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
13d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72      return [expr
13e0: 20 7b 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63   {$native ? [mac 13f0: 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 hineToPlatform$
1400: 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20  ::test_machine]
1410: 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20  : ""}]..      }
1420: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
1430: 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66  ists ::tcl_platf
1440: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74  orm(machine)]} t
1450: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1460: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1470: 3a 20 46 6f 72 20 6e 61 74 69 76 65 20 62 75 69  : For native bui
1480: 6c 64 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20  lds, return the
1490: 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f  platform name co
14a0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a  rresponding to..
14b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
14c0: 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 68  the machine arch
14d0: 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77  itecture; otherw
14e0: 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65  ise, return an e
14f0: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20  mpty string...
1500: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1510: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24   return [expr {$1520: 6e 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 native ? \.. 1530: 20 20 20 20 20 20 20 20 5b 6d 61 63 68 69 6e 65 [machine 1540: 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 ToPlatform$::tc
1550: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69  l_platform(machi
1560: 6e 65 29 5d 20 3a 20 22 22 7d 5d 0d 0a 20 20 20  ne)] : ""}]..
1570: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1580: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1590: 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61 63 68 69  # NOTE: No machi
15a0: 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 20  ne architecture
15b0: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65  is available, re
15c0: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74  turn an empty st
15d0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23  ring...        #
15e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
15f0: 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20   ""..      }..
1600: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1610: 20 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75   getBuildConfigu
1620: 72 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20  ration {} {..
1630: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1640: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22  TE: See if the "
1650: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73  configuration" s
1660: 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20  etting has been
1670: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68  overridden by th
1680: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
1690: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74   user (e.g. on t
16a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29  he command line)
16b0: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f  .  This helps co
16c0: 6e 74 72 6f 6c 20 65 78 61 63 74 6c 79 0d 0a 20  ntrol exactly..
16d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69       #       whi
16e0: 63 68 20 73 65 74 20 6f 66 20 62 69 6e 61 72 69  ch set of binari
16f0: 65 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e  es we are testin
1700: 67 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75  g (i.e. those bu
1710: 69 6c 74 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ilt in the..
1720: 20 20 23 20 20 20 20 20 20 20 22 44 65 62 75 67    #       "Debug
1730: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 62  " or "Release" b
1740: 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69  uild configurati
1750: 6f 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69  ons).  To overri
1760: 64 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23  de this..      #
1770: 20 20 20 20 20 20 20 76 61 6c 75 65 20 76 69 61         value via
1780: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
1790: 65 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61  e, enter a comma
17a0: 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e  nd similar to on
17b0: 65 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20  e of..      #
17c0: 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e      the followin
17d0: 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69  g (all on one li
17e0: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ne):..      #..
17f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
1800: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65  leShell.exe -pre
1810: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
1820: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
1830: 6f 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20  on Debug"..
1840: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
1850: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
1860: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
1870: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
1880: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65  leShell.exe -pre
1890: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
18a0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
18b0: 6f 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20  on Release"..
18c0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69     #         -fi
18d0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c  le .\path\to\all
18e0: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d  .eagle..      #.
18f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45  .      #       E
1900: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66  agleShell.exe -f
1910: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c  ile .\path\to\al
1920: 6c 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74  l.eagle -preTest
1930: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1940: 20 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70    "unset -nocomp
1950: 6c 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67  lain test_config
1960: 75 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20  uration"..
1970: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
1980: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
1990: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20  _configuration]
19a0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
19b0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $19c0: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 ::test_configura 19d0: 74 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tion] > 0} then 19e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 19f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 1a00: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 1a10: 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 test configurati 1a20: 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 on. The default 1a30: 20 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20 value used.. 1a40: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 # for 1a50: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 this variable i 1a60: 73 20 74 79 70 69 63 61 6c 6c 79 20 22 52 65 6c s typically "Rel 1a70: 65 61 73 65 22 2c 20 61 73 20 73 65 74 20 62 79 ease", as set by 1a80: 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20 the test.. 1a90: 20 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65 # suite 1aa0: 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 itself... 1ab0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 1ac0: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 urn$::test_conf
1ad0: 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20  iguration..
1ae0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1af0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
1b00: 4e 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20  NOTE: Normally,
1b10: 77 65 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 69  we will never hi
1b20: 74 20 74 68 69 73 20 63 61 73 65 20 62 65 63 61  t this case beca
1b30: 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
1b40: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
1b50: 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 66 69        test confi
1b60: 67 75 72 61 74 69 6f 6e 20 76 61 72 69 61 62 6c  guration variabl
1b70: 65 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 20  e is always set
1b80: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74  by the test suit
1b90: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
1ba0: 20 20 20 69 74 73 65 6c 66 3b 20 68 6f 77 65 76     itself; howev
1bb0: 65 72 2c 20 69 74 20 63 61 6e 20 62 65 20 6f 76  er, it can be ov
1bc0: 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 74  erridden using t
1bd0: 68 65 20 75 6e 73 65 74 20 63 6f 6d 6d 61 6e 64  he unset command
1be0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1bf0: 20 20 66 72 6f 6d 20 74 68 65 20 2d 70 72 65 54    from the -preT
1c00: 65 73 74 20 6f 70 74 69 6f 6e 20 74 6f 20 74 68  est option to th
1c10: 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
1c20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1c30: 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 61 67 6c    return $::eagl 1c40: 65 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6e 66 69 e_platform(confi 1c50: 67 75 72 61 74 69 6f 6e 29 0d 0a 20 20 20 20 20 guration).. 1c60: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 1c70: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 proc getBuildC 1c80: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 7b 7d onfigurations {} 1c90: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 1ca0: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 # NOTE: See i 1cb0: 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65 f the list of te 1cc0: 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st configuration 1cd0: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 s has been overr 1ce0: 69 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 idden by.. 1cf0: 23 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72 # the user 1d00: 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f (e.g. on the co 1d10: 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 mmand line)... 1d20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 1d30: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 1d40: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 1d50: 6f 6e 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ons] && \.. 1d60: 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a [llength$:
1d70: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74  :test_configurat
1d80: 69 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ions] > 0} then
1d90: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1da0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1db0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1dc0: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e  list of test con
1dd0: 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20  figurations...
1de0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1df0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f   return $::test_ 1e00: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0d 0a configurations.. 1e10: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1e20: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1e30: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 # NOTE: Use t 1e40: 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 he default list 1e50: 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 of test configur 1e60: 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 ations... 1e70: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 1e80: 72 6e 20 5b 6c 69 73 74 20 44 65 62 75 67 20 52 rn [list Debug R 1e90: 65 6c 65 61 73 65 5d 0d 0a 20 20 20 20 20 20 7d elease].. } 1ea0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1eb0: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 42 61 73 proc getBuildBas 1ec0: 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d eDirectory {} {. 1ed0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1ee0: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f # NOTE: Figure o 1ef0: 75 74 20 74 68 65 20 62 61 73 65 20 64 69 72 65 ut the base dire 1f00: 63 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20 ctory where all 1f10: 74 68 65 20 62 75 69 6c 64 73 20 73 68 6f 75 6c the builds shoul 1f20: 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 d be.. # 1f30: 20 20 20 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 located. Th 1f40: 69 73 20 77 69 6c 6c 20 62 65 20 74 68 65 20 64 is will be the d 1f50: 69 72 65 63 74 6f 72 79 20 74 68 61 74 20 63 6f irectory that co 1f60: 6e 74 61 69 6e 73 20 74 68 65 20 61 63 74 75 61 ntains the actua 1f70: 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 l.. # 1f80: 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 build output di 1f90: 72 65 63 74 6f 72 79 20 28 65 2e 67 2e 20 70 61 rectory (e.g. pa 1fa0: 72 65 6e 74 20 6f 66 20 22 62 69 6e 22 29 2e 0d rent of "bin").. 1fb0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1fc0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 1fd0: 20 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 ::build_base_di 1fe0: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 1ff0: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 2000: 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 length$::build
2010: 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d  _base_directory]
2020: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
2030: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2040: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
2050: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69  ation of the bui
2060: 6c 64 20 62 61 73 65 20 64 69 72 65 63 74 6f 72  ld base director
2070: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
2080: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
2090: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
20a0: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74  e, use it verbat
20b0: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
20c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $20d0: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 ::build_base_dir 20e0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } 20f0: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 elseif {[info ex 2100: 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 ists ::common_di 2110: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 2120: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 2130: 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f length$::commo
2140: 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30  n_directory] > 0
2150: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2160: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2170: 4f 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c 6c 62  OTE: Next, fallb
2180: 61 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e  ack to the paren
2190: 74 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74  t directory of t
21a0: 68 65 20 6f 6e 65 20 63 6f 6e 74 61 69 6e 69 6e  he one containin
21b0: 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  g..        #
21c0: 20 20 20 74 68 69 73 20 66 69 6c 65 20 28 69 2e     this file (i.
21d0: 65 2e 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65  e. "common.eagle
21e0: 22 29 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65  "), if available
21f0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2200: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69        return [fi
2210: 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 63 6f  le dirname $::co 2220: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 0d mmon_directory]. 2230: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 2240: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 2250: 70 61 74 68 5d 20 26 26 20 5c 0d 0a 20 20 20 20 path] && \.. 2260: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 2270: 6e 67 74 68 20 24 3a 3a 70 61 74 68 5d 20 3e 20 ngth$::path] >
2280: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
2290: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
22a0: 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66  NOTE: Finally, f
22b0: 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 70  allback to the p
22c0: 61 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20  arent directory
22d0: 6f 66 20 74 68 65 20 45 61 67 6c 65 54 65 73 74  of the EagleTest
22e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
22f0: 20 20 70 61 74 68 2e 20 20 54 68 65 20 45 61 67    path.  The Eag
2300: 6c 65 54 65 73 74 20 70 61 63 6b 61 67 65 20 67  leTest package g
2310: 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 74  uarantees that t
2320: 68 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20  his variable..
2330: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69        #       wi
2340: 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 74 68 65  ll be set to the
2350: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
2360: 69 6e 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  ining the first
2370: 66 69 6c 65 20 74 6f 0d 0a 20 20 20 20 20 20 20  file to..
2380: 20 23 20 20 20 20 20 20 20 65 78 65 63 75 74 65   #       execute
2390: 20 74 68 65 20 5b 72 75 6e 54 65 73 74 50 72 6f   the [runTestPro
23a0: 6c 6f 67 75 65 5d 20 73 63 72 69 70 74 20 6c 69  logue] script li
23b0: 62 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 2e  brary procedure.
23c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
23d0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c       return [fil
23e0: 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74  e dirname $::pat 23f0: 68 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 h].. } else 2400: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 2410: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e # NOTE: N 2420: 6f 20 70 61 74 68 20 69 73 20 61 76 61 69 6c 61 o path is availa 2430: 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 ble, return an e 2440: 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 20 54 68 mpty string. Th 2450: 69 73 20 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 is point.. 2460: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 2470: 20 6e 6f 74 20 62 65 20 72 65 61 63 68 65 64 2e not be reached. 2480: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2490: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 24a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 24b0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6a 6f 69 6e ... proc join 24c0: 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b BuildDirectory { 24d0: 20 6e 61 74 69 76 65 20 70 61 74 68 20 79 65 61 native path yea 24e0: 72 20 70 6c 61 74 66 6f 72 6d 20 63 6f 6e 66 69 r platform confi 24f0: 67 75 72 61 74 69 6f 6e 20 7d 20 7b 0d 0a 20 20 guration } {.. 2500: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 2510: 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 OTE: Figure out 2520: 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20 and then return 2530: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 the fully qualif 2540: 69 65 64 20 70 61 74 68 20 74 6f 20 74 68 65 20 ied path to the 2550: 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 23 20 20 build.. # 2560: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 62 directory b 2570: 61 73 65 64 20 6f 6e 20 61 6c 6c 20 74 68 65 20 ased on all the 2580: 61 72 67 75 6d 65 6e 74 73 20 70 72 6f 76 69 64 arguments provid 2590: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 25a0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 25b0: 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 if {$native} t
25c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
25d0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e  eturn [file join
25e0: 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72   $path bin$year
25f0: 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66   $platform$conf
2600: 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20  iguration]..
2610: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
2620: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
2630: 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20   join $path bin 2640: 24 79 65 61 72 20 24 63 6f 6e 66 69 67 75 72 61$year $configura 2650: 74 69 6f 6e 20 62 69 6e 5d 0d 0a 20 20 20 20 20 tion bin].. 2660: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 2670: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 44 proc getBuildD 2680: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. 2690: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 26a0: 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 NOTE: See if the 26b0: 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d "native" runtim 26c0: 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 65 e option has bee 26d0: 6e 20 73 65 74 2e 20 20 49 66 20 73 6f 2c 20 75 n set. If so, u 26e0: 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 se the.. # 26f0: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 directory 2700: 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f for the mixed-mo 2710: 64 65 20 61 73 73 65 6d 62 6c 79 20 28 61 2e 6b de assembly (a.k 2720: 2e 61 2e 20 74 68 65 20 6e 61 74 69 76 65 20 69 .a. the native i 2730: 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 23 20 nterop.. # 2740: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 29 2e assembly). 2750: 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 To enable this 2760: 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 option via the 2770: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e command line, en 2780: 74 65 72 20 61 0d 0a 20 20 20 20 20 20 23 20 20 ter a.. # 2790: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 73 69 6d command sim 27a0: 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20 74 ilar to one of t 27b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c he following (al 27c0: 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d l on one line):. 27d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 27e0: 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 # EagleShe 27f0: 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c 69 ll.exe -initiali 2800: 7a 65 20 2d 72 75 6e 74 69 6d 65 4f 70 74 69 6f ze -runtimeOptio 2810: 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 n native.. 2820: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 # -file 2830: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 .\path\to\all.ea 2840: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 gle.. #.. 2850: 20 20 20 20 23 20 20 20 20 20 20 20 54 6f 20 65 # To e 2860: 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f nable this optio 2870: 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e n via the comman 2880: 64 20 6c 69 6e 65 20 70 72 69 6f 72 20 74 6f 20 d line prior to 2890: 74 68 65 20 22 62 65 74 61 20 31 36 22 0d 0a 20 the "beta 16".. 28a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 6c # rel 28b0: 65 61 73 65 20 6f 66 20 45 61 67 6c 65 2c 20 74 ease of Eagle, t 28c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d he following com 28d0: 6d 61 6e 64 20 6d 75 73 74 20 62 65 20 75 73 65 mand must be use 28e0: 64 20 69 6e 73 74 65 61 64 0d 0a 20 20 20 20 20 d instead.. 28f0: 20 23 20 20 20 20 20 20 20 28 61 6c 73 6f 20 61 # (also a 2900: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a ll on one line): 2910: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 2920: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 # EagleSh 2930: 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c ell.exe -initial 2940: 69 7a 65 20 2d 70 6f 73 74 49 6e 69 74 69 61 6c ize -postInitial 2950: 69 7a 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ize.. # 2960: 20 20 20 20 20 22 6f 62 6a 65 63 74 20 69 6e 76 "object inv 2970: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e oke Interpreter. 2980: 47 65 74 41 63 74 69 76 65 20 41 64 64 52 75 6e GetActive AddRun 2990: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 timeOption nativ 29a0: 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 e".. # 29b0: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 -file .\path 29c0: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 \to\all.eagle.. 29d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 29e0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 29f0: 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 :build_directory 2a00: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 2a10: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 2a20: 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74$::build_direct
2a30: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
2a40: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2a50: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
2a60: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
2a70: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
2a80: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
2a90: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23  dden;..        #
2aa0: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65         therefore
2ab0: 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69  , use it verbati
2ac0: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  m...        #..
2ad0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 2ae0: 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 :build_directory 2af0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 2b00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2b10: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 2b20: 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e the "native" run 2b30: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 73 time option is s 2b40: 65 74 2c 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f et, the mixed-mo 2b50: 64 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 de assembly.. 2b60: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is 2b70: 62 65 69 6e 67 20 74 65 73 74 65 64 2e 20 20 49 being tested. I 2b80: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 74 68 65 n that case, the 2b90: 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75 69 path to the bui 2ba0: 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 ld directory.. 2bb0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 # wi 2bc0: 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 70 ll contain the p 2bd0: 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 61 6e 64 latform name and 2be0: 20 61 6c 6c 20 74 68 65 20 62 69 6e 61 72 69 65 all the binarie 2bf0: 73 20 75 6e 64 65 72 20 74 65 73 74 0d 0a 20 20 s under test.. 2c00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 # sh 2c10: 6f 75 6c 64 20 62 65 20 70 72 65 73 65 6e 74 20 ould be present 2c20: 69 6e 20 74 68 61 74 20 64 69 72 65 63 74 6f 72 in that director 2c30: 79 2e 20 20 49 66 20 74 68 65 20 22 6e 61 74 69 y. If the "nati 2c40: 76 65 22 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 ve" runtime.. 2c50: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 70 74 # opt 2c60: 69 6f 6e 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 ion is not set, 2c70: 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 the build direct 2c80: 6f 72 79 20 77 69 6c 6c 20 62 65 20 63 6f 6e 73 ory will be cons 2c90: 69 64 65 72 65 64 20 74 6f 20 62 65 0d 0a 20 20 idered to be.. 2ca0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 70 # "p 2cb0: 6c 61 74 66 6f 72 6d 2d 6e 65 75 74 72 61 6c 22 latform-neutral" 2cc0: 2c 20 77 69 74 68 20 74 68 65 20 6e 6f 74 61 62 , with the notab 2cd0: 6c 65 20 65 78 63 65 70 74 69 6f 6e 20 6f 66 20 le exception of 2ce0: 61 6e 79 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 any native.. 2cf0: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 # asse 2d00: 6d 62 6c 79 20 28 65 2e 67 2e 20 22 53 51 4c 69 mbly (e.g. "SQLi 2d10: 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 22 29 te.Interop.dll") 2d20: 20 63 6f 70 69 65 64 20 74 68 65 72 65 20 64 75 copied there du 2d30: 72 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 ring the.. 2d40: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 # build 2d50: 70 72 6f 63 65 73 73 20 69 74 73 65 6c 66 2e 20 process itself. 2d60: 20 49 66 20 74 68 65 20 62 75 69 6c 64 20 70 72 If the build pr 2d70: 6f 63 65 73 73 20 73 6f 6d 65 68 6f 77 20 64 6f ocess somehow do 2d80: 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 es not.. 2d90: 23 20 20 20 20 20 20 20 63 6f 70 79 20 74 68 65 # copy the 2da0: 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 79 native assembly 2db0: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f for this platfo 2dc0: 72 6d 2c 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 rm, most of the 2dd0: 74 65 73 74 73 0d 0a 20 20 20 20 20 20 20 20 23 tests.. # 2de0: 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 73 75 in the su 2df0: 69 74 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 ite will simply 2e00: 62 65 20 73 6b 69 70 70 65 64 2e 20 20 47 65 6e be skipped. Gen 2e10: 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c erally speaking, 2e20: 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 there.. 2e30: 23 20 20 20 20 20 20 20 61 72 65 20 74 77 6f 20 # are two 2e40: 77 61 79 73 20 74 6f 20 62 75 69 6c 64 20 74 68 ways to build th 2e50: 65 20 62 69 6e 61 72 69 65 73 20 77 68 65 6e 20 e binaries when 2e60: 70 72 65 70 61 72 69 6e 67 20 74 6f 20 72 75 6e preparing to run 2e70: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 2e80: 20 20 20 20 20 20 74 65 73 74 20 73 75 69 74 65 test suite 2e90: 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 :.. #.. 2ea0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 31 2e # 1. 2eb0: 20 42 75 69 6c 64 20 74 68 65 20 73 65 70 61 72 Build the separ 2ec0: 61 74 65 20 6d 61 6e 61 67 65 64 20 61 6e 64 20 ate managed and 2ed0: 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 69 65 native assemblie 2ee0: 73 20 75 73 69 6e 67 20 73 6f 6d 65 0d 0a 20 20 s using some.. 2ef0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 2f00: 20 63 6f 6d 6d 61 6e 64 73 20 73 69 6d 69 6c 61 commands simila 2f10: 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 r to:.. # 2f20: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2f30: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 build.bat$
2f40: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4d  {Configuration}M
2f50: 61 6e 61 67 65 64 4f 6e 6c 79 20 24 7b 50 6c 61  anagedOnly ${Pla 2f60: 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 tform}.. 2f70: 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 # build 2f80: 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 .bat${Configura
2f90: 74 69 6f 6e 7d 4e 61 74 69 76 65 4f 6e 6c 79 20  tion}NativeOnly
2fa0: 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20  ${Platform}.. 2fb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2fc0: 23 20 20 20 20 20 20 20 20 20 20 57 68 65 72 65 # Where 2fd0: 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e${Configuration
2fe0: 7d 20 69 73 20 65 69 74 68 65 72 20 22 44 65 62  } is either "Deb
2ff0: 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22  ug" or "Release"
3000: 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20   and..        #
3010: 20 20 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66           ${Platf 3020: 6f 72 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 orm} is either " 3030: 57 69 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e Win32" or "x64". 3040: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 3050: 20 20 20 20 20 23 20 20 20 20 20 20 20 32 2e 20 # 2. 3060: 42 75 69 6c 64 20 74 68 65 20 6d 69 78 65 64 2d Build the mixed- 3070: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 75 73 mode assembly us 3080: 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 ing a command si 3090: 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20 milar to:.. 30a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 30b0: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62 build.b 30c0: 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 at${Configurati
30d0: 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d  on} ${Platform}. 30e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 30f0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 57 # W 3100: 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61 here${Configura
3110: 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20  tion} is either
3120: 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65  "Debug" or "Rele
3130: 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20  ase" and..
3140: 20 20 23 20 20 20 20 20 20 20 20 20 20 24 7b 50    #          ${P 3150: 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68 latform} is eith 3160: 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78 er "Win32" or "x 3170: 36 34 22 2e 20 20 49 66 20 74 68 69 73 20 63 6f 64". If this co 3180: 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 20 mmand is.. 3190: 20 20 23 20 20 20 20 20 20 20 20 20 20 75 73 65 # use 31a0: 64 2c 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 d, various tests 31b0: 20 74 68 61 74 20 72 65 71 75 69 72 65 20 73 75 that require su 31c0: 70 70 6c 65 6d 65 6e 74 61 72 79 20 6d 61 6e 61 pplementary mana 31d0: 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ged.. # 31e0: 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 69 assembli 31f0: 65 73 20 28 65 2e 67 2e 20 4c 49 4e 51 29 20 6d es (e.g. LINQ) m 3200: 61 79 20 62 65 20 73 6b 69 70 70 65 64 20 75 6e ay be skipped un 3210: 6c 65 73 73 20 74 68 6f 73 65 20 62 69 6e 61 72 less those binar 3220: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ies.. # 3230: 20 20 20 20 20 20 20 20 61 72 65 20 73 75 62 73 are subs 3240: 65 71 75 65 6e 74 6c 79 20 63 6f 70 69 65 64 20 equently copied 3250: 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65 63 74 into the correct 3260: 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e directory (i.e. 3270: 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 by.. # 3280: 20 20 20 20 20 20 20 20 22 74 65 73 74 5f 61 6c "test_al 3290: 6c 2e 62 61 74 22 29 2e 0d 0a 20 20 20 20 20 20 l.bat")... 32a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 #.. # 32b0: 20 20 20 20 20 4e 6f 74 65 20 74 68 61 74 20 61 Note that a 32c0: 6c 6c 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 ll of the build 32d0: 63 6f 6d 6d 61 6e 64 73 20 61 62 6f 76 65 20 77 commands above w 32e0: 69 6c 6c 20 64 65 66 61 75 6c 74 20 74 6f 20 75 ill default to u 32f0: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20 sing.. # 3300: 20 20 20 20 20 20 74 68 65 20 6c 61 74 65 73 74 the latest 3310: 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 version of MSBu 3320: 69 6c 64 20 61 76 61 69 6c 61 62 6c 65 20 61 6e ild available an 3330: 64 20 74 68 65 20 22 74 65 73 74 5f 79 65 61 72 d the "test_year 3340: 22 20 6d 61 79 0d 0a 20 20 20 20 20 20 20 20 23 " may.. # 3350: 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f 20 62 need to b 3360: 65 20 61 64 6a 75 73 74 65 64 20 61 63 63 6f 72 e adjusted accor 3370: 64 69 6e 67 6c 79 20 74 6f 20 61 63 74 75 61 6c dingly to actual 3380: 6c 79 20 72 75 6e 20 74 68 65 20 74 65 73 74 20 ly run the test 3390: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 suite... 33a0: 23 20 20 20 20 20 20 20 52 65 66 65 72 20 74 6f # Refer to 33b0: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 69 6e the comments in 33c0: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20 [getBuildYear] 33d0: 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 for more informa 33e0: 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20 20 20 20 20 tion on.. 33f0: 20 23 20 20 20 20 20 20 20 68 6f 77 20 74 6f 20 # how to 3400: 73 65 74 20 74 68 69 73 20 76 61 72 69 61 62 6c set this variabl 3410: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 3420: 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 set nativ 3430: 65 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 e [hasRuntimeOpt 3440: 69 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 ion native].... 3450: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6a return [j 3460: 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 oinBuildDirector 3470: 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74 42 75 y$native [getBu
3480: 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79  ildBaseDirectory
3490: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..
34a0: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20   [getBuildYear]
34b0: 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72  [getBuildPlatfor
34c0: 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65 74 42  m $native] [getB 34d0: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f uildConfiguratio 34e0: 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 n]].. }.. 34f0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 3500: 20 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d getBuildFileNam 3510: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b e { fileName } { 3520: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 3530: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 # NOTE: Returns 3540: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 the specified f 3550: 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69 ile name as if i 3560: 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69 t were located i 3570: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 n the.. # 3580: 20 20 20 20 20 62 75 69 6c 64 20 64 69 72 65 63 build direc 3590: 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e 67 tory, discarding 35a0: 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 69 any directory i 35b0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 nformation prese 35c0: 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 nt.. # 35d0: 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 in the file na 35e0: 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 62 me as provided b 35f0: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 y our caller... 3600: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re 3610: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 turn [file nativ 3620: 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 ename \.. 3630: 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 [file join [g 3640: 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 etBuildDirectory 3650: 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 ] [file tail$fi
3660: 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d  leName]]]..    }
3670: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
3680: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79  tBinaryDirectory
3690: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
36a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
36b0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
36c0: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f  urns the directo
36d0: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73  ry where the tes
36e0: 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20  t application..
36f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73       #       its
3700: 65 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45 61  elf (i.e. the Ea
3710: 67 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f  gle shell) is lo
3720: 63 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c  cated.  This wil
3730: 6c 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20 20  l be used as..
3740: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
3750: 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20  destination for
3760: 74 68 65 20 63 6f 70 69 65 64 20 53 79 73 74 65  the copied Syste
3770: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61  m.Data.SQLite na
3780: 74 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20 20  tive and..
3790: 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20  #       managed
37a0: 61 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e  assemblies (i.e.
37b0: 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69 73   because this is
37c0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77 20   one of the few
37d0: 70 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23 20  places..      #
37e0: 20 20 20 20 20 20 77 68 65 72 65 20 74 68 65 20        where the
37f0: 43 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c  CLR will actuall
3800: 79 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20  y find and load
3810: 74 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d  them properly)..
3820: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3830: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
3840: 20 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74   ::binary_direct
3850: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
3860: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
3870: 67 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69  gth $::binary_di 3880: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 3890: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 38a0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 38b0: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 38c0: 20 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 65 the binary dire 38d0: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f ctory has been o 38e0: 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 verridden;.. 38f0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 # ther 3900: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 efore, use it ve 3910: 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 rbatim... 3920: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 3930: 72 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 rn$::binary_dir
3940: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20  ectory..      }
3950: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
3960: 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e  return [info bin
3970: 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ary]..      }..
3980: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
3990: 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e  c getBinaryFileN
39a0: 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d  ame { fileName }
39b0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
39c0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72     # NOTE: Retur
39d0: 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ns the specified
39e0: 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66   file name as if
39f0: 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64   it were located
3a00: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23   in the..      #
3a10: 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64 69         binary di
3a20: 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64  rectory, discard
3a30: 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72  ing any director
3a40: 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72  y information pr
3a50: 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20  esent..      #
3a60: 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65       in the file
3a70: 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65   name as provide
3a80: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
3a90: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
3aa0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61   return [file na
3ab0: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  tivename \..
3ac0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
3ad0: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
3ae0: 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c  tory] [file tail
3af0: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20   $fileName]]].. 3b00: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 3b10: 63 20 67 65 74 43 6f 72 65 42 69 6e 61 72 79 46 c getCoreBinaryF 3b20: 69 6c 65 4e 61 6d 65 20 7b 20 7b 73 74 61 6e 64 ileName { {stand 3b30: 61 72 64 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a ard false} } {.. 3b40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 3b50: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 NOTE: Returns t 3b60: 68 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f 72 he full path for 3b70: 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 the file contai 3b80: 6e 69 6e 67 20 74 68 65 20 63 6f 72 65 20 53 51 ning the core SQ 3b90: 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 Lite.. # 3ba0: 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f 64 65 library code 3bb0: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f for this platfo 3bc0: 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 rm... #.. 3bd0: 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 if {[hasRunt 3be0: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native 3bf0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 3c00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 3c10: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 NOTE: Return the 3c20: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 3c30: 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d mbly file name.. 3c40: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 3c50: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 3c60: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 nativename \.. 3c70: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 3c80: 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 join [getBinary 3c90: 44 69 72 65 63 74 6f 72 79 5d 20 53 79 73 74 65 Directory] Syste 3ca0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl 3cb0: 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 l]].. } els 3cc0: 65 69 66 20 7b 24 73 74 61 6e 64 61 72 64 7d 20 eif {$standard}
3cd0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
3ce0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
3cf0: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  E: Return the na
3d00: 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61  tive-only standa
3d10: 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  rd SQLite librar
3d20: 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20  y file name...
3d30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
3d40: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61   return [file na
3d50: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  tivename \..
3d60: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f          [file jo
3d70: 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72  in [getBinaryDir
3d80: 65 63 74 6f 72 79 5d 20 73 71 6c 69 74 65 33 2e  ectory] sqlite3.
3d90: 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65  dll]]..      } e
3da0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
3db0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
3dc0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74  : Return the nat
3dd0: 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70  ive-only interop
3de0: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e   assembly file n
3df0: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ame...        #.
3e00: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3e10: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
3e20: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
3e30: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
3e40: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20  inaryDirectory]
3e50: 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64  SQLite.Interop.d
3e60: 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ll]]..      }..
3e70: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
3e80: 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63  c getCommonDirec
3e90: 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  tory {} {..
3ea0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
3eb0: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
3ec0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72   returns the dir
3ed0: 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65  ectory where the
3ee0: 20 74 65 73 74 20 73 63 72 69 70 74 73 0d 0a 20   test scripts..
3ef0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f       #       sho
3f00: 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20  uld be located.
3f10: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69   By default, thi
3f20: 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73 20 74  s just returns t
3f30: 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20  he Eagle..
3f40: 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64  #       binary d
3f50: 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20  irectory...
3f60: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
3f70: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d  nfo exists ::com
3f80: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26  mon_directory] &
3f90: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
3fa0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 3fb0: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 :common_director 3fc0: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a y] > 0} then {.. 3fd0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 3fe0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c # NOTE: The l 3ff0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 ocation of the c 4000: 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79 20 ommon directory 4010: 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 has been set;.. 4020: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 4030: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 4040: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 4050: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
4060: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
4070: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
4080: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
4090: 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72  :vendor_director
40a0: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
40b0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
40c0: 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65  h $::vendor_dire 40d0: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e ctory] > 0} then 40e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 40f0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 4100: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 he location of t 4110: 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 63 74 he vendor direct 4120: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 ory has been set 4130: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 4140: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 4150: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 e it... # 4160: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 4170: 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63$::vendor_direc
4180: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tory..      } el
4190: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
41a0: 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79  ts ::tcl_library
41b0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
41c0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
41d0: 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d   $::tcl_library] 41e0: 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 > 0 && \.. 41f0: 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69 72 [file isdir 4200: 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c 69 ectory$::tcl_li
4210: 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  brary]} then {..
4220: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
4230: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 76     # NOTE: The v
4240: 61 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 65  ariable with the
4250: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
4260: 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20   script library
4270: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
4280: 20 20 20 20 73 65 74 20 61 6e 64 20 61 70 70 65      set and appe
4290: 61 72 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  ars to be a real
42a0: 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e   directory (i.e.
42b0: 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a 20   not embedded..
42c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77         #       w
42d0: 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b 20 74  ithin a file); t
42e0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
42f0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
4300: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 4310: 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20 20 tcl_library.. 4320: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 4330: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4340: 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b # NOTE: Fallback 4350: 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 to the director 4360: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 y containing the 4370: 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20 20 executable... 4380: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4390: 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 return [info bi 43a0: 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a nary].. }.. 43b0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 43c0: 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 44 69 oc getDatabaseDi 43d0: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 rectory {} {.. 43e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 43f0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced 4400: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 ure returns the 4410: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 directory where 4420: 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 the test databas 4430: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # 4440: 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 should be loca 4450: 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 ted. By default 4460: 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 , this just uses 4470: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a the temporary.. 4480: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 4490: 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 rectory configur 44a0: 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 ed for this syst 44b0: 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 em... #.. 44c0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 44d0: 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 5f ists ::database_ 44e0: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 44f0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 4500: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 ng length$::dat
4510: 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d  abase_directory]
4520: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
4530: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4540: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
4550: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
4560: 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20  abase directory
4570: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
4580: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
4590: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
45a0: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
45b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
45c0: 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73 65 5f  urn $::database_ 45d0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 45e0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f } elseif {[info 45f0: 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 exists ::scratc 4600: 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 h_directory] && 4610: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 4620: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 ring length$::s
4630: 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79  cratch_directory
4640: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
4650: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4660: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
4670: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  cation of the sc
4680: 72 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20  ratch directory
4690: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
46a0: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
46b0: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
46c0: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
46d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
46e0: 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64  urn $::scratch_d 46f0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 4700: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 4710: 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d return [getTem 4720: 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 poraryPath].. 4730: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 4740: 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 6d 70 proc getTemp 4750: 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b oraryDirectory { 4760: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4770: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 4780: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur 4790: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 ns the directory 47a0: 20 77 68 65 72 65 20 74 68 65 20 74 65 6d 70 6f where the tempo 47b0: 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 20 20 rary files.. 47c0: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 47d0: 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 be located. By 47e0: 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a default, this j 47f0: 75 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d ust uses the tem 4800: 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 porary.. # 4810: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 directory 4820: 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 configured for t 4830: 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 his system... 4840: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 4850: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 4860: 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f emporary_directo 4870: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 4880: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 4890: 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f th$::temporary_
48a0: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
48b0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
48c0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
48d0: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
48e0: 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
48f0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
4900: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
4910: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
4920: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
4930: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
4940: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $4950: 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 ::temporary_dire 4960: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 4970: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 lseif {[info exi 4980: 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 sts ::scratch_di 4990: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 49a0: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 49b0: 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 length$::scrat
49c0: 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ch_directory] >
49d0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
49e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
49f0: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
4a00: 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 63  on of the scratc
4a10: 68 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20  h directory has
4a20: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
4a30: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4a40: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
4a50: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
4a60: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
4a70: 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63  $::scratch_direc 4a80: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 4a90: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 se {.. re 4aa0: 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 turn [getTempora 4ab0: 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d ryPath].. } 4ac0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 4ad0: 70 72 6f 63 20 67 65 74 54 65 73 74 4f 76 65 72 proc getTestOver 4ae0: 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20 7b 20 ridesPreamble { 4af0: 7b 65 78 74 72 61 56 61 72 4e 61 6d 65 73 20 22 {extraVarNames " 4b00: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 "} } {.. se 4b10: 74 20 76 61 72 4e 61 6d 65 73 20 5b 6c 69 73 74 t varNames [list 4b20: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. 4b30: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 # NOTE: If a 4b40: 76 61 69 6c 61 62 6c 65 2c 20 73 74 61 72 74 20 vailable, start 4b50: 77 69 74 68 20 74 68 65 20 6d 61 73 74 65 72 20 with the master 4b60: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 6f 76 65 list of test ove 4b70: 72 72 69 64 65 0d 0a 20 20 20 20 20 20 23 20 20 rride.. # 4b80: 20 20 20 20 20 76 61 72 69 61 62 6c 65 73 2e 0d variables.. 4b90: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 4ba0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 4bb0: 20 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 ::test_override 4bc0: 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 s] && \.. 4bd0: 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 [llength$::t
4be0: 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 3e  est_overrides] >
4bf0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
4c00: 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64      eval lappend
4c10: 20 76 61 72 4e 61 6d 65 73 20 24 3a 3a 74 65 73   varNames $::tes 4c20: 74 5f 6f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 t_overrides.. 4c30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 4c40: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 4c50: 66 20 72 65 71 75 65 73 74 65 64 20 62 79 20 6f f requested by o 4c60: 75 72 20 63 61 6c 6c 65 72 2c 20 61 64 64 20 61 ur caller, add a 4c70: 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 ny additional va 4c80: 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 riable.. # 4c90: 20 20 20 20 20 20 6e 61 6d 65 73 20 74 6f 20 63 names to c 4ca0: 6f 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 opy now... 4cb0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c #.. if {[ll 4cc0: 65 6e 67 74 68 20 24 65 78 74 72 61 56 61 72 4e ength$extraVarN
4cd0: 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ames] > 0} then
4ce0: 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20  {..        eval
4cf0: 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73  lappend varNames
4d00: 20 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 0d   $extraVarNames. 4d10: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 4d20: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 4d30: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 73 63 72 E: Build the scr 4d40: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 ipt fragment to 4d50: 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 70 be returned by p 4d60: 72 6f 63 65 73 73 69 6e 67 20 65 61 63 68 0d 0a rocessing each.. 4d70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 # va 4d80: 72 69 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20 riable name and 4d90: 61 64 64 69 6e 67 20 74 68 65 20 6e 65 63 65 63 adding the necec 4da0: 65 73 73 61 72 79 20 73 63 72 69 70 74 20 66 72 essary script fr 4db0: 61 67 6d 65 6e 74 73 20 66 6f 72 0d 0a 20 20 20 agments for.. 4dc0: 20 20 20 23 20 20 20 20 20 20 20 65 61 63 68 20 # each 4dd0: 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 one... #.. 4de0: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result 4df0: 22 22 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 "".... fore 4e00: 61 63 68 20 76 61 72 4e 61 6d 65 20 24 76 61 72 ach varName$var
4e10: 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
4e20: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
4e30: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 71 75  TE: Build the qu
4e40: 61 6c 69 66 69 65 64 20 67 6c 6f 62 61 6c 20 76  alified global v
4e50: 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20  ariable name...
4e60: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4e70: 20 20 73 65 74 20 66 75 6c 6c 56 61 72 4e 61 6d    set fullVarNam
4e80: 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 3a 3a  e [appendArgs ::
4e90: 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20   $varName].... 4ea0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4eb0: 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 # NOTE: Does th 4ec0: 65 20 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 e variable exist 4ed0: 20 69 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 in this interpr 4ee0: 65 74 65 72 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 eter context?.. 4ef0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4f00: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 4f10: 74 73 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d ts$fullVarName]
4f20: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
4f30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
4f40: 20 23 20 4e 4f 54 45 3a 20 41 70 70 65 6e 64 20   # NOTE: Append
4f50: 61 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  a script fragmen
4f60: 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  t to the result
4f70: 74 68 61 74 20 77 69 6c 6c 20 63 6f 72 72 65 63  that will correc
4f80: 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23  tly..          #
4f90: 20 20 20 20 20 20 20 63 6f 70 79 20 61 6e 79 20         copy any
4fa0: 63 6f 6e 74 61 69 6e 65 64 20 76 61 6c 75 65 20  contained value
4fb0: 74 6f 20 61 6e 6f 74 68 65 72 20 69 6e 74 65 72  to another inter
4fc0: 70 72 65 74 65 72 20 63 6f 6e 74 65 78 74 2e 0d  preter context..
4fd0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
4fe0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 72          append r
4ff0: 65 73 75 6c 74 20 5c 6e 20 22 73 65 74 20 22 20  esult \n "set "
5000: 24 66 75 6c 6c 56 61 72 4e 61 6d 65 20 22 20 5c  $fullVarName " \ 5010: 7b 22 20 5b 73 65 74 20 24 66 75 6c 6c 56 61 72 {" [set$fullVar
5020: 4e 61 6d 65 5d 20 5c 7d 0d 0a 20 20 20 20 20 20  Name] \}..
5030: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
5040: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
5050: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 72 65   NOTE: If the re
5060: 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  sult contains on
5070: 65 20 6f 72 20 6d 6f 72 65 20 73 63 72 69 70 74  e or more script
5080: 20 66 72 61 67 6d 65 6e 74 73 2c 20 61 70 70 65   fragments, appe
5090: 6e 64 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20  nd a..      #
50a0: 20 20 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20 20      newline...
50b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
50c0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
50d0: 24 72 65 73 75 6c 74 5d 20 3e 20 30 7d 20 74 68  $result] > 0} th 50e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 en {.. ap 50f0: 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 0d 0a pend result \n.. 5100: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 5110: 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d return$result.
5120: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
5130: 72 6f 63 20 67 65 74 41 70 70 44 6f 6d 61 69 6e  roc getAppDomain
5140: 50 72 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66  Preamble { {pref
5150: 69 78 20 22 22 7d 20 7b 73 75 66 66 69 78 20 22  ix ""} {suffix "
5160: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  "} } {..      #.
5170: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
5180: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65  his procedure re
5190: 74 75 72 6e 73 20 61 20 74 65 73 74 20 73 65 74  turns a test set
51a0: 75 70 20 73 63 72 69 70 74 20 66 72 61 67 6d 65  up script fragme
51b0: 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 0d  nt suitable for.
51c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65  .      #       e
51d0: 76 61 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e 20  valuation by an
51e0: 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61  interpreter crea
51f0: 74 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74  ted in an isolat
5200: 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a  ed application..
5210: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 6f        #       do
5220: 6d 61 69 6e 2e 20 20 54 68 65 20 73 63 72 69 70  main.  The scrip
5230: 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67  t fragment being
5240: 20 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62   returned will b
5250: 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 0d  e surrounded by.
5260: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
5270: 68 65 20 70 72 65 66 69 78 20 61 6e 64 20 73 75  he prefix and su
5280: 66 66 69 78 20 22 73 63 72 69 70 74 20 66 72 61  ffix "script fra
5290: 67 6d 65 6e 74 73 22 20 73 70 65 63 69 66 69 65  gments" specifie
52a0: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c  d by our caller,
52b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
52c0: 69 66 20 61 6e 79 2e 20 20 54 68 65 20 65 6e 74  if any.  The ent
52d0: 69 72 65 20 73 63 72 69 70 74 20 62 65 69 6e 67  ire script being
52e0: 20 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62   returned will b
52f0: 65 20 73 75 62 73 74 69 74 75 74 65 64 20 76 69  e substituted vi
5300: 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  a..      #
5310: 20 5b 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 65   [subst], in the
5320: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20   context of our
5330: 63 61 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 62  caller, before b
5340: 65 69 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a  eing returned...
5350: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 54 68        #       Th
5360: 69 73 20 73 74 65 70 20 69 73 20 6e 65 63 65 73  is step is neces
5370: 73 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d  sary so that som
5380: 65 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78  e limited contex
5390: 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a  t information,..
53a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
53b0: 69 6d 61 72 69 6c 79 20 72 65 6c 61 74 65 64 20  imarily related
53c0: 74 6f 20 74 68 65 20 74 65 73 74 69 6e 67 20 64  to the testing d
53d0: 69 72 65 63 74 6f 72 69 65 73 2c 20 63 61 6e 20  irectories, can
53e0: 62 65 20 74 72 61 6e 73 66 65 72 72 65 64 0d 0a  be transferred..
53f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
5400: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
5410: 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64   in the isolated
5420: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d   application dom
5430: 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a  ain, making it..
5440: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 62        #       ab
5450: 6c 65 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c  le to successful
5460: 6c 79 20 72 75 6e 20 74 65 73 74 73 20 74 68 61  ly run tests tha
5470: 74 20 72 65 71 75 69 72 65 20 6f 6e 65 20 6f 72  t require one or
5480: 20 6d 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 20   more of the..
5490: 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65      #       file
54a0: 73 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  s in one of the
54b0: 74 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72  testing director
54c0: 69 65 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 68  ies.  Callers sh
54d0: 6f 75 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20  ould keep in..
54e0: 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 6e 64      #       mind
54f0: 20 74 68 61 74 20 74 68 65 20 74 65 73 74 20 73   that the test s
5500: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62  cript fragment b
5510: 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 63 61  eing returned ca
5520: 6e 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20  nnot rely on..
5530: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 79 20      #       any
5540: 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70  script library p
5550: 72 6f 63 65 64 75 72 65 73 20 74 68 61 74 20 61  rocedures that a
5560: 72 65 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20  re not provided
5570: 62 79 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20  by the Eagle..
5580: 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72      #       libr
5590: 61 72 79 20 70 61 63 6b 61 67 65 20 28 69 2e 65  ary package (i.e
55a0: 2e 20 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c  . "init.eagle"),
55b0: 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 65   including those
55c0: 20 70 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 20   provided by..
55d0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
55e0: 45 61 67 6c 65 20 74 65 73 74 20 70 61 63 6b 61  Eagle test packa
55f0: 67 65 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 66  ge, unless the f
5600: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ile containing t
5610: 68 65 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20  hem is loaded..
5620: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e       #       man
5630: 75 61 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f  ually via some o
5640: 74 68 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 28  ther mechanism (
5650: 65 2e 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e  e.g. by includin
5660: 67 20 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20  g appropriate..
5670: 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 70 61       #       [pa
5680: 63 6b 61 67 65 20 72 65 71 75 69 72 65 5d 20 6f  ckage require] o
5690: 72 20 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61  r [source] comma
56a0: 6e 64 73 20 69 6e 20 74 68 65 20 70 72 65 66 69  nds in the prefi
56b0: 78 20 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 20  x or suffix..
56c0: 20 20 20 23 20 20 20 20 20 20 20 73 63 72 69 70     #       scrip
56d0: 74 20 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 41  t fragments).  A
56e0: 6c 73 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c  lso, all variabl
56f0: 65 20 72 65 66 65 72 65 6e 63 65 73 20 61 6e 64  e references and
5700: 20 61 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20   all nested..
5710: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61     #       comma
5720: 6e 64 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20  nds (i.e. those
5730: 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65  in square bracke
5740: 74 73 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ts) contained in
5750: 20 74 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20   the final..
5760: 20 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74    #       script
5770: 20 66 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65   fragment will e
5780: 6e 64 20 75 70 20 62 65 69 6e 67 20 65 76 61 6c  nd up being eval
5790: 75 61 74 65 64 20 69 6e 20 74 68 65 20 63 6f 6e  uated in the con
57a0: 74 65 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 20  text of the..
57b0: 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 69     #       calli
57c0: 6e 67 20 69 6e 74 65 72 70 72 65 74 65 72 20 61  ng interpreter a
57d0: 6e 64 20 6e 6f 74 20 74 68 65 20 74 61 72 67 65  nd not the targe
57e0: 74 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72  t interpreter cr
57f0: 65 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20  eated in the..
5800: 20 20 20 20 23 20 20 20 20 20 20 20 69 73 6f 6c      #       isol
5810: 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e  ated application
5820: 20 64 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74   domain unless t
5830: 68 65 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20  he dollar signs
5840: 61 6e 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20  and/or square..
5850: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 72 61       #       bra
5860: 63 6b 65 74 73 20 61 72 65 20 73 70 65 63 69 61  ckets are specia
5870: 6c 6c 79 20 71 75 6f 74 65 64 20 77 69 74 68 20  lly quoted with
5880: 62 61 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20  backslashes...
5890: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
58a0: 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b  urn [uplevel 1 [
58b0: 6c 69 73 74 20 73 75 62 73 74 20 5b 61 70 70 65  list subst [appe
58c0: 6e 64 41 72 67 73 20 24 70 72 65 66 69 78 20 7b  ndArgs $prefix { 58d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 .. if {[h 58e0: 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 asRuntimeOption 58f0: 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d native]} then {. 5900: 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 5910: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 t invoke Interpr 5920: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 41 eter.GetActive A 5930: 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 ddRuntimeOption 5940: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 native.. 5950: 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67 65 74 54 }.. } [getT 5960: 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 estOverridesPrea 5970: 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61 74 68 20 mble [list path 5980: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d 5d 20 24 test_channel]]$
5990: 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 20 20 7d  suffix]]]..    }
59a0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
59b0: 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20  yCopyBinaryFile
59c0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 6e 65 77 46  { fileName {newF
59d0: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  ileName ""} } {.
59e0: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63  .      set sourc
59f0: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69  eFileName [getBi
5a00: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69  naryFileName $fi 5a10: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 leName].... 5a20: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis 5a30: 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ts$sourceFileNa
5a40: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
5a50: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 5a60: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 5a70: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 5a80: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 "---- skip 5a90: 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e 61 ped copying bina 5aa0: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 ry file \""$sou
5ab0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  rceFileName \..
5ac0: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
5ad0: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
5ae0: 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  t\n"]....
5af0: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d   return..      }
5b00: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73  ....      if {[s
5b10: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65  tring length $ne 5b20: 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 wFileName] > 0} 5b30: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 5b40: 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 set targetFileNa 5b50: 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 me [getBuildFile 5b60: 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d Name$newFileNam
5b70: 65 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  e]..      } else
5b80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
5b90: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b  targetFileName [
5ba0: 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
5bb0: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20   $fileName].. 5bc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 5bd0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 5be0: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 file c 5bf0: 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 opy -force$sour
5c00: 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67  ceFileName $targ 5c10: 65 74 46 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 etFileName}] == 5c20: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 5c30: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
5c40: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
5c50: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
5c60: 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64      "---- copied
5c70: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f   binary file fro
5c80: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c  m \"" $sourceFil 5c90: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 eName "\" to \"" 5ca0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 5cb0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20$targetFileName
5cc0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
5cd0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
5ce0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 5cf0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 5d00: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 5d10: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 "---- failed to 5d20: 63 6f 70 79 20 62 69 6e 61 72 79 20 66 69 6c 65 copy binary file 5d30: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 from \""$sourc
5d40: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  eFileName \..
5d50: 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20           "\" to
5d60: 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e  \"" $targetFileN 5d70: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. 5d80: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 5d90: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 75 proc tryCopyBu 5da0: 69 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 ildFile { fileNa 5db0: 6d 65 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 me {newFileName 5dc0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 ""} } {.. s 5dd0: 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d et sourceFileNam 5de0: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e e [getBuildFileN 5df0: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a ame$fileName]..
5e00: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69  ..      if {![fi
5e10: 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63  le exists $sourc 5e20: 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e eFileName]} then 5e30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 5e40: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
5e50: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
5e60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
5e70: 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69  -- skipped copyi
5e80: 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22  ng build file \"
5e90: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam 5ea0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 5eb0: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f "\", it does no 5ec0: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 t exist\n"].... 5ed0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 return.. 5ee0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 5ef0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 5f00: 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d th$newFileName]
5f10: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
5f20: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74        set target
5f30: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e  FileName [getBin
5f40: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77  aryFileName $new 5f50: 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 FileName].. 5f60: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 5f70: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c set targetFil 5f80: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 eName [getBinary 5f90: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 FileName$fileNa
5fa0: 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  me]..      }....
5fb0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
5fc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
5fd0: 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72    file copy -for
5fe0: 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  ce $sourceFileNa 5ff0: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 me$targetFileNa
6000: 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  me}] == 0} then
6010: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
6020: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 6030: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 6040: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 6050: 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 - copied build f 6060: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f ile from \""$so
6070: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22  urceFileName "\"
6080: 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20   to \"" \..
6090: 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69         $targetFi 60a0: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. 60b0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 60c0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
60d0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
60e0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
60f0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69         "---- fai
6100: 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c  led to copy buil
6110: 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20  d file from \""
6120: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName 6130: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 6140: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 \" to \""$targe
6150: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  tFileName \"\n].
6160: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
6170: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79  ....    proc try
6180: 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
6190: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d   { fileName } {.
61a0: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e  .      set fileN
61b0: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
61c0: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 61d0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 ].... if {! 61e0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
61f0: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
6200: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $6210: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 6220: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 6230: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 6240: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting 6250: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 binary file \"" 6260: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
6270: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69            "\", i
6280: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
6290: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  \n"]....
62a0: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d  return..      }.
62b0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
62c0: 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65  tch {file delete
62d0: 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20   $fileName}] == 62e0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 62f0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
6300: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
6310: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
6320: 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65      "---- delete
6330: 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22  d binary file \"
6340: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  " $fileName \"\n 6350: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 6360: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 6370: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
6380: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
6390: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
63a0: 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65  - failed to dele
63b0: 74 65 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c  te binary file \
63c0: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ 63d0: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. 63e0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 63f0: 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 tryDeleteBuildFi 6400: 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 le { fileName } 6410: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c {.. set fil 6420: 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 eName [getBuildF 6430: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
6440: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  e]....      if {
6450: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  ![file exists $f 6460: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 6470: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 6480: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
6490: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
64a0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
64b0: 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e   skipped deletin
64c0: 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22  g build file \""
64d0: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20   $fileName \.. 64e0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 "\", i 64f0: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist 6500: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n"].... 6510: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d return.. }. 6520: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca 6530: 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 tch {file delete 6540: 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20$fileName}] ==
6550: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
6560: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 6570: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 6580: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 6590: 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 "---- delete 65a0: 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 d build file \"" 65b0: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d$fileName \"\n]
65c0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
65d0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
65e0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 65f0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 6600: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 6610: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 6620: 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 e build file \"" 6630: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d$fileName \"\n]
6640: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
6650: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
6660: 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b 20  yCopyAssembly {
6670: 66 69 6c 65 4e 61 6d 65 20 7b 70 64 62 20 74 72  fileName {pdb tr
6680: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  ue} } {..      t
6690: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
66a0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20  $fileName.... 66b0: 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 if {$pdb} the
66c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79  n {..        try
66d0: 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 5b 61  CopyBuildFile [a
66e0: 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20  ppendArgs [file
66f0: 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61  rootname $fileNa 6700: 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20 20 20 me] .pdb].. 6710: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 6720: 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 proc tryDelete 6730: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e Assembly { fileN 6740: 61 6d 65 20 7b 70 64 62 20 74 72 75 65 7d 20 7d ame {pdb true} } 6750: 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 6c {.. tryDel 6760: 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 eteBinaryFile$f
6770: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20 20  ileName....
6780: 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20   if {$pdb} then 6790: 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44 65 {.. tryDe 67a0: 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 5b leteBinaryFile [ 67b0: 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 appendArgs [file 67c0: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e rootname$fileN
67d0: 61 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20 20  ame] .pdb]..
67e0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
67f0: 20 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 41     proc tryLoadA
6800: 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61  ssembly { fileNa
6810: 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  me } {..      se
6820: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  t fileName [getB
6830: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f 6840: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... 6850: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 65 if {[catch {se 6860: 74 20 61 73 73 65 6d 62 6c 79 20 5c 0d 0a 20 20 t assembly \.. 6870: 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a [obj 6880: 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 ect load -loadty 6890: 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 24 pe File -alias$
68a0: 66 69 6c 65 4e 61 6d 65 5d 7d 5d 20 3d 3d 20 30  fileName]}] == 0
68b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
68c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
68d0: 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 64 20 74 68  OTE: Now, add th
68e0: 65 20 6e 65 63 65 73 73 61 72 79 20 74 65 73 74  e necessary test
68f0: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20   constraint...
6900: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
6910: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b   addConstraint [
6920: 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66  file rootname [f
6930: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa 6940: 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 me]].... 6950: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 6960: 45 3a 20 47 72 61 62 20 74 68 65 20 69 6d 61 67 E: Grab the imag 6970: 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f e runtime versio 6980: 6e 20 66 72 6f 6d 20 74 68 65 20 61 73 73 65 6d n from the assem 6990: 62 6c 79 20 62 65 63 61 75 73 65 0d 0a 20 20 20 bly because.. 69a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 76 # sev 69b0: 65 72 61 6c 20 74 65 73 74 73 20 72 65 6c 79 20 eral tests rely 69c0: 6f 6e 20 69 74 20 68 61 76 69 6e 67 20 61 20 63 on it having a c 69d0: 65 72 74 61 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 ertain value... 69e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 69f0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 6a00: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c [appendArgs [fil 6a10: 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
6a20: 5d 20 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ] _ \..
6a30: 20 20 20 5b 24 61 73 73 65 6d 62 6c 79 20 49 6d     [$assembly Im 6a40: 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f ageRuntimeVersio 6a50: 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 n]].... # 6a60: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 6a70: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 66 75 6c : Return the ful 6a80: 6c 20 70 61 74 68 20 6f 66 20 74 68 65 20 6c 6f l path of the lo 6a90: 61 64 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 aded file... 6aa0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 6ab0: 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d eturn$fileName.
6ac0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
6ad0: 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
6ae0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
6af0: 69 73 53 51 4c 69 74 65 52 65 61 64 79 20 7b 7d  isSQLiteReady {}
6b00: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
6b10: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
6b20: 70 72 6f 63 65 64 75 72 65 20 6d 75 73 74 20 72  procedure must r
6b30: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 6f  eturn non-zero o
6b40: 6e 6c 79 20 69 66 20 74 68 65 20 53 51 4c 69 74  nly if the SQLit
6b50: 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  e native..
6b60: 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 20  #       library
6b70: 61 6e 64 20 74 68 65 20 53 79 73 74 65 6d 2e 44  and the System.D
6b80: 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67  ata.SQLite manag
6b90: 65 64 20 61 73 73 65 6d 62 6c 79 20 61 72 65 20  ed assembly are
6ba0: 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20  loaded..      #
6bb0: 20 20 20 20 20 20 61 6e 64 20 72 65 61 64 79 20        and ready
6bc0: 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74  for use by the t
6bd0: 65 73 74 20 73 75 69 74 65 2e 20 20 43 75 72 72  est suite.  Curr
6be0: 65 6e 74 6c 79 2c 20 74 68 69 73 20 70 72 6f 63  ently, this proc
6bf0: 65 64 75 72 65 0d 0a 20 20 20 20 20 20 23 20 20  edure..      #
6c00: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 63       should be c
6c10: 61 6c 6c 65 64 20 6f 6e 6c 79 20 61 66 74 65 72  alled only after
6c20: 20 74 68 65 20 5b 74 72 79 4c 6f 61 64 41 73 73   the [tryLoadAss
6c30: 65 6d 62 6c 79 5d 20 70 72 6f 63 65 64 75 72 65  embly] procedure
6c40: 20 68 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20   has..      #
6c50: 20 20 20 20 62 65 65 6e 20 63 61 6c 6c 65 64 20      been called
6c60: 74 6f 20 70 72 6f 62 65 20 66 6f 72 20 74 68 65  to probe for the
6c70: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
6c80: 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65  ite managed asse
6c90: 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  mbly..      #
6ca0: 20 20 20 20 61 6e 64 20 74 68 65 20 5b 63 68 65      and the [che
6cb0: 63 6b 46 6f 72 53 51 4c 69 74 65 5d 20 70 72 6f  ckForSQLite] pro
6cc0: 63 65 64 75 72 65 20 68 61 73 20 62 65 65 6e 20  cedure has been
6cd0: 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 20  called to probe
6ce0: 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  for..      #
6cf0: 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61     the SQLite na
6d00: 74 69 76 65 20 6c 69 62 72 61 72 79 3b 20 6f 74  tive library; ot
6d10: 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 70 72  herwise, this pr
6d20: 6f 63 65 64 75 72 65 20 77 69 6c 6c 20 73 69 6d  ocedure will sim
6d30: 70 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ply..      #
6d40: 20 20 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e     always return
6d50: 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 23 0d   zero...      #.
6d60: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65  .      return [e
6d70: 78 70 72 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72  xpr {[haveConstr
6d80: 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61  aint System.Data
6d90: 2e 53 51 4c 69 74 65 5d 20 26 26 20 5c 0d 0a 20  .SQLite] && \..
6da0: 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f           [haveCo
6db0: 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 5d  nstraint SQLite]
6dc0: 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  }]..    }.....
6dd0: 20 20 70 72 6f 63 20 6d 61 74 63 68 4d 61 63 68    proc matchMach
6de0: 69 6e 65 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d  ine { platform }
6df0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
6e00: 20 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d     # NOTE: An em
6e10: 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  pty string for t
6e20: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e  he platform mean
6e30: 73 20 74 68 61 74 20 74 68 65 20 62 75 69 6c 64  s that the build
6e40: 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23   is not..      #
6e50: 20 20 20 20 20 20 20 5b 70 72 69 6d 61 72 69 6c         [primaril
6e60: 79 5d 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c  y] a native buil
6e70: 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74  d; therefore, it
6e80: 20 61 6c 77 61 79 73 20 6d 61 74 63 68 65 73 2e   always matches.
6e90: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
6ea0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
6eb0: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d  gth $platform] = 6ec0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 6ed0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 6ee0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 6ef0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 6f00: 54 45 3a 20 44 6f 65 73 20 74 68 65 20 73 70 65 TE: Does the spe 6f10: 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 cified platform 6f20: 6d 61 74 63 68 20 75 70 20 74 6f 20 74 68 65 20 match up to the 6f30: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 3f current process? 6f40: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6f50: 20 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 if {$platform e
6f60: 71 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74  q [machineToPlat
6f70: 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74  form $::tcl_plat 6f80: 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 form(machine)]} 6f90: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 6fa0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 6fb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 6fc0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 6fd0: 68 65 20 73 70 65 63 69 66 69 65 64 20 70 6c 61 he specified pla 6fe0: 74 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d tform does not m 6ff0: 61 74 63 68 20 75 70 20 77 69 74 68 20 74 68 65 atch up with the 7000: 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 platform.. 7010: 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 # for the 7020: 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 current process 7030: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 7040: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. 7050: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7060: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 oc checkForSQLit 7070: 65 42 75 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 eBuilds { channe 7080: 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d l {select false} 7090: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 70a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 70b0: 63 6b 20 66 6f 72 20 65 76 65 72 79 20 70 6f 73 ck for every pos 70c0: 73 69 62 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 sible valid comb 70d0: 69 6e 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 ination of value 70e0: 73 20 75 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 s used when.. 70f0: 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 # locat 7100: 69 6e 67 20 6f 75 74 20 74 68 65 20 62 75 69 6c ing out the buil 7110: 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f d output directo 7120: 72 79 2c 20 73 68 6f 77 69 6e 67 20 65 61 63 68 ry, showing each 7130: 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 available.. 7140: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 # build 7150: 76 61 72 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 variation along 7160: 74 68 65 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 the way... 7170: 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 #.. foreach 7180: 20 6e 61 74 69 76 65 20 5b 6c 69 73 74 20 66 61 native [list fa 7190: 6c 73 65 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 lse true] {.. 71a0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 79 65 61 foreach yea 71b0: 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 73 r [getBuildYears 71c0: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 ] {.. f 71d0: 6f 72 65 61 63 68 20 63 6f 6e 66 69 67 75 72 61 oreach configura 71e0: 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f tion [getBuildCo 71f0: 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d nfigurations] {. 7200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 7210: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 7220: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 TE: Figure out t 7230: 68 65 20 65 66 66 65 63 74 69 76 65 20 62 75 69 he effective bui 7240: 6c 64 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 ld platform. Th 7250: 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 is is.. 7260: 20 20 20 23 20 20 20 20 20 20 20 62 61 73 65 64 # based 7270: 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e on whether or n 7280: 6f 74 20 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d ot a [primarily] 7290: 20 6e 61 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 native build.. 72a0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 72b0: 20 20 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 is being used 72c0: 2e 20 20 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c . For [primaril 72d0: 79 5d 20 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 y] non-native bu 72e0: 69 6c 64 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 ilds,.. 72f0: 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20 # this 7300: 77 69 6c 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 will be an empty 7310: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 string... 7320: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 7330: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 7340: 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 m [getBuildPlatf 7350: 6f 72 6d 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a orm$native]....
7360: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
7370: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 7380: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 7390: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 73a0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 checking for Sys 73b0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 73c0: 62 75 69 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 build \"" [expr 73d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 73e0: 20 20 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e {$native ? "n
73f0: 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b  ative/" : ""}] [
7400: 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65  expr {[string le
7410: 6e 67 74 68 20 5c 0d 0a 20 20 20 20 20 20 20 20  ngth \..
7420: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72          $platfor 7430: 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 m] > 0 ? [append 7440: 41 72 67 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f Args$platform /
7450: 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 5c  ] : ""}] $year \ 7460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 7470: 20 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 /$configurati
7480: 6f 6e 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a  on "\"... "]....
7490: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
74a0: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
74b0: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c  E: Build the ful
74c0: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c  ly qualified fil
74d0: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 70  e name for the p
74e0: 72 69 6d 61 72 79 0d 0a 20 20 20 20 20 20 20 20  rimary..
74f0: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65      #       asse
7500: 6d 62 6c 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mbly containing
7510: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
7520: 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 0d 0a  SQLite managed..
7530: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
7540: 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20      components.
7550: 20 49 74 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f   It should be no
7560: 74 65 64 20 74 68 61 74 20 74 68 69 73 20 61 73  ted that this as
7570: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..
7580: 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65      #       file
7590: 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69   may also contai
75a0: 6e 20 74 68 65 20 6e 61 74 69 76 65 20 63 6f 6d  n the native com
75b0: 70 6f 6e 65 6e 74 73 2c 20 69 66 20 61 0d 0a 20  ponents, if a..
75c0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
75d0: 20 20 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20     native build
75e0: 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20  is in use...
75f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
7600: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
7610: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ame [file native
7620: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
7630: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
7640: 20 20 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72     [joinBuildDir
7650: 65 63 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5b  ectory $native [ 7660: 67 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 getBuildBaseDire 7670: 63 74 6f 72 79 5d 20 24 79 65 61 72 20 5c 0d 0a ctory]$year \..
7680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7690: 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69  $platform$confi
76a0: 67 75 72 61 74 69 6f 6e 5d 20 53 79 73 74 65 6d  guration] System
76b0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
76c0: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ]]....
76d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
76e0: 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68   # NOTE: Does th
76f0: 65 20 66 69 6c 65 20 65 78 69 73 74 3f 20 20 43  e file exist?  C
7700: 75 72 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f 74 68  urrently, no oth
7710: 65 72 20 73 74 65 70 73 20 61 72 65 0d 0a 20 20  er steps are..
7720: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
7730: 20 20 74 61 6b 65 6e 20 74 6f 20 76 65 72 69 66    taken to verif
7740: 79 20 74 68 69 73 20 62 75 69 6c 64 20 69 73 20  y this build is
7750: 61 63 74 75 61 6c 6c 79 20 76 69 61 62 6c 65 2e  actually viable.
7760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
7770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
7780: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  {[file exists $f 7790: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 77a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 77b0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 77c0: 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 69 6e # NOTE: When in 77d0: 20 22 73 65 6c 65 63 74 22 20 6d 6f 64 65 2c 20 "select" mode, 77e0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 automatically se 77f0: 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 0d 0a lect the first.. 7800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 7810: 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 available 7820: 62 75 69 6c 64 20 6f 66 20 53 79 73 74 65 6d 2e build of System. 7830: 44 61 74 61 2e 53 51 4c 69 74 65 20 61 6e 64 20 Data.SQLite and 7840: 74 68 65 6e 20 72 65 74 75 72 6e 0d 0a 20 20 20 then return.. 7850: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 7860: 20 20 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0d immediately.. 7870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 7880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 7890: 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b if {$select && [
78a0: 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70 6c  matchMachine $pl 78b0: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. 78c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 78d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 78e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6e 75 # NOTE: Manu 78f0: 61 6c 6c 79 20 6f 76 65 72 72 69 64 65 20 61 6c ally override al 7900: 6c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 l the build dire 7910: 63 74 6f 72 79 20 73 65 6c 65 63 74 69 6f 6e 0d ctory selection. 7920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 7930: 20 23 20 20 20 20 20 20 20 72 65 6c 61 74 65 64 # related 7940: 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 69 test settings i 7950: 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72 63 65 n order to force 7960: 20 74 68 69 73 20 62 75 69 6c 64 0d 0a 20 20 20 this build.. 7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 7980: 20 20 20 20 20 6f 66 20 53 79 73 74 65 6d 2e 44 of System.D 7990: 61 74 61 2e 53 51 4c 69 74 65 20 74 6f 20 62 65 ata.SQLite to be 79a0: 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 used... 79b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 79c0: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 79d0: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 t invoke Interpr 79e0: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 5b eter.GetActive [ 79f0: 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 expr {$native ?
7a00: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
7a10: 20 20 20 20 20 20 20 22 41 64 64 52 75 6e 74 69         "AddRunti
7a20: 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22 52 65 6d  meOption" : "Rem
7a30: 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  oveRuntimeOption
7a40: 22 7d 5d 20 20 6e 61 74 69 76 65 0d 0a 0d 0a 20  "}]  native....
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
7a60: 65 74 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 24  et ::test_year $7a70: 79 65 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 year.. 7a80: 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 set ::test 7a90: 5f 70 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 _platform$platf
7aa0: 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  orm..
7ab0: 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f       set ::test_
7ac0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 63  configuration $c 7ad0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 0d 0a onfiguration.... 7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7af0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
7b00: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b20: 20 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64    "yes, selected
7b30: 20 28 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69   (" [expr {$nati 7b40: 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a ve ? "native/" : 7b50: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 ""}] \.. 7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 [ex 7b70: 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 pr {[string leng 7b80: 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 th$platform] >
7b90: 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20  0 ? [appendArgs
7ba0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
7bb0: 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d         $platform 7bc0: 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 /] : ""}]$year
7bd0: 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f   / $configuratio 7be0: 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 n ")\n"].... 7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 7c00: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 rn true.. 7c10: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 7c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 7c30: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
7c40: 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20  yes\n..
7c50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
7c60: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
7c80: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. 7c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 7ca0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 7cb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 7cc0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 7cd0: 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d false.. }.... 7ce0: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF 7cf0: 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 orSQLiteReleases 7d00: 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 { channel {sele 7d10: 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 ct false} } {.. 7d20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 7d30: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 NOTE: Check for 7d40: 70 61 73 74 20 72 65 6c 65 61 73 65 73 20 6f 66 past releases of 7d50: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 7d60: 69 74 65 20 69 6e 20 74 68 65 20 64 69 72 65 63 ite in the direc 7d70: 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 tory.. # 7d80: 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e contained in 7d90: 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61 74 the "System.Dat 7da0: 61 2e 53 51 4c 69 74 65 22 20 65 6e 76 69 72 6f a.SQLite" enviro 7db0: 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2c 20 nment variable, 7dc0: 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 if.. # 7dd0: 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 present... 7de0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 7df0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e info exists ::en 7e00: 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 v(System.Data.SQ 7e10: 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20 20 20 Lite)] && \.. 7e20: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 7e30: 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53 79 73 ength$::env(Sys
7e40: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29  tem.Data.SQLite)
7e50: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
7e60: 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63         set direc
7e70: 74 6f 72 79 20 24 3a 3a 65 6e 76 28 53 79 73 74  tory $::env(Syst 7e80: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 0d em.Data.SQLite). 7e90: 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 ... set f 7ea0: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 ileName [file na 7eb0: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 7ec0: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c oin$directory \
7ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
7ee0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
7ef0: 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .dll]]....
7f00: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 7f10: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 7f20: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 7f30: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 7f40: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 7f50: 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d e release \"" \. 7f60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 .$fi
7f70: 6c 65 4e 61 6d 65 20 22 5c 22 2e 2e 2e 20 22 5d  leName "\"... "]
7f80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
7f90: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 7fa0: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 7fb0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 . if {$
7fc0: 73 65 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a  select} then {..
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
7fe0: 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72  ::build_director
7ff0: 79 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a  y $directory.... 8000: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 8010: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
8020: 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24  ndArgs "yes (" $8030: 64 69 72 65 63 74 6f 72 79 20 22 29 5c 6e 22 5d directory ")\n"] 8040: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 8050: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 8060: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 8070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 8080: 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c ts$channel yes\
8090: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  n..          }..
80a0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
80b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
80c0: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. 80d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 ... for 80e0: 65 61 63 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 each path [lsort 80f0: 20 2d 64 65 63 72 65 61 73 69 6e 67 20 5b 66 69 -decreasing [fi 8100: 6c 65 20 6c 69 73 74 20 24 64 69 72 65 63 74 6f le list$directo
8110: 72 79 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20  ry *]] {..
8120: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
8130: 65 78 69 73 74 73 20 24 70 61 74 68 5d 20 26 26  exists $path] && 8140: 20 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f [file isdirecto 8150: 72 79 20 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 ry$path]} then
8160: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
8170: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66   set fileName [f
8180: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
8190: 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20  file join $path 81a0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 81b0: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 81c0: 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 0d .SQLite.dll]]... 81d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 81e0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
81f0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
8200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
8210: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
8220: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
8230: 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22  Lite release \""
8240: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
8250: 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20        $fileName 8260: 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 "\"... "].... 8270: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 8280: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
8290: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
82a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
82b0: 69 66 20 7b 24 73 65 6c 65 63 74 7d 20 74 68 65  if {$select} the 82c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 82d0: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 62 75 69 set ::bui 82e0: 6c 64 5f 64 69 72 65 63 74 6f 72 79 20 24 70 61 ld_directory$pa
82f0: 74 68 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  th....
8300: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 8310: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 8320: 67 73 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 gs "yes, selecte 8330: 64 20 28 22 20 24 70 61 74 68 20 22 29 5c 6e 22 d ("$path ")\n"
8340: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
8350: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
8360: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..
8370: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8390: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79  tputs $channel y 83a0: 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 es\n.. 83b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 83c0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 83d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 83e0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
83f0: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  no\n..
8400: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
8410: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
8420: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
8430: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
8440: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 8450: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 8460: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 8470: 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e "---- environmen 8480: 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73 t variable \"Sys 8490: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c tem.Data.SQLite\ 84a0: 22 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 " is not " \.. 84b0: 20 20 20 20 20 20 20 20 20 20 22 73 65 74 2c 20 "set, 84c0: 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 skipping check f 84d0: 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e or releases...\n 84e0: 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 "].. }.... 84f0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals 8500: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... 8510: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 proc checkForSQ 8520: 4c 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 68 LiteLibrary { ch 8530: 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 annel } {.. 8540: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
8550: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
8560: 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  or SQLite core l
8570: 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20  ibrary... "....
8580: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
8590: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
85a0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
85b0: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
85c0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
85d0: 69 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20  ite.SQLite3 \..
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
85f0: 69 74 65 56 65 72 73 69 6f 6e 7d 20 76 65 72 73  iteVersion} vers
8600: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ion] == 0} then
8610: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
8620: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
8630: 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72  eck if the retur
8640: 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20  ned version was
8650: 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61  null.  If so, ma
8660: 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20  ke it easy..
8670: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73      #       to s
8680: 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  pot...        #.
8690: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
86a0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72  ring length $ver 86b0: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then 86c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 86d0: 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a t version null.. 86e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 86f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8700: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 8710: 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 to query the Fos 8720: 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 sil source ident 8730: 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 ifier for the SQ 8740: 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 Lite.. # 8750: 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 core libra 8760: 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ry... #.. 8770: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 8780: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 8790: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 87a0: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 87b0: 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 ublic System.Dat 87c0: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 a.SQLite.SQLite3 87d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 87e0: 20 20 20 20 53 51 4c 69 74 65 53 6f 75 72 63 65 SQLiteSource 87f0: 49 64 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 Id} sourceId]} t 8800: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 8810: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 8820: 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20 NOTE: We failed 8830: 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 to query the Fos 8840: 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 sil source ident 8850: 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 ifier... 8860: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 8870: 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e et sourceId unkn 8880: 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a own.. }.. 8890: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 88a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 88b0: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e ck if the return 88c0: 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 ed Fossil source 88d0: 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 20 identifier was 88e0: 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 null. If.. 88f0: 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d # so, m 8900: 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 73 ake it easy to s 8910: 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d pot... #. 8920: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st 8930: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 ring length$sou
8940: 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65  rceId] == 0} the
8950: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
8960: 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c  et sourceId null
8970: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
8980: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
8990: 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74    # NOTE: Yes, t
89a0: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
89b0: 69 62 72 61 72 79 20 61 70 70 65 61 72 73 20 74  ibrary appears t
89c0: 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d  o be available..
89d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
89e0: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
89f0: 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 20  t SQLite....
8a00: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 8a10: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " 8a20: 79 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20 yes ("$version
8a30: 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29  " " $sourceId ") 8a40: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c \n"].. } el 8a50: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp 8a60: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c uts$channel no\
8a70: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  n..      }..
8a80: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
8a90: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74  heckForSQLiteInt
8aa0: 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c 20 7d  erop { channel }
8ab0: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20   {..      tputs
8ac0: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  $channel "---- c 8ad0: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 hecking for SQLi 8ae0: 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d te interop assem 8af0: 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 bly... ".... 8b00: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 8b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob 8b20: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 8b30: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 gs +NonPublic Sy 8b40: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 8b50: 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 .SQLite3 \.. 8b60: 20 20 20 20 20 20 20 20 20 20 49 6e 74 65 72 6f Intero 8b70: 70 56 65 72 73 69 6f 6e 7d 20 76 65 72 73 69 6f pVersion} versio 8b80: 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d n] == 0} then {. 8b90: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8ba0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 8bb0: 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 k if the returne 8bc0: 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 d version was nu 8bd0: 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 ll. If so, make 8be0: 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20 it easy.. 8bf0: 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f # to spo 8c00: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 8c10: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 8c20: 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 ng length$versi
8c30: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
8c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
8c50: 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20  version null..
8c60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
8c70: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
8c80: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
8c90: 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69   query the Fossi
8ca0: 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66  l source identif
8cb0: 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ier for the SQLi
8cc0: 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  te..        #
8cd0: 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79      core library
8ce0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
8cf0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
8d00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
8d10: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
8d20: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
8d30: 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  lic System.Data.
8d40: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 5c  SQLite.SQLite3 \
8d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
8d60: 20 20 49 6e 74 65 72 6f 70 53 6f 75 72 63 65 49    InteropSourceI
8d70: 64 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68  d} sourceId]} th
8d80: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
8d90: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
8da0: 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74  OTE: We failed t
8db0: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73  o query the Foss
8dc0: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69  il source identi
8dd0: 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  fier...
8de0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
8df0: 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f  t sourceId unkno
8e00: 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  wn..        }...
8e10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
8e20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
8e30: 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65  k if the returne
8e40: 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20  d Fossil source
8e50: 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e  identifier was n
8e60: 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20  ull.  If..
8e70: 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61    #       so, ma
8e80: 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 73 70  ke it easy to sp
8e90: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ot...        #..
8ea0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
8eb0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72  ing length $sour 8ec0: 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ceId] == 0} then 8ed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 8ee0: 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d t sourceId null. 8ef0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 8f00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 8f10: 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 # NOTE: Yes, th 8f20: 65 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 e SQLite interop 8f30: 20 61 73 73 65 6d 62 6c 79 20 61 70 70 65 61 72 assembly appear 8f40: 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c s to be availabl 8f50: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 8f60: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 8f70: 61 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 aint SQLiteInter 8f80: 6f 70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 op.... tp 8f90: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
8fa0: 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22  pendArgs "yes ("
8fb0: 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73   $version " "$s
8fc0: 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a  ourceId ")\n"]..
8fd0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
8fe0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 8ff0: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 hannel no\n.. 9000: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 9010: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo 9020: 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e rSQLiteDefineCon 9030: 73 74 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20 stant { channel 9040: 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 name } {.. 9050: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
9060: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
9070: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
9080: 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
9090: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65  m.Data.SQLite de
90a0: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22  fine constant \"
90b0: 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  " $name \.. 90c0: 20 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a "\"... "].. 90d0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 90e0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 90f0: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 9100: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 9110: 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e lic System.Data. 9120: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 5c SQLite.SQLite3 \ 9130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 9140: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 7d DefineConstants} 9150: 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 defineConstants 9160: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 9170: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 if {[lse 9180: 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 arch -exact -noc 9190: 61 73 65 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 ase$defineConst
91a0: 61 6e 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d  ants $name] != - 91b0: 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 1} then {.. 91c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 91d0: 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 # NOTE: Yes, t 91e0: 68 69 73 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 his define const 91f0: 61 6e 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 ant was enabled 9200: 77 68 65 6e 20 74 68 65 20 6d 61 6e 61 67 65 64 when the managed 9210: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 9220: 20 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73 assembly was 9230: 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 compiled... 9240: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 9250: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 9260: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 64 65 66 [appendArgs def 9270: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 ineConstant.Syst 9280: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 20 em.Data.SQLite. 9290: 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20$name]....
92a0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 92b0: 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 el yes\n.. 92c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 92d0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
92e0: 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20  nnel no\n..
92f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
9300: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
9310: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 72  uts $channel err 9320: 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 or\n.. }.. 9330: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 9340: 63 20 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 c getDateTimeFor 9350: 6d 61 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 mat {} {.. 9360: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 9370: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure 9380: 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 74 simply returns t 9390: 68 65 20 22 64 65 66 61 75 6c 74 22 20 44 61 74 he "default" Dat 93a0: 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 eTime format use 93b0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 93c0: 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 by the test sui 93d0: 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 te... #.. 93e0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 93f0: 69 73 74 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f ists ::datetime_ 9400: 66 6f 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 format] && \.. 9410: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 9420: 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 65 74 69 length$::dateti
9430: 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20  me_format] > 0}
9440: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9450: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
9460: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 61  E: Return the ma
9470: 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65  nually overridde
9480: 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  n value for the
9490: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e  DateTime format.
94a0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
94b0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64       return $::d 94c0: 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a atetime_format.. 94d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 94e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 94f0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 # NOTE: Retur 9500: 6e 20 61 6e 20 49 53 4f 38 36 30 31 20 44 61 74 n an ISO8601 Dat 9510: 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d eTime format com 9520: 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c patible with SQL 9530: 69 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 ite,.. # 9540: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 9550: 61 2e 53 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 a.SQLite, and su 9560: 69 74 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 itable for round 9570: 2d 74 72 69 70 70 69 6e 67 20 77 69 74 68 20 74 -tripping with t 9580: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 9590: 20 20 20 20 44 61 74 65 54 69 6d 65 20 63 6c 61 DateTime cla 95a0: 73 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 ss of the framew 95b0: 6f 72 6b 2e 20 20 49 66 20 74 68 69 73 20 76 61 ork. If this va 95c0: 6c 75 65 20 69 73 20 63 68 61 6e 67 65 64 2c 0d lue is changed,. 95d0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 95e0: 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 20 6d various tests m 95f0: 61 79 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 ay fail... 9600: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 9610: 75 72 6e 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 urn "yyyy-MM-dd 9620: 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 HH:mm:ss.FFFFFFF 9630: 4b 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 K".. }.. 9640: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 9650: 65 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 enumerableToList 9660: 20 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 { enumerable } 9670: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 {.. set res 9680: 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 ult [list].... 9690: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 96a0: 6c 65 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 62 length$enumerab
96b0: 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75  le] == 0 || $enu 96c0: 6d 65 72 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c merable eq "null 96d0: 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 "} then {.. 96e0: 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c return$resul
96f0: 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  t..      }....
9700: 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
9710: 63 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24  ch -alias item $9720: 65 6e 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 enumerable {.. 9730: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 9740: 67 20 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 g length$item]
9750: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
9760: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72         lappend r
9770: 65 73 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53  esult [$item ToS 9780: 74 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 tring].. 9790: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 97a0: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
97b0: 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  lt..    }.....
97c0: 20 20 70 72 6f 63 20 63 61 74 63 68 41 6e 64 52    proc catchAndR
97d0: 65 74 75 72 6e 20 7b 20 73 63 72 69 70 74 20 7b  eturn { script {
97e0: 73 74 61 63 6b 54 72 61 63 65 20 66 61 6c 73 65  stackTrace false
97f0: 7d 20 7b 73 74 72 69 63 74 20 74 72 75 65 7d 20  } {strict true}
9800: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
9810: 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c      # NOTE: Eval
9820: 75 61 74 65 20 74 68 65 20 73 63 72 69 70 74 20  uate the script
9830: 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20  provided by our
9840: 63 61 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20  caller in their
9850: 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20  context,..
9860: 23 20 20 20 20 20 20 20 63 61 70 74 75 72 69 6e  #       capturin
9870: 67 20 62 6f 74 68 20 74 68 65 20 72 65 73 75 6c  g both the resul
9880: 74 20 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e  t and the return
9890: 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d   code...      #.
98a0: 0a 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20  .      set code
98b0: 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20  [catch {uplevel
98c0: 31 20 24 73 63 72 69 70 74 7d 20 72 65 73 75 6c  1 $script} resul 98d0: 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 t].... #.. 98e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 # NOTE: Did 98f0: 20 74 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 the script prov 9900: 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c ided by our call 9910: 65 72 20 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 er NOT raise an 9920: 65 72 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d error?.. #. 9930: 0a 20 20 20 20 20 20 69 66 20 7b 24 73 74 72 69 . if {$stri
9940: 63 74 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 30  ct && $code == 0 9950: 20 7c 7c 20 21 24 73 74 72 69 63 74 20 26 26 20 || !$strict &&
9960: 24 63 6f 64 65 20 21 3d 20 31 7d 20 74 68 65 6e  $code != 1} then 9970: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 9980: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 9990: 75 63 63 65 73 73 2e 20 20 52 65 74 75 72 6e 20 uccess. Return 99a0: 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 a list with the 99b0: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 return code and 99c0: 74 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 the result... 99d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 99e0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f return [list$co
99f0: 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20  de $result].. 9a00: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 } elseif {$st
9a10: 61 63 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 7b  ackTrace} then {
9a20: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
9a30: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69       # NOTE: Fai
9a40: 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65  lure.  Our calle
9a50: 72 20 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 73  r wants a full s
9a60: 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 20 61  tack trace (if a
9a70: 70 70 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20  pplicable),..
9a80: 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 74       #       ret
9a90: 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20  urn a list with
9aa0: 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  the return code
9ab0: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 76  and the result v
9ac0: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20  erbatim...
9ad0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
9ae0: 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20  urn [list $code 9af0: 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20$result]..
9b00: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
9b10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
9b20: 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f  OTE: Failure.  O
9b30: 75 72 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e  ur caller does n
9b40: 6f 74 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 73  ot want a full s
9b50: 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 0d 0a  tack trace (if..
9b60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
9b70: 61 70 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 74  applicable), ret
9b80: 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20  urn a list with
9b90: 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2c  the return code,
9ba0: 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20   the error..
9bb0: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 64 65      #       code
9bc0: 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 70 72   for the interpr
9bd0: 65 74 65 72 2c 20 61 6e 64 20 74 68 65 20 65 72  eter, and the er
9be0: 72 6f 72 20 6d 65 73 73 61 67 65 20 75 70 20 74  ror message up t
9bf0: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  o the..        #
9c00: 20 20 20 20 20 20 20 70 6f 69 6e 74 20 77 68 65         point whe
9c10: 72 65 20 74 68 65 20 73 74 61 63 6b 20 74 72 61  re the stack tra
9c20: 63 65 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e  ce should start.
9c30: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
9c40: 20 20 20 20 20 73 65 74 20 69 6e 64 65 78 20 5b       set index [
9c50: 73 74 72 69 6e 67 20 66 69 72 73 74 20 22 20 20  string first "
9c60: 20 61 74 20 22 20 24 72 65 73 75 6c 74 5d 3b 20   at " $result]; 9c70: 23 20 48 41 43 4b 3a 20 52 65 6c 69 61 62 6c 65 # HACK: Reliable 9c80: 3f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 ?.... ret 9c90: 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 urn [list$code
9ca0: 24 3a 3a 65 72 72 6f 72 43 6f 64 65 20 5b 65 78  $::errorCode [ex 9cb0: 70 72 20 7b 24 69 6e 64 65 78 20 21 3d 20 2d 31 pr {$index != -1
9cc0: 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   ? \..
9cd0: 20 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b    [string trim [
9ce0: 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 72 65  string range $re 9cf0: 73 75 6c 74 20 30 20 24 69 6e 64 65 78 5d 5d 20 sult 0$index]]
9d00: 3a 20 24 72 65 73 75 6c 74 7d 5d 5d 0d 0a 20 20  : $result}]].. 9d10: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 9d20: 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c . proc compil 9d30: 65 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a 20 eCSharpWith {.. 9d40: 20 20 20 20 20 20 20 20 20 20 20 74 65 78 74 20 text 9d50: 6d 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 73 memory symbols s 9d60: 74 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 72 trict resultsVar 9d70: 4e 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e 61 Name errorsVarNa 9d80: 6d 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 me fileNames.. 9d90: 20 20 20 20 20 20 20 20 20 20 61 72 67 73 20 7d args } 9da0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 9db0: 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 # NOTE: Since 9dc0: 20 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f we are going to 9dd0: 20 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f 64 use this method 9de0: 20 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73 73 name a lot, ass 9df0: 69 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 20 20 ign it to a.. 9e00: 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 # varia 9e10: 62 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 20 20 ble first... 9e20: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 61 #.. set a 9e30: 64 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 73 dd ReferencedAss 9e40: 65 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 emblies.Add.... 9e50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 9e60: 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68 65 NOTE: Create the 9e70: 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74 6f base command to 9e80: 20 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61 64 evaluate and ad 9e90: 64 20 74 68 65 20 70 72 6f 70 65 72 74 79 20 73 d the property s 9ea0: 65 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 20 23 ettings.. # 9eb0: 20 20 20 20 20 20 20 74 68 61 74 20 61 72 65 20 that are 9ec0: 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e 65 almost always ne 9ed0: 65 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69 74 eded by our unit 9ee0: 20 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68 65 tests (i.e. the 9ef0: 20 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 20 23 System.. # 9f00: 20 20 20 20 20 20 20 61 6e 64 20 53 79 73 74 65 and Syste 9f10: 6d 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79 20 m.Data assembly 9f20: 72 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 references)... 9f30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 9f40: 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 63 command [list c 9f50: 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24 74 65 ompileCSharp$te
9f60: 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79 6d 62  xt $memory$symb
9f70: 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65 73 75  ols $strict resu 9f80: 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lts \.. 9f90: 20 65 72 72 6f 72 73 20 24 61 64 64 20 53 79 73 errors$add Sys
9fa0: 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53 79 73  tem.dll $add Sys 9fb0: 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 61 64 tem.Data.dll$ad
9fc0: 64 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c  d System.Xml.dll
9fd0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
9fe0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20      # NOTE: Add
9ff0: 61 6c 6c 20 74 68 65 20 70 72 6f 76 69 64 65 64  all the provided
a000: 20 66 69 6c 65 20 6e 61 6d 65 73 20 61 73 20 61   file names as a
a010: 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e 63  ssembly referenc
a020: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  es...      #..
a030: 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
a040: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 73 20  Name $fileNames a050: 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 {.. lappe a060: 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 64 64 20 nd command$add
a070: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
a080: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20  me $fileName].. a090: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... a0a0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: a0b0: 20 41 64 64 20 74 68 65 20 65 78 74 72 61 20 61 Add the extra a a0c0: 72 67 75 6d 65 6e 74 73 2c 20 69 66 20 61 6e 79 rguments, if any a0d0: 2c 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 , to the command a0e0: 20 74 6f 20 65 76 61 6c 75 61 74 65 2e 0d 0a 20 to evaluate... a0f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 #.. ev a100: 61 6c 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 al lappend comma a110: 6e 64 20 24 61 72 67 73 0d 0a 0d 0a 20 20 20 20 nd$args....
a120: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
a130: 45 3a 20 41 6c 69 61 73 20 74 68 65 20 63 6f 6d  E: Alias the com
a140: 70 69 6c 65 72 20 6c 6f 63 61 6c 20 72 65 73 75  piler local resu
a150: 6c 74 73 20 61 6e 64 20 65 72 72 6f 72 73 20 76  lts and errors v
a160: 61 72 69 61 62 6c 65 73 20 74 6f 20 74 68 65 0d  ariables to the.
a170: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76  .      #       v
a180: 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 70 72  ariable names pr
a190: 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
a1a0: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ller...      #..
a1b0: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 72        upvar 1 $r a1c0: 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 esultsVarName re a1d0: 73 75 6c 74 73 0d 0a 20 20 20 20 20 20 75 70 76 sults.. upv a1e0: 61 72 20 31 20 24 65 72 72 6f 72 73 56 61 72 4e ar 1$errorsVarN
a1f0: 61 6d 65 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20  ame errors....
a200: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
a210: 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68  OTE: Evaluate th
a220: 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 5b 63  e constructed [c
a230: 6f 6d 70 69 6c 65 43 53 68 61 72 70 5d 20 63 6f  ompileCSharp] co
a240: 6d 6d 61 6e 64 20 61 6e 64 20 72 65 74 75 72 6e  mmand and return
a250: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
a260: 20 20 20 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20      result...
a270: 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61 6c     #..      eval
a280: 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 7d   $command.. } a290: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 ..... proc is a2a0: 4d 65 6d 6f 72 79 44 62 20 7b 20 66 69 6c 65 4e MemoryDb { fileN a2b0: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ame } {.. # a2c0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: a2d0: 49 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 Is the specified a2e0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e database file n a2f0: 61 6d 65 20 72 65 61 6c 6c 79 20 61 6e 20 69 6e ame really an in a300: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 -memory database a310: 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ?.. #.. a320: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { a330: 24 66 69 6c 65 4e 61 6d 65 20 65 71 20 22 3a 6d$fileName eq ":m
a340: 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 20  emory:" || \..
a350: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
a360: 72 61 6e 67 65 20 24 66 69 6c 65 4e 61 6d 65 20  range $fileName a370: 30 20 31 32 5d 20 65 71 20 22 66 69 6c 65 3a 3a 0 12] eq "file:: a380: 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20 20 memory:"}].. a390: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 }..... proc i a3a0: 73 54 61 62 6c 65 49 6e 44 62 20 7b 20 6e 61 6d sTableInDb { nam a3b0: 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d e {varName db} } a3c0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. a3d0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 # NOTE: Refer a3e0: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 to the specifie a3f0: 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e d variable (e.g. a400: 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f "db") in the co a410: 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 ntext of our.. a420: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c # call a430: 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 er. It contains a440: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f the database co a450: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 nnection handle a460: 74 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 that will be.. a470: 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 # used a480: 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 to execute the a490: 71 75 65 72 79 20 75 73 65 64 20 74 6f 20 64 65 query used to de a4a0: 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 6e termine if the n a4b0: 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 amed table is.. a4c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 # pre a4d0: 73 65 6e 74 20 69 6e 20 74 68 61 74 20 64 61 74 sent in that dat a4e0: 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d abase... #. a4f0: 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
a500: 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20  varName db....
a510: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
a520: 4f 54 45 3a 20 45 78 65 63 75 74 65 20 74 68 65  OTE: Execute the
a530: 20 53 51 4c 20 71 75 65 72 79 20 61 67 61 69 6e   SQL query again
a540: 73 74 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61  st the sqlite_ma
a550: 73 74 65 72 20 74 61 62 6c 65 20 74 6f 20 63 68  ster table to ch
a560: 65 63 6b 20 69 66 0d 0a 20 20 20 20 20 20 23 20  eck if..      #
a570: 20 20 20 20 20 20 74 68 65 20 6e 61 6d 65 64 20        the named
a580: 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 6e 74  table is present
a590: 20 61 6e 64 20 72 65 74 75 72 6e 20 6e 6f 6e 2d   and return non-
a5a0: 7a 65 72 6f 20 69 66 20 69 74 20 69 73 2e 0d 0a  zero if it is...
a5b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
a5c0: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 73 71  eturn [expr {[sq
a5d0: 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
a5e0: 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 5c 0d  te scalar $db \. a5f0: 0a 20 20 20 20 20 20 20 20 20 20 22 53 45 4c 45 . "SELE a600: 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d CT COUNT(*) FROM a610: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 sqlite_master W a620: 48 45 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 HERE type = 'tab a630: 6c 65 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f le' AND name = ? a640: 3b 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ;" \.. a650: 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 74 72 [list param1 Str a660: 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 7d ing$name]] > 0}
a670: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
a680: 20 70 72 6f 63 20 74 72 69 6d 53 71 6c 20 7b 20   proc trimSql {
a690: 73 71 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72  sql } {..      r
a6a0: 65 74 75 72 6e 20 5b 72 65 67 73 75 62 20 2d 61  eturn [regsub -a
a6b0: 6c 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72  ll -- {\s+} [str
a6c0: 69 6e 67 20 74 72 69 6d 20 24 73 71 6c 5d 20 22  ing trim $sql] " a6d0: 20 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 "].. }..... a6e0: 20 20 20 70 72 6f 63 20 65 78 65 63 75 74 65 53 proc executeS a6f0: 71 6c 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 74 ql { sql {execut a700: 65 20 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 6d e none} {fileNam a710: 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e ""} } {.. a720: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len a730: 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3d gth$fileName] =
a740: 3d 20 30 7d 20 74 68 65 6e 20 7b 73 65 74 20 66  = 0} then {set f
a750: 69 6c 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a  ileName :memory:
a760: 7d 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44 62  }..      setupDb
a770: 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22   $fileName "" "" a780: 20 22 22 20 22 22 20 22 22 20 66 61 6c 73 65 20 "" "" "" false a790: 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 false false fals a7a0: 65 20 6d 65 6d 44 62 0d 0a 0d 0a 20 20 20 20 20 e memDb.... a7b0: 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 try {.. a7c0: 72 65 74 75 72 6e 20 5b 73 71 6c 20 65 78 65 63 return [sql exec a7d0: 75 74 65 20 2d 65 78 65 63 75 74 65 20 24 65 78 ute -execute$ex
a7e0: 65 63 75 74 65 20 24 6d 65 6d 44 62 20 24 73 71  ecute $memDb$sq
a7f0: 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 66 69 6e 61  l]..      } fina
a800: 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 63  lly {..        c
a810: 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61  leanupDb $fileNa a820: 6d 65 20 6d 65 6d 44 62 20 66 61 6c 73 65 20 66 me memDb false f a830: 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 alse.. }.. a840: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro a850: 63 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 20 c setupDb {.. a860: 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d fileNam a870: 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 74 e {mode ""} {dat a880: 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d 20 eTimeFormat ""} a890: 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 22 {dateTimeKind "" a8a0: 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 20 } {flags ""}.. a8b0: 20 20 20 20 20 20 20 20 20 20 7b 65 78 74 72 61 {extra a8c0: 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 ""} {qualify tr a8d0: 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 65 ue} {delete true a8e0: 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a 20 } {uri false}.. a8f0: 20 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70 {temp a900: 6f 72 61 72 79 20 74 72 75 65 7d 20 7b 76 61 72 orary true} {var a910: 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 Name db} } {.. a920: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N a930: 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 OTE: First, see a940: 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 if our caller ha a950: 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 s requested an i a960: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 n-memory databas a970: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. a980: 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 set isMemory a990: 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c [isMemoryDb$fil
a9a0: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
a9b0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
a9c0: 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65   For now, all te
a9d0: 73 74 20 64 61 74 61 62 61 73 65 73 20 75 73 65  st databases use
a9e0: 64 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  d by the test su
a9f0: 69 74 65 20 61 72 65 20 70 6c 61 63 65 64 0d 0a  ite are placed..
aa00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
aa10: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database
aa20: 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61 63 68  directory.  Each
aa30: 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 72 65   database and re
aa40: 6c 61 74 65 64 20 66 69 6c 65 73 0d 0a 20 20 20  lated files..
aa50: 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20     #       used
aa60: 62 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c 64  by a test should
aa70: 20 62 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62   be cleaned up b
aa80: 79 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e  y that test usin
aa90: 67 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  g the..      #
aaa0: 20 20 20 20 20 22 63 6c 65 61 6e 75 70 44 62 22       "cleanupDb"
aab0: 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f   procedure, belo
aac0: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
aad0: 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72     if {!$isMemor aae0: 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 y &&$qualify} t
aaf0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
ab00: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
ab10: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
ab20: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66  aseDirectory] [f
ab30: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa ab40: 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d me]].. }... ab50: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. ab60: 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 # NOTE: By defau ab70: 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70 lt, delete any p ab80: 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 re-existing data ab90: 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61 base with the sa aba0: 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 me file.. # abb0: 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 69 name if i abc0: 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73 t currently exis abd0: 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ts... #.. abe0: 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f if {!$isMemo
abf0: 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26  ry && $delete && ac00: 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 [file exists$f
ac10: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
ac20: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
ac30: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
ac40: 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 61  empt to delete a
ac50: 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  ny pre-existing
ac60: 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68  database with th
ac70: 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20  e same file..
ac80: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d       #       nam
ac90: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
aca0: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
acb0: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $acc0: 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d fileName} error] acd0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. ace0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. acf0: 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 # NOTE: We some ad00: 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 how failed to de ad10: 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 lete the file, r ad20: 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... ad30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. ad40: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
ad50: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
ad60: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
ad70: 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
ad80: 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64  ING: failed to d
ad90: 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66  elete database f
ada0: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam adb0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. adc0: 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73 65 "\" during se add0: 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e tup, error: " \n ade0: 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
adf0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
ae00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
ae10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
ae20: 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
ae30: 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
ae40: 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
ae50: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
ae60: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
ae70: 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65  ler.  The handle
ae80: 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20 64   to the opened d
ae90: 61 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20  atabase will be
aea0: 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20  stored there...
aeb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70       #..      up
aec0: 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64  var 1 $varName d aed0: 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 b.... #.. aee0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 # NOTE: Star aef0: 74 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 63 t building the c af00: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string af10: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 . The only requ af20: 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 ired portion.. af30: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t af40: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st af50: 72 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 61 ring is the data af60: 20 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 63 source, which c af70: 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 ontains the.. af80: 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 # datab af90: 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 74 ase file name it afa0: 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 61 self. If our ca afb0: 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 73 ller wants to us afc0: 65 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 20 e a URI as.. afd0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 61 # the da afe0: 74 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 74 ta source, use t aff0: 68 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 he FullUri conne b000: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f ction string pro b010: 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 20 perty to.. b020: 23 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 # prevent b030: 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 20 the data source b040: 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 6e string from bein b050: 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 g mangled... b060: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
b070: 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  uri} then {..
b080: 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74       set connect
b090: 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b 66  ion {FullUri=${f b0a0: 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 ileName}}.. b0b0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. b0c0: 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f set connectio b0d0: 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d 24 n {Data Source=$
b0e0: 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20  {fileName}}..
b0f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
b100: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
b110: 69 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65 64  ince this proced
b120: 75 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63 69  ure has no speci
b130: 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20  al knowledge of
b140: 77 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  what the default
b150: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
b160: 73 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20 74  setting is for t
b170: 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63 6f  he ToFullPath co
b180: 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
b190: 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73 0d  propery, always.
b1a0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
b1b0: 64 64 20 74 68 65 20 76 61 6c 75 65 20 77 65 20  dd the value we
b1c0: 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74 68  know about to th
b1d0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
b1e0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ing...      #..
b1f0: 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e       append conn
b200: 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50  ection {;ToFullP
b210: 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d 0d  ath=${qualify}}. b220: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. b230: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 # NOTE: If our b240: 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 caller specifie b250: 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 d a journal mode b260: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 , add the necess b270: 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 ary portion.. b280: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th b290: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str b2a0: 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ing now... b2b0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st b2c0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 ring length$mod
b2d0: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
b2e0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63          append c
b2f0: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72  onnection {;Jour
b300: 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d  nal Mode=${mode} b310: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... b320: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N b330: 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c OTE: If our call b340: 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44 er specified a D b350: 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c 20 ateTime format, b360: 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 add the necessar b370: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # b380: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 portion of the b390: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin b3a0: 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d g now... #. b3b0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri b3c0: 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 ng length$dateT
b3d0: 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d 20  imeFormat] > 0}
b3e0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
b3f0: 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  append connectio
b400: 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d  n {;DateTimeForm
b410: 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f 72  at=${dateTimeFor b420: 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a mat}}.. }.. b430: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. b440: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 # NOTE: If our b450: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified b460: 20 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2c a DateTimeKind, b470: 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 add the necessa b480: 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 ry portion.. b490: 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 # of the b4a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri b4b0: 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # b4c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str b4d0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 ing length$date
b4e0: 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20 74  TimeKind] > 0} t
b4f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
b500: 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ppend connection
b510: 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d   {;DateTimeKind=
b520: 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d 7d  ${dateTimeKind}} b530: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... b540: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO b550: 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 TE: If there are b560: 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 any global (per b570: 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 test run) conne b580: 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 ction flags curr b590: 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 ently.. # b5a0: 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 set, use th b5b0: 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 em now (i.e. by b5c0: 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 combining them w b5d0: 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 ith the ones for b5e0: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 this.. # b5f0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 connection) b600: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. b610: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis b620: 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f ts ::connection_ b630: 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 20 flags] && \.. b640: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l b650: 65 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 ength$::connect
b660: 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d 20  ion_flags] > 0}
b670: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
b680: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
b690: 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67  E: Show (and log
b6a0: 29 20 74 68 61 74 20 77 65 20 64 65 74 65 63 74  ) that we detect
b6b0: 65 64 20 73 6f 6d 65 20 67 6c 6f 62 61 6c 20 63  ed some global c
b6c0: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e  onnection flags.
b6d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
b6e0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te b6f0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe b700: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. b710: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 "---- glob b720: 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c al connection fl b730: 61 67 73 20 64 65 74 65 63 74 65 64 3a 20 22 20 ags detected: " b740: 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c$::connection_fl
b750: 61 67 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ags \n]....
b760: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
b770: 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 6e  NOTE: Combine an
b780: 64 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68 65  d/or replace the
b790: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
b7a0: 73 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 20  s and then show
b7b0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
b7c0: 20 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e 0d       new value..
b7d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
b7e0: 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63      set flags [c
b7f0: 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61  ombineFlags $fla b800: 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e gs$::connection
b810: 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 20  _flags]....
b820: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test b830: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append b840: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. b850: 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e "---- combin b860: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c ed connection fl b870: 61 67 73 20 61 72 65 3a 20 22 20 24 66 6c 61 67 ags are: "$flag
b880: 73 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  s \n]..      }..
b890: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
b8a0: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20   # NOTE: If our
b8b0: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64  caller specified
b8c0: 20 73 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e   some SQLiteConn
b8d0: 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64  ectionFlags, add
b8e0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
b8f0: 20 20 20 20 6e 65 63 65 73 73 61 72 79 20 70 6f      necessary po
b900: 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  rtion of the con
b910: 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e  nection string n
b920: 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ow...      #..
b930: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
b940: 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e  length $flags] > b950: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. b960: 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 append conne b970: 63 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b ction {;Flags=${
b980: 66 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d  flags}}..      }
b990: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
b9a0: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75     # NOTE: If ou
b9b0: 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69  r caller specifi
b9c0: 65 64 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c  ed an extra payl
b9d0: 6f 61 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65  oad to the conne
b9e0: 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20  ction..      #
b9f0: 20 20 20 20 20 73 74 72 69 6e 67 2c 20 61 70 70       string, app
ba00: 65 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20  end it now...
ba10: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
ba20: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $ba30: 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e extra] > 0} then ba40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 {.. appe ba50: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b nd connection \; ba60: 20 24 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d$extra..      }
ba70: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
ba80: 20 20 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20     # NOTE: Open
ba90: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
baa0: 6e 65 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61  nection now, pla
bab0: 63 69 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20  cing the opaque
bac0: 68 61 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20  handle value..
bad0: 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f      #       into
bae0: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 73 70   the variable sp
baf0: 65 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63  ecified by our c
bb00: 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d  aller...      #.
bb10: 0a 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 73  .      set db [s
bb20: 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51  ql open -type SQ
bb30: 4c 69 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e  Lite [subst $con bb40: 6e 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 nection]].... bb50: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO bb60: 54 45 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 TE: Configure th bb70: 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 e temporary dire bb80: 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 ctory for the ne bb90: 77 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 wly opened datab bba0: 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ase.. # bbb0: 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f connection no bbc0: 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c w unless our cal bbd0: 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d ler forbids it.. bbe0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. bbf0: 69 66 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 if {$temporary &
bc00: 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  & ![info exists
bc10: 3a 3a 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72  ::no(setTemporar
bc20: 79 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68  yDirectory)]} th
bc30: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71  en {..        sq
bc40: 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61  l execute $db [a bc50: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. bc60: 20 20 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 "PRAGMA bc70: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 temp_store_dire bc80: 63 74 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 ctory = \"" [get bc90: 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f TemporaryDirecto bca0: 72 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 ry] \"\;].. bcb0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. bcc0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 # NOTE: Alw bcd0: 61 79 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 ays return the c bce0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 onnection handle bcf0: 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a upon success... bd00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r bd10: 65 74 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d eturn$db..    }
bd20: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
bd30: 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20  tDbConnection {
bd40: 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b  {varName db} } {
bd50: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
bd60: 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
bd70: 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
bd80: 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
bd90: 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74  db") in the cont
bda0: 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20  ext of our..
bdb0: 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72    #       caller
bdc0: 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f  .  The handle to
bdd0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 72   the database pr
bde0: 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened
bdf0: 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23  via the..      #
be00: 20 20 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d         [setupDb]
be10: 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c   procedure shoul
be20: 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72  d be stored ther
be30: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
be40: 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN be50: 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 ame db.... be60: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: be70: 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 This returns th be80: 65 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e e ADO.NET IDbCon be90: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 nection object i bea0: 6e 73 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d nstance for the. beb0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s bec0: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 73 65 pecified databse bed0: 20 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 handle. Since bee0: 67 65 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a getting this obj bef0: 65 63 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d ect relies upon. bf00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E bf10: 61 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 agle internals, bf20: 67 72 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c great care shoul bf30: 64 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 d be taken to av bf40: 6f 69 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 oid disposing of bf50: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # bf60: 74 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f this object or o bf70: 74 68 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 therwise putting bf80: 20 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 it into an inva bf90: 6c 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 lid state... bfa0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ bfb0: 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d info exists db]} bfc0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. bfd0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f o bff0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl c000: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d ags +NonPublic - c010: 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 objectflags +NoD c020: 69 73 70 6f 73 65 20 5c 0d 0a 20 20 20 20 20 20 ispose \.. c030: 20 20 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 -alias c040: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 Interpreter.Get c050: 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f Active.connectio c060: 6e 73 20 49 74 65 6d 20 24 64 62 7d 20 5c 0d 0a ns Item$db} \..
c070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c080: 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68  result] == 0} th
c090: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
c0a0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
c0b0: 4f 54 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65  OTE: Success, re
c0c0: 74 75 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20  turn the opaque
c0d0: 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a  object handle...
c0e0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
c0f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72         return $r c100: 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d esult.. } c110: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. c120: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. c130: 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c # NOTE: Failure, c140: 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 report why... c150: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. c160: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
c170: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
c180: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
c190: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
c1a0: 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
c1b0: 20 67 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   get connection
c1c0: 68 61 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62  handle for datab
c1d0: 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ase \"" \..
c1e0: 20 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22           $db "\" c1f0: 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t c200: 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
c210: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
c220: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
c230: 72 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e 65 63  roc freeDbConnec
c240: 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20  tion { {varName
c250: 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d  connection} } {.
c260: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
c270: 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f  # NOTE: Refer to
c280: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
c290: 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63  ariable (e.g. "c
c2a0: 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74  onnection") in t
c2b0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
c2c0: 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72    context of our
c2d0: 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70   caller.  The op
c2e0: 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64  aque object hand
c2f0: 6c 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45  le for an ADO.NE
c300: 54 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  T..      #
c310: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76   connection prev
c320: 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20  iously returned
c330: 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74  by [getDbConnect
c340: 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a  ion] should be..
c350: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74        #       st
c360: 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20  ored there...
c370: 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61     #..      upva
c380: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e  r 1 $varName con c390: 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 nection.... c3a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE c3b0: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6d : Attempt to rem c3c0: 6f 76 65 20 74 68 65 20 6f 70 61 71 75 65 20 6f ove the opaque o c3d0: 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 72 6f bject handle fro c3e0: 6d 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 m the interprete c3f0: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # c400: 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a now. This [obj c410: 65 63 74 20 64 69 73 70 6f 73 65 5d 20 63 61 6c ect dispose] cal c420: 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 l will not actua c430: 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 20 74 lly dispose of t c440: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # c450: 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a underlying obj c460: 65 63 74 20 62 65 63 61 75 73 65 20 74 68 65 20 ect because the c470: 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 20 +NoDispose flag c480: 77 61 73 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 was set on it.. c490: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72 # dur c4a0: 69 6e 67 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 ing creation of c4b0: 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 the opaque objec c4c0: 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 t handle... c4d0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i c4e0: 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 nfo exists conne c4f0: 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 ction] && \.. c500: 20 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 6f [catch {o c510: 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 24 63 bject dispose$c
c520: 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72  onnection} error
c530: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
c540: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
c550: 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
c560: 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76   failed to remov
c570: 65 20 74 68 65 20 68 61 6e 64 6c 65 2c 20 72 65  e the handle, re
c580: 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20  port why...
c590: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
c5a0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan c5b0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs c5c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " c5d0: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa c5e0: 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 iled to remove c c5f0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 onnection handle c600: 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e \""$connection
c610: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
c620: 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  "\", error: " \n
c630: 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. c640: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... c650: 0d 0a 20 20 20 20 70 72 6f 63 20 61 64 64 44 62 .. proc addDb c660: 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e Connection { con c670: 6e 65 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 nection {varName c680: 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 db} } {.. c690: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: c6a0: 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 Refer to the sp c6b0: 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 ecified variable c6c0: 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 (e.g. "db") in c6d0: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f the context of o c6e0: 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ur.. # c6f0: 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 caller... c700: 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar c710: 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
c720: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
c730: 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 61  # NOTE: Create a
c740: 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d 61   correctly forma
c750: 74 74 65 64 20 6e 61 6d 65 20 66 6f 72 20 74 68  tted name for th
c760: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
c770: 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20  ction to..
c780: 23 20 20 20 20 20 20 20 62 65 20 61 64 64 65 64  #       be added
c790: 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6d 61 6e   to the list man
c7a0: 61 67 65 64 20 62 79 20 74 68 65 20 45 61 67 6c  aged by the Eagl
c7b0: 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  e interpreter...
c7c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
c7d0: 65 74 20 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e  et db [object in
c7e0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
c7f0: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
c800: 20 20 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f      Eagle._Compo
c810: 6e 65 6e 74 73 2e 50 72 69 76 61 74 65 2e 46 6f  nents.Private.Fo
c820: 72 6d 61 74 4f 70 73 20 44 61 74 61 62 61 73 65  rmatOps Database
c830: 4f 62 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e  ObjectName $conn c840: 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 ection \.. c850: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 SQLiteConnec c860: 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 tion [object inv c870: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e oke Interpreter. c880: 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 GetActive NextId c890: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ]].... #.. c8a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 # NOTE: Add c8b0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f the database co c8c0: 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 nnection provide c8d0: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 d by our caller c8e0: 74 6f 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 to the list.. c8f0: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th c900: 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 ose known to the c910: 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 Eagle interpret c920: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 er... #.. c930: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok c940: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub c950: 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65 72 2e lic Interpreter. c960: 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 GetActive.connec c970: 74 69 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 tions Add \.. c980: 20 20 20 20 20 20 20 24 64 62 20 24 63 6f 6e 6e$db $conn c990: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c ection.. }... c9a0: 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e .. proc clean c9b0: 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 upDb { fileName c9c0: 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f {varName db} {co c9d0: 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 llect true} {qua c9e0: 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 lify true}.. c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ca00: 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d {delete true} } ca10: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. ca20: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem ca30: 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 pt to force all ca40: 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 pending "garbage ca50: 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 " objects to be ca60: 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 collected,.. ca70: 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 # includ ca80: 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 ing SQLite state ca90: 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 ments and backup caa0: 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 objects; this s cab0: 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 hould allow.. cac0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 # the u cad0: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 nderlying databa cae0: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 se file to be de caf0: 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d leted... #. cb00: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c . if {$coll
cb10: 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ect} then {..
cb20: 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62       collectGarb
cb30: 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  age $::test_chan cb40: 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a nel.. }.... cb50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # cb60: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 NOTE: Refer to cb70: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 the specified va cb80: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 riable (e.g. "db cb90: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 ") in the contex cba0: 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 t of our.. cbb0: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 # caller. cbc0: 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 The handle to t cbd0: 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 he database prev cbe0: 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 iously opened vi cbf0: 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 a the.. # cc00: 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 [setupDb] p cc10: 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 rocedure should cc20: 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e be stored there. cc30: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. cc40: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
cc50: 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  e db....      #.
cc60: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
cc70: 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74  lose the connect
cc80: 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62  ion to the datab
cc90: 61 73 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73  ase now.  This s
cca0: 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a  hould allow us..
ccb0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
ccc0: 20 64 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65   delete the unde
ccd0: 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20  rlying database
cce0: 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  file...      #..
ccf0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
cd00: 65 78 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63  exists db] && [c
cd10: 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20  atch {sql close
cd20: 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65  $db} error]} the cd30: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. cd40: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: cd50: 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 We somehow faile cd60: 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64 d to close the d cd70: 61 74 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20 atabase, report cd80: 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d why... #. cd90: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
cda0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
cdb0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
cdc0: 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
cdd0: 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
cde0: 74 6f 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73  to close databas
cdf0: 65 20 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65  e \"" $db "\", e ce00: 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 rror: " \.. ce10: 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 \n\t$err
ce20: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  or \n]..      }.
ce30: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
ce40: 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c    # NOTE: First,
ce50: 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c   see if our call
ce60: 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64  er has requested
ce70: 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61   an in-memory da
ce80: 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23  tabase...      #
ce90: 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65  ..      set isMe
cea0: 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62  mory [isMemoryDb
ceb0: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... cec0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # ced0: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 NOTE: Build the cee0: 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65 full path to the cef0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e database file n cf00: 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61 ame. For now, a cf10: 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23 ll test.. # cf20: 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 database cf30: 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64 files are stored cf40: 20 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72 in the temporar cf50: 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 y directory... cf60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if cf70: 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 {!$isMemory && $cf80: 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d qualify} then {. cf90: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c . set fil cfa0: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e eName [file join cfb0: 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 [getDatabaseDir cfc0: 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 ectory] [file ta cfd0: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a il$fileName]]..
cfe0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
cff0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
d000: 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66  : Check if the f
d010: 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73  ile still exists
d020: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
d030: 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79    if {!$isMemory d040: 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b &&$delete && [
d050: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil d060: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. d070: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d080: 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip d090: 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 deleting databas d0a0: 65 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 e files if someb d0b0: 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f ody sets the glo d0c0: 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 bal.. # d0d0: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f variable to d0e0: 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 prevent it... d0f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. d100: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis d110: 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44 ts ::no(cleanupD d120: 62 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d bFile)]} then {. d130: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. d140: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: d150: 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 Attempt to delet d160: 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62 e the test datab d170: 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 ase file now... d180: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. d190: 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 if {[set c d1a0: 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 ode [catch {file d1b0: 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d delete$fileNam
d1c0: 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e  e} error]]} then
d1d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
d1e0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
d1f0: 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f   NOTE: We someho
d200: 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65  w failed to dele
d210: 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70  te the file, rep
d220: 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20  ort why...
d230: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
d240: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te d250: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe d260: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. d270: 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== d280: 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed d290: 74 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 to delete databa d2a0: 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c se file \""$fil
d2b0: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
d2c0: 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72           "\" dur
d2d0: 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72  ing cleanup, err
d2e0: 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro d2f0: 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 r \n].. d300: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c }.. } el d310: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. d320: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N d330: 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 OTE: Show that w d340: 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 e skipped deleti d350: 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 ng the file... d360: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d370: 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d set code 0. d380: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 ... tpu d390: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
d3a0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
d3b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
d3c0: 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73  "==== WARNING: s
d3d0: 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20  kipped deleting
d3e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22  database file \"
d3f0: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  " $fileName \.. d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" d410: 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c during cleanup\ d420: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. d430: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. d440: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d450: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 # NOTE: The f d460: 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 ile does not exi d470: 73 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 st, success!.. d480: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. d490: 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 set code 0.. d4a0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re d4b0: 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 turn$code..
d4c0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73  }.....    proc s
d4d0: 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43  etupDbInterruptC
d4e0: 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65  allback { channe
d4f0: 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20  l log } {..
d500: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel d510: 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 "---- setting up d520: 20 64 65 62 75 67 67 65 72 20 69 6e 74 65 72 72 debugger interr d530: 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 upt callback... d540: 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ".... if {[ d550: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. d560: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO d570: 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 TE: Make sure th d580: 65 20 73 63 72 69 70 74 20 64 65 62 75 67 67 65 e script debugge d590: 72 20 61 6e 64 20 74 68 65 20 69 73 6f 6c 61 74 r and the isolat d5a0: 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 ed interpreter a d5b0: 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 re.. # d5c0: 20 20 20 20 73 65 74 75 70 20 61 6e 64 20 72 65 setup and re d5d0: 61 64 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20 ady for use... d5e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. d5f0: 20 64 65 62 75 67 20 73 65 74 75 70 20 74 72 75 debug setup tru d600: 65 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 e true.... d610: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N d620: 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 OTE: Load the ne d630: 63 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 cessary packages d640: 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 into the isolat d650: 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d ed interpreter.. d660: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. d670: 20 20 20 20 64 65 62 75 67 20 65 76 61 6c 20 7b debug eval { d680: 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b .. pack d690: 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c age require Eagl d6a0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 e.. pac d6b0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 kage require Eag d6c0: 6c 65 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 20 le.Library.. d6d0: 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 package re d6e0: 71 75 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 quire Eagle.Test d6f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... d700: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. d710: 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 # NOTE: Copy t d720: 68 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 he necessary var d730: 69 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 iables into the d740: 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 isolated interpr d750: 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 eter... # d760: 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 .. debug d770: 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 invoke 0 set ::t d780: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 61 est_channel$cha
d790: 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46 6f  nnel; # NOTE: Fo
d7a0: 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20 20  r [tputs]...
d7b0: 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65      debug invoke
d7c0: 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c 6f   0 set ::test_lo
d7d0: 67 20 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a 20  g $log; # NOTE: d7e0: 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 For [tlog]..... d7f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. d800: 20 20 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c # NOTE: Instal d810: 6c 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 l the callback s d820: 63 72 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c cript to be eval d830: 75 61 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f uated in the iso d840: 6c 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 23 lated.. # d850: 20 20 20 20 20 20 20 69 6e 74 65 72 70 72 65 74 interpret d860: 65 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74 er when this int d870: 65 72 70 72 65 74 65 72 20 69 73 20 69 6e 74 65 erpreter is inte d880: 72 72 75 70 74 65 64 20 62 79 20 73 63 72 69 70 rrupted by scrip d890: 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # d8a0: 20 20 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c cancellation, d8b0: 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 23 etc... # d8c0: 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 .. debug d8d0: 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b callback apply { d8e0: 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 {sender e} {.. d8f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d900: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che d910: 63 6b 20 69 66 20 74 68 69 73 20 63 61 6c 6c 62 ck if this callb d920: 61 63 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 ack is one that d930: 77 65 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a we care about... d940: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. d950: 20 20 20 20 20 20 20 69 66 20 7b 22 43 61 6e 63 if {"Canc d960: 65 6c 65 64 22 20 69 6e 20 5b 73 70 6c 69 74 20 eled" in [split d970: 5b 24 65 20 49 6e 74 65 72 72 75 70 74 54 79 70 [$e InterruptTyp
d980: 65 5d 20 22 2c 20 22 5d 7d 20 74 68 65 6e 20 7b  e] ", "]} then {
d990: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
d9a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
d9b0: 4f 54 45 3a 20 49 74 65 72 61 74 65 20 74 68 72  OTE: Iterate thr
d9c0: 6f 75 67 68 20 61 6c 6c 20 64 61 74 61 62 61 73  ough all databas
d9d0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e  e connections kn
d9e0: 6f 77 6e 20 74 6f 20 74 68 65 0d 0a 20 20 20 20  own to the..
d9f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
da00: 70 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74  parent interpret
da10: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er...
da20: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
da30: 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d  object foreach -
da40: 61 6c 69 61 73 20 70 61 69 72 20 5c 0d 0a 20 20  alias pair \..
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f                [o
da60: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
da70: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 24  ags +NonPublic $da80: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 63 6f e Interpreter.co da90: 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 nnections] {.. daa0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N dac0: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to dad0: 63 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 cancel any SQL q dae0: 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 ueries in progre daf0: 73 73 20 6f 6e 20 74 68 69 73 0d 0a 20 20 20 20 ss on this.. db00: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # db10: 20 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 database conne db20: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 ction... db30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. db40: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc db50: 68 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43 h {$pair Value.C
db60: 61 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74  ancel} error]} t
db70: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
db80: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: db90: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap dba0: 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 pendArgs \n \.. dbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 dbc0: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING dbd0: 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61 6e 63 : failed to canc dbe0: 65 6c 20 71 75 65 72 79 20 66 6f 72 20 63 6f 6e el query for con dbf0: 6e 65 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 nection \"" \.. dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 dc10: 20 20 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 [$pair Key] "
dc20: 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  \", error: " \n\
dc30: 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. dc40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. dc50: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. dc60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. dc70: 20 20 20 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }}.. } e dc80: 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e rror] == 0} then dc90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 {.. addC dca0: 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72 onstraint interr dcb0: 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 uptCallback.sqli dcc0: 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 te3.... t dcd0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 puts$channel ye
dce0: 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  s\n..      } els
dcf0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
dd00: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app dd10: 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 endArgs "no, err dd20: 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
dd30: 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  r \n]..      }..
dd40: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
dd50: 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b  oc cleanupFile {
dd60: 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65   fileName {colle
dd70: 63 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20  ct true} {force
dd80: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
dd90: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
dda0: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f  E: Attempt to fo
ddb0: 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20  rce all pending
ddc0: 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74  "garbage" object
ddd0: 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65  s to be collecte
dde0: 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  d,..      #
ddf0: 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69    including SQLi
de00: 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e  te statements an
de10: 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73  d backup objects
de20: 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c  ; this should al
de30: 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20  low..      #
de40: 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e     the underlyin
de50: 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  g database file
de60: 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a  to be deleted...
de70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
de80: 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65  f {$collect} the de90: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c n {.. col dea0: 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 lectGarbage$::t
deb0: 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  est_channel..
dec0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
ded0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
dee0: 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65  heck if the file
def0: 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a   still exists...
df00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
df10: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
df20: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then df30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. df40: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S df50: 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73 kip deleting tes df60: 74 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 t files if someb df70: 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f ody sets the glo df80: 62 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 bal variable.. df90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f # to dfa0: 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 prevent it... dfb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. dfc0: 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 if {$force || !
dfd0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
dfe0: 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d  o(cleanupFile)]}
dff0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
e000: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
e010: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
e020: 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65  to delete the te
e030: 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20  st file now...
e040: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
e050: 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f       if {[set co
e060: 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20  de [catch {file
e070: 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65  delete $fileName e080: 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 } error]]} then e090: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {.. # e0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # e0b0: 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 NOTE: We somehow e0c0: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet e0d0: 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f e the file, repo e0e0: 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... e0f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. e100: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
e110: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
e120: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
e130: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
e140: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
e150: 6f 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69  o delete test fi
e160: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName e170: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. e180: 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c e190: 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 leanup, error: " e1a0: 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
e1b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
e1c0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
e1d0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
e1e0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
e1f0: 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69  Show that we ski
e200: 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68  pped deleting th
e210: 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  e file...
e220: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
e230: 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20  set code 0....
e240: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: e250: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a e260: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. e270: 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== e280: 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 WARNING: skippe e290: 64 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 d deleting test e2a0: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 file \""$fileNa
e2b0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
e2c0: 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63      "\" during c
e2d0: 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20  leanup\n"]..
e2e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
e2f0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
e300: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
e310: 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20  : The file does
e320: 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65  not exist, succe
e330: 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ss!..        #..
e340: 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65          set code
e350: 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   0..      }....
e360: 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64       return $cod e370: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... e380: 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72 proc collectGar e390: 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b bage { channel { e3a0: 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30 milliseconds 100 e3b0: 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20 0} {quiet true} e3c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b } {.. if {[ e3d0: 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e catch {object in e3e0: 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c voke GC GetTotal e3f0: 4d 65 6d 6f 72 79 20 66 61 6c 73 65 7d 20 72 65 Memory false} re e400: 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then e410: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { e420: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
e430: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
e440: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen e450: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. e460: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d "---- mem e470: 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 ory in use by th e480: 65 20 43 4c 52 20 62 65 66 6f 72 65 20 63 6f 6c e CLR before col e490: 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a lection... " \.. e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72$r
e4b0: 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22  esult " bytes\n"
e4c0: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
e4d0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
e4e0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha e4f0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs e500: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. e510: 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f e520: 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 ailed to get CLR e530: 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 memory usage, e e540: 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 rror: " \.. e550: 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 \n\t$res
e560: 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  ult \n]..      }
e570: 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23 23  ....      ######
e580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e5a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e5b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e5c0: 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  ###....      #..
e5d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
e5e0: 70 65 61 74 65 64 6c 79 20 61 74 74 65 6d 70 74  peatedly attempt
e5f0: 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62   to collect garb
e600: 61 67 65 20 75 6e 74 69 6c 20 74 68 65 20 61 6c  age until the al
e610: 6c 6f 74 74 65 64 20 6e 75 6d 62 65 72 0d 0a 20  lotted number..
e620: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20       #       of
e630: 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 68 61 73  milliseconds has
e640: 20 65 6c 61 70 73 65 64 2e 20 20 41 6c 77 61 79   elapsed.  Alway
e650: 73 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c  s attempt to col
e660: 6c 65 63 74 20 67 61 72 62 61 67 65 0d 0a 20 20  lect garbage..
e670: 20 20 20 20 23 20 20 20 20 20 20 20 61 74 20 6c      #       at l
e680: 65 61 73 74 20 6f 6e 63 65 2e 0d 0a 20 20 20 20  east once...
e690: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73    #..      set s
e6a0: 74 61 72 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f  tart [clock seco
e6b0: 6e 64 73 5d 0d 0a 20 20 20 20 20 20 73 65 74 20  nds]..      set
e6c0: 73 74 6f 70 20 5b 65 78 70 72 20 7b 24 73 74 61  stop [expr {$sta e6d0: 72 74 20 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f rt + ($milliseco
e6e0: 6e 64 73 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d  nds / 1000)}]...
e6f0: 0a 20 20 20 20 20 20 64 6f 20 7b 0d 0a 20 20 20  .      do {..
e700: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
e710: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
e720: 74 6f 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20  to force a full
e730: 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69  garbage collecti
e740: 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20  on now.  Report
e750: 61 6e 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  any..        #
e760: 20 20 20 20 20 65 72 72 6f 72 20 74 68 61 74 20       error that
e770: 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69  is encountered i
e780: 66 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20  f we fail...
e790: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
e7a0: 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63  f {[catch {objec
e7b0: 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54  t invoke GC GetT
e7c0: 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 7d  otalMemory true}
e7d0: 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
e7e0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
e7f0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen e800: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. e810: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR e820: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 66 75 6c NING: failed ful e830: 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 l garbage collec e840: 74 69 6f 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c tion, error: " \ e850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e860: 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
e870: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
e880: 20 20 20 20 20 20 73 65 74 20 6e 6f 77 20 5b 63        set now [c
e890: 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20  lock seconds]..
e8a0: 20 20 20 20 20 7d 20 77 68 69 6c 65 20 7b 24 73       } while {$s e8b0: 74 61 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20 tart <=$now &&
e8c0: 24 6e 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 0d  $now <$stop}...
e8d0: 0a 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23  .      #########
e8e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e8f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e900: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e920: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
e930: 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76  atch {object inv
e940: 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d  oke GC GetTotalM
e950: 65 6d 6f 72 79 20 66 61 6c 73 65 7d 20 72 65 73  emory false} res
e960: 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ult] == 0} then
e970: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  {..        if {!
e980: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. e990: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs e9a0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
e9b0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
e9c0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f        "---- memo
e9d0: 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65  ry in use by the
e9e0: 20 43 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c 65   CLR after colle
e9f0: 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20  ction... " \..
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73              $res ea10: 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d ult " bytes\n"]. ea20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. ea30: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. ea40: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
ea50: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
ea60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d  ..            "=
ea70: 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
ea80: 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d  led to get CLR m
ea90: 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72  emory usage, err
eaa0: 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
eab0: 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c       \n\t $resul eac0: 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a t \n].. }.. ead0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr eae0: 6f 63 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 oc getSQLiteHand eaf0: 6c 65 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e leCounts { chann eb00: 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d el {quiet false} eb10: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set eb20: 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d result [list]... eb30: 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 . if {[have eb40: 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 Constraint \.. eb50: 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 defi eb60: 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 neConstant.Syste eb70: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 43 4f m.Data.SQLite.CO eb80: 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 UNT_HANDLE]} the eb90: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. eba0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: ebb0: 41 64 64 20 65 61 63 68 20 63 72 69 74 69 63 61 Add each critica ebc0: 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 l handle count t ebd0: 6f 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 o the resulting ebe0: 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 list... # ebf0: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 .. foreac ec00: 68 20 6e 61 6d 65 20 5b 6c 69 73 74 20 63 6f 6e h name [list con ec10: 6e 65 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 nectionCount sta ec20: 74 65 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b tementCount back ec30: 75 70 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 upCount] {.. ec40: 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 set value ec50: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d [object invoke - ec60: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic ec70: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. ec80: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ ec90: 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 Lite.UnsafeNativ eca0: 65 4d 65 74 68 6f 64 73 20 24 6e 61 6d 65 5d 0d eMethods$name].
ecb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
ecc0: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { ecd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp ece0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
ecf0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
ed00: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
ed10: 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c  - critical handl
ed20: 65 20 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d  e count \"" $nam ed30: 65 20 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75 e "\" is "$valu
ed40: 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  e \n]..
ed50: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
ed60: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24  lappend result $ed70: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7d value.. } ed80: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif ed90: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
eda0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
edb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
edc0: 65 20 61 63 74 75 61 6c 20 68 61 6e 64 6c 65 20  e actual handle
edd0: 63 6f 75 6e 74 73 20 61 72 65 20 6e 6f 74 20 61  counts are not a
ede0: 76 61 69 6c 61 62 6c 65 3b 20 74 68 65 72 65 66  vailable; theref
edf0: 6f 72 65 2c 20 6a 75 73 74 0d 0a 20 20 20 20 20  ore, just..
ee00: 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72     #       retur
ee10: 6e 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 2e  n an empty list.
ee20: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
ee30: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan ee40: 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 nel "---- critic ee50: 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 al handle counts ee60: 20 75 6e 61 76 61 69 6c 61 62 6c 65 5c 6e 22 0d unavailable\n". ee70: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... ee80: 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
ee90: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
eea0: 70 72 6f 63 20 73 68 75 74 64 6f 77 6e 53 51 4c  proc shutdownSQL
eeb0: 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 66  ite { channel {f
eec0: 6f 72 63 65 20 66 61 6c 73 65 7d 20 7b 71 75 69  orce false} {qui
eed0: 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  et false} } {..
eee0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
eef0: 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20  NOTE: Make sure
ef00: 74 68 61 74 20 53 51 4c 69 74 65 20 63 6f 72 65  that SQLite core
ef10: 20 6c 69 62 72 61 72 79 20 69 73 20 63 6f 6d 70   library is comp
ef20: 6c 65 74 65 6c 79 20 73 68 75 74 64 6f 77 6e 2e  letely shutdown.
ef30: 20 20 54 68 69 73 0d 0a 20 20 20 20 20 20 23 20    This..      #
ef40: 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79        is used by
ef50: 20 74 65 73 74 73 20 74 68 61 74 20 63 68 61 6e   tests that chan
ef60: 67 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ge configuration
ef70: 20 6f 70 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20   options and/or
ef80: 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 23 20 20  those..      #
ef90: 20 20 20 20 20 74 68 61 74 20 6e 65 65 64 20 74       that need t
efa0: 6f 20 6d 61 6b 65 20 73 75 72 65 20 6c 6f 67 67  o make sure logg
efb0: 69 6e 67 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  ing is initializ
efc0: 65 64 20 28 69 2e 65 2e 20 6a 75 73 74 20 69 6e  ed (i.e. just in
efd0: 20 63 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20   case..      #
efe0: 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 20       the SQLite
eff0: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 73  core library was
f000: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e 20   initialized in
f010: 74 68 65 20 70 72 6f 63 65 73 73 20 70 72 69 6f  the process prio
f020: 72 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  r to..      #
f030: 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 4c 6f      the SQLiteLo
f040: 67 20 63 6c 61 73 73 20 62 65 69 6e 67 20 61 62  g class being ab
f050: 6c 65 20 74 6f 20 73 65 74 75 70 20 69 74 73 20  le to setup its
f060: 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
f070: 29 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  )...      #
f080: 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73    Normally, this
f090: 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20   should only be
f0a0: 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c  performed if SQL
f0b0: 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e  ite is loaded an
f0c0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
f0d0: 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62   ready for use b
f0e0: 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  y the test suite
f0f0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
f100: 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20    if {$force || f110: 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d [isSQLiteReady]} f120: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. f130: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55 #.. # BU f140: 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 61 6c GFIX: Before cal f150: 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 ling the native f160: 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f shutdown functio f170: 6e 2c 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 74 n, make sure bot f180: 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 h.. # f190: 20 20 20 20 20 6f 66 20 74 68 65 20 50 52 41 47 of the PRAG f1a0: 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 MA related direc f1b0: 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 tory names are f f1c0: 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 reed... # f1d0: 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF f1e0: 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 orSQLiteDirector f1f0: 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 75 ies$channel tru
f200: 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e....        if
f210: 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20  {[catch {object
f220: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
f230: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
f240: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
f250: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
f260: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
f270: 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
f280: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 68        sqlite3_sh
f290: 75 74 64 6f 77 6e 7d 20 72 65 73 75 6c 74 5d 20  utdown} result]
f2a0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
f2b0: 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu f2c0: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. f2d0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
f2e0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
f2f0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
f300: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c         "---- cal
f310: 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f  l sqlite3_shutdo
f320: 77 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72  wn()... ok: " $r f330: 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. f340: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. f350: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. f360: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
f370: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
f380: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan f390: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs f3a0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. f3b0: 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 "---- call sq f3c0: 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 lite3_shutdown() f3d0: 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c ... error: " \n\ f3e0: 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
f3f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
f400: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
f410: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
f420: 6f 63 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52  oc reportSQLiteR
f430: 65 73 6f 75 72 63 65 73 20 7b 20 63 68 61 6e 6e  esources { chann
f440: 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d  el {quiet false}
f450: 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20   {collect true}
f460: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
f470: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
f480: 20 61 6c 6c 20 6f 75 74 70 75 74 20 69 66 20 77   all output if w
f490: 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 69 6e  e are running in
f4a0: 20 22 71 75 69 65 74 22 20 6d 6f 64 65 2e 0d 0a   "quiet" mode...
f4b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
f4c0: 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69  f {[haveConstrai
f4d0: 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  nt \..
f4e0: 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61      defineConsta
f4f0: 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nt.System.Data.S
f500: 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49  QLite.INTEROP_VI
f510: 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 20  RTUAL_TABLE] &&
f520: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61  \..          [ha
f530: 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a  veConstraint \..
f540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
f550: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73  fineConstant.Sys
f560: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
f570: 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54  TRACK_MEMORY_BYT
f580: 45 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ES]} then {..
f590: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet f5a0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. f5b0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
f5c0: 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74  el "---- current
f5d0: 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62   memory in use b
f5e0: 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e  y SQLiteMemory..
f5f0: 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  . "..        }..
f600: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
f610: 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76  atch {object inv
f620: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
f630: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
f640: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
f650: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
f660: 74 65 4d 65 6d 6f 72 79 20 5c 0d 0a 20 20 20 20  teMemory \..
f670: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
f680: 73 41 6c 6c 6f 63 61 74 65 64 7d 20 6d 65 6d 6f  sAllocated} memo
f690: 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ry] == 0} then {
f6a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
f6b0: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. f6c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu f6d0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
f6e0: 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory f6f0: 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 " bytes\n"].. f700: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. f710: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. f720: 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory f730: 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 unknown.... f740: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
f750: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
f760: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch f770: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg f780: 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 s$memory \n]..
f790: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
f7a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
f7b0: 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th f7c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. f7d0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
f7e0: 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d  ---- maximum mem
f7f0: 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51  ory in use by SQ
f800: 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d  LiteMemory... ".
f810: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
f820: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
f830: 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   {object invoke
f840: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
f850: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
f860: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
f870: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65  .SQLite.SQLiteMe
f880: 6d 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20  mory \..
f890: 20 20 20 20 20 20 20 20 6d 61 78 69 6d 75 6d 42          maximumB
f8a0: 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 7d 20 6d  ytesAllocated} m
f8b0: 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
f8c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
f8d0: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then f8e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. f8f0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
f900: 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo f910: 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a ry " bytes\n"].. f920: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. f930: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. f940: 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d set mem f950: 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 ory unknown.... f960: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
f970: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
f980: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
f990: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append f9a0: 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
f9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
f9c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
f9d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  }....      if {!
f9e0: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. f9f0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
fa00: 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72  hannel "---- cur
fa10: 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75  rent memory in u
fa20: 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20  se by SQLite...
fa30: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  "..      }....
fa40: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
fa50: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
fa60: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
fa70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
fa80: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
fa90: 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65  ite.UnsafeNative
faa0: 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20  Methods \..
fab0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
fac0: 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 7d 20 6d 65  _memory_used} me
fad0: 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  mory] == 0} then
fae0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
faf0: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. fb00: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs fb10: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
fb20: 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20  dArgs $memory " fb30: 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 bytes\n"].. fb40: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el fb50: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. fb60: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: fb70: 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 Maybe the SQLit fb80: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 e core library i fb90: 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a s unavailable?.. fba0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. fbb0: 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e set memory un fbc0: 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 known.... fbd0: 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
fbe0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
fbf0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ fc00: 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
fc10: 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
fc20: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
fc30: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 24      set result $fc40: 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a 20 memory; # NOTE: fc50: 52 65 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69 6e Return memory in fc60: 2d 75 73 65 20 74 6f 20 6f 75 72 20 63 61 6c 6c -use to our call fc70: 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 er..... if fc80: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
fc90: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
fca0: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d  $channel "---- m fcb0: 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e aximum memory in fcc0: 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e use by SQLite.. fcd0: 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a . ".. }.... fce0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch fcf0: 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 {object invoke fd00: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli fd10: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. fd20: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S fd30: 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 QLite.UnsafeNati fd40: 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 veMethods \.. fd50: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 sqlit fd60: 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 e3_memory_highwa fd70: 74 65 72 20 30 7d 20 6d 65 6d 6f 72 79 5d 20 3d ter 0} memory] = fd80: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. fd90: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
fda0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
fdb0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann fdc0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
fdd0: 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e  memory " bytes\n
fde0: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  "]..        }..
fdf0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
fe00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
fe10: 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20    # NOTE: Maybe
fe20: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
fe30: 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61  library is unava
fe40: 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20  ilable?..
fe50: 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
fe60: 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a  memory unknown..
fe70: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$fe80: 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. fe90: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
fea0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
feb0: 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d  rgs $memory \n]. fec0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. fed0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if fee0: 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 {$collect} then
fef0: 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65  {..        colle
ff00: 63 74 47 61 72 62 61 67 65 20 24 63 68 61 6e 6e  ctGarbage $chann ff10: 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 el.. }.... ff20: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
ff30: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
ff40: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel ff50: 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d "---- current m ff60: 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by ff70: 74 68 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 the CLR... ".. ff80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i ff90: 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 f {[catch {objec ffa0: 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 t invoke GC GetT ffb0: 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 otalMemory false ffc0: 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 } memory] == 0} ffd0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. ffe0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 if {[string is i fff0: 6e 74 65 67 65 72 20 2d 73 74 72 69 63 74 20 24 nteger -strict$
10000 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  memory]} then {.
10010 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
10020 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 10030 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 10040 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
10050 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 10060 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 10070 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 10080 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 10090 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 set memory 100a0 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 invalid.... 100b0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
100c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
100d0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 100e0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 100f0 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20$memory \n]..
10100 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
10110 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
10120 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  se {..        se
10130 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
10140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
10150 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 10160 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 10170 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
10180 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e  dArgs $memory \n 10190 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 101a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r 101b0 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 eturn$result..
101c0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
101d0 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
101e0 44 69 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68  Directories { ch
101f0 61 6e 6e 65 6c 20 7b 72 65 73 65 74 20 66 61 6c  annel {reset fal
10200 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
10210 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
10220 43 68 65 63 6b 20 69 66 20 74 68 65 20 73 71 6c  Check if the sql
10230 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
10240 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f  irectory functio
10250 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d  n is available..
10260 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
10270 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c  tputs $channel \ 10280 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d .. "--- 10290 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 - checking for f 102a0 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f unction sqlite3_ 102b0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 102c0 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 ory... ".... 102d0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 102e0 45 3a 20 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 E: This call to 102f0 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 10300 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 10310 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 function uses th 10320 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 10330 20 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 30 invalid value 0 10340 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 61 for the first a 10350 72 67 75 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 rgument. This c 10360 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 0d ode is designed. 10370 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 10380 6f 20 63 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 o check if calli 10390 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 ng the function 103a0 77 69 6c 6c 20 72 61 69 73 65 20 61 6e 20 65 78 will raise an ex 103b0 63 65 70 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 ception (i.e... 103c0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 103d0 20 61 63 74 75 61 6c 20 72 65 73 75 6c 74 20 6f actual result o 103e0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 f the function d 103f0 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 oes not matter a 10400 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 s long as no.. 10410 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 # dire 10420 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 ctory is changed 10430 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 )... #.. 10440 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 10450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f . o 10460 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 10470 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 10480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10490 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 104a0 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d te.UnsafeNativeM 104b0 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 ethods \.. 104c0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f sqlite3_ 104d0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 104e0 6f 72 79 20 30 20 6e 75 6c 6c 7d 5d 20 3d 3d 20 ory 0 null}] == 104f0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 10500 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 10510 4e 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74 68 NOTE: Calling th 10520 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f e sqlite3_win32_ 10530 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 set_directory fu 10540 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d nction does not. 10550 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 10560 20 63 61 75 73 65 20 61 6e 20 65 78 63 65 70 74 cause an except 10570 69 6f 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 ion; therefore, 10580 69 74 20 6d 75 73 74 20 62 65 20 61 76 61 69 6c it must be avail 10590 61 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20 20 able (i.e... 105a0 20 20 20 20 23 20 20 20 20 20 20 20 65 76 65 6e # even 105b0 20 74 68 6f 75 67 68 20 69 74 20 73 68 6f 75 6c though it shoul 105c0 64 20 72 65 74 75 72 6e 20 61 20 66 61 69 6c 75 d return a failu 105d0 72 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 69 re return code i 105e0 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 n this.. 105f0 23 20 20 20 20 20 20 20 63 61 73 65 29 2e 0d 0a # case)... 10600 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 10610 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 10620 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s 10630 65 74 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a et_directory.... 10640 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
10650 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a  hannel yes\n....
10660 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10670 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20     # NOTE: Does
10680 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20  our caller want
10690 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 69 72  to reset the dir
106a0 65 63 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20 20  ectories?..
106b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
106c0 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b   {$reset} then { 106d0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 106e0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 106f0 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 Now make sure t 10700 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 he database and 10710 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 10720 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 ories are.. 10730 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 # res 10740 65 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 et their default 10750 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 values, which s 10760 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f hould be null fo 10770 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 r both... 10780 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 # Since 10790 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e the sqlite3_win 107a0 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 107b0 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 function is ava 107c0 69 6c 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 ilable,.. 107d0 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20 69 # use i 107e0 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d t... #. 107f0 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 7b . for { 10800 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 set index 1} {$i
10810 6e 64 65 78 20 3c 20 33 7d 20 7b 69 6e 63 72 20  ndex < 3} {incr
10820 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20  index} {..
10830 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
10840 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
10850 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
10860 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
10870 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
10890 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
108a0 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
108b0 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20  thods \..
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
108d0 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
108e0 69 72 65 63 74 6f 72 79 20 24 69 6e 64 65 78 20  irectory $index 108f0 6e 75 6c 6c 7d 20 5c 0d 0a 20 20 20 20 20 20 20 null} \.. 10900 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 res 10910 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then 10920 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 10930 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
10940 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
10950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10960 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69   "---- call sqli
10970 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
10980 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78  rectory(" $index 10990 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 109a0 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e ", null).. 109b0 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 . ok: "$result
109c0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
109d0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
109e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $109f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 10a00 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 10a10 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 10a20 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 all sqlite3_win3 10a30 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 2_set_directory( 10a40 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 "$index \..
10a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c                ",
10a60 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a   null)... error:
10a70 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20   " \n\t $result 10a80 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 10a90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 10aa0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 10ab0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 10ac0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
10ad0 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20  el no\n....
10ae0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
10af0 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63  NOTE: Does our c
10b00 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65  aller want to re
10b10 73 65 74 20 74 68 65 20 64 69 72 65 63 74 6f 72  set the director
10b20 69 65 73 3f 20 20 54 68 69 73 20 63 61 6e 20 6f  ies?  This can o
10b30 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  nly..        #
10b40 20 20 20 20 20 62 65 20 70 65 72 66 6f 72 6d 65       be performe
10b50 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c  d if SQLite is l
10b60 6f 61 64 65 64 20 61 6e 64 20 72 65 61 64 79 20  oaded and ready
10b70 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74  for use by the t
10b80 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  est..        #
10b90 20 20 20 20 20 73 75 69 74 65 2e 0d 0a 20 20 20       suite...
10ba0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
10bb0 69 66 20 7b 24 72 65 73 65 74 20 26 26 20 5b 69  if {$reset && [i 10bc0 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 sSQLiteReady]} t 10bd0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 10be0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 10bf0 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 NOTE: Now make s 10c00 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 ure the database 10c10 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 and temporary d 10c20 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a irectories are.. 10c30 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 10c40 20 20 72 65 73 65 74 20 74 68 65 69 72 20 64 65 reset their de 10c50 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 fault values, wh 10c60 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 ich should be nu 10c70 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 ll for both... 10c80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 10c90 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 Since the sqlite 10ca0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 10cb0 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 ctory function d 10cc0 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 oes not.. 10cd0 20 20 20 23 20 20 20 20 20 20 20 61 70 70 65 61 # appea 10ce0 72 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c r to be availabl 10cf0 65 2c 20 75 73 65 20 74 68 65 20 61 73 73 6f 63 e, use the assoc 10d00 69 61 74 65 64 20 50 52 41 47 4d 41 20 63 6f 6d iated PRAGMA com 10d10 6d 61 6e 64 73 0d 0a 20 20 20 20 20 20 20 20 20 mands.. 10d20 20 23 20 20 20 20 20 20 20 69 6e 73 74 65 61 64 # instead 10d30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 10d40 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 10d50 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 h directory [lis 10d60 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 t data_store_dir 10d70 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 ectory temp_stor 10d80 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a e_directory] {.. 10d90 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 10da0 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 sql [appendArgs 10db0 22 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 "PRAGMA "$direc
10dc0 74 6f 72 79 20 22 20 3d 20 5c 22 5c 22 3b 22 5d  tory " = \"\";"]
10dd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
10de0 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 63  if {[catch {exec
10df0 75 74 65 53 71 6c 20 24 73 71 6c 7d 20 72 65 73  uteSql $sql} res 10e00 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then 10e10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 10e20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
10e30 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
10e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10e50 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50   "---- execute P
10e60 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f  RAGMA " $directo 10e70 72 79 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 20 ry "... ok: \"" 10e80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10e90 20 20 20 20 20 24 72 65 73 75 6c 74 20 5c 22 5c$result \"\
10ea0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
10eb0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
10ec0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 10ed0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 10ee0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 10ef0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 "---- ex 10f00 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 ecute PRAGMA "$
10f10 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 65  directory "... e
10f20 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20  rror: " \..
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c               \n\
10f40 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  t $result \n].. 10f50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 10f60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 10f70 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 10f80 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 10f90 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c # NOTE: Finally, 10fa0 20 73 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e show the curren 10fb0 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 t value of the d 10fc0 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 atabase and temp 10fd0 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 orary.. # 10fe0 20 20 20 20 20 64 69 72 65 63 74 6f 72 69 65 73 directories 10ff0 2e 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 . This can only 11000 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 be performed if 11010 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 SQLite is loade 11020 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 11030 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 and ready for u 11040 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 se by the test s 11050 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a uite... #.. 11060 20 20 20 20 20 20 69 66 20 7b 5b 69 73 53 51 4c if {[isSQL 11070 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 iteReady]} then 11080 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 {.. forea 11090 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 ch directory [li 110a0 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 st data_store_di 110b0 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f rectory temp_sto 110c0 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d re_directory] {. 110d0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 110e0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
110f0 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63  dArgs "---- chec
11100 6b 69 6e 67 20 22 20 24 64 69 72 65 63 74 6f 72  king " $director 11110 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 y "... "].... 11120 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b set sql [ 11130 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 appendArgs "PRAG 11140 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 MA "$directory
11150 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  \;]....
11160 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65   if {[catch {exe
11170 63 75 74 65 53 71 6c 20 24 73 71 6c 20 73 63 61  cuteSql $sql sca 11180 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 lar} result] == 11190 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 111a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
111b0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
111c0 73 20 22 6f 6b 3a 20 5c 22 22 20 24 72 65 73 75  s "ok: \"" $resu 111d0 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 lt \"\n].. 111e0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 111f0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 11200 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
11210 41 72 67 73 20 22 65 72 72 6f 72 3a 20 22 20 5c  Args "error: " \
11220 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 11230 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 11240 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 11250 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 11260 70 72 6f 63 20 6c 6f 61 64 53 51 4c 69 74 65 54 proc loadSQLiteT 11270 65 73 74 53 65 74 74 69 6e 67 73 20 7b 20 63 68 estSettings { ch 11280 61 6e 6e 65 6c 20 7b 73 75 66 66 69 78 20 22 22 annel {suffix "" 11290 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 } {quiet false} 112a0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 112b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 112c0 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 73 65 74 loading the set 112d0 74 69 6e 67 73 20 69 66 20 74 68 65 69 72 20 75 tings if their u 112e0 73 61 67 65 20 68 61 73 20 62 65 65 6e 20 64 69 sage has been di 112f0 73 61 62 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 sabled... # 11300 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e .. if {![in 11310 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 fo exists ::no(s 11320 71 6c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 qliteTestSetting 11330 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 11340 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 11350 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 73 # NOTE: Load cus 11360 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 tom per-user and 11370 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 /or per-host tes 11380 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d t settings now.. 11390 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 113a0 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 113b0 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 ists ::tcl_platf 113c0 6f 72 6d 28 75 73 65 72 29 5d 7d 20 74 68 65 6e orm(user)]} then 113d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 113e0 74 20 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 t userSettingsFi 113f0 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 leName [file joi 11400 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 n [getCommonDire 11410 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 ctory] \.. 11420 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 [appendA 11430 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 rgs settings$su
11440 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c  ffix . $::tcl_pl 11450 61 74 66 6f 72 6d 28 75 73 65 72 29 20 2e 65 61 atform(user) .ea 11460 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 gle]].... 11470 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 if {[file exi 11480 73 74 73 20 24 75 73 65 72 53 65 74 74 69 6e 67 sts$userSetting
11490 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  sFileName]} then
114a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
114b0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 114c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 114d0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
114e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
114f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
11500 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67     "---- loading
11510 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73   per-user test s
11520 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
11530 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
11540 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69        $userSetti 11550 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e ngsFileName \".. 11560 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 .\n].. 11570 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 11580 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 75 if {[catch {u 11590 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 plevel 1 [list s 115a0 6f 75 72 63 65 20 24 75 73 65 72 53 65 74 74 69 ource$userSetti
115b0 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 5c 0d  ngsFileName]} \.
115c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
115d0 20 20 20 20 20 65 72 72 6f 72 5d 7d 20 74 68 65       error]} the
115e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
115f0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 11600 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 11610 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
11620 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
11630 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
11640 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
11650 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
11660 74 6f 20 6c 6f 61 64 20 70 65 72 2d 75 73 65 72  to load per-user
11670 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c   settings file \
11680 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
11690 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53            $userS 116a0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName 116b0 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "\", error: " \n 116c0 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
116e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
116f0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
11700 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
11710 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 11720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 11730 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
11740 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11760 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20    "---- skipped
11770 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72  loading per-user
11780 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66   test settings f
11790 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ile \"" \..
117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73               $us 117b0 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 erSettingsFileNa 117c0 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 me "\", it does 117d0 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 not exist\n"].. 117e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 117f0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 11800 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 11810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11850 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 #######.... 11860 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 11870 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f sts ::tcl_platfo 11880 72 6d 28 68 6f 73 74 29 5d 7d 20 74 68 65 6e 20 rm(host)]} then 11890 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 118a0 20 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c hostSettingsFil 118b0 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e eName [file join 118c0 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 [getCommonDirec 118d0 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 tory] \.. 118e0 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 [appendAr 118f0 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 gs settings$suf
11900 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61  fix . $::tcl_pla 11910 74 66 6f 72 6d 28 68 6f 73 74 29 20 2e 65 61 67 tform(host) .eag 11920 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 le]].... 11930 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 if {[file exis 11940 74 73 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 ts$hostSettings
11950 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  FileName]} then
11960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
11970 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 11980 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 11990 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
119a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
119b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
119c0 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20    "---- loading
119d0 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65  per-host test se
119e0 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20  ttings file \""
119f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
11a00 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e       $hostSettin 11a10 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e gsFileName \"... 11a20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 11a30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 11a40 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 75 70 if {[catch {up 11a50 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f level 1 [list so 11a60 75 72 63 65 20 24 68 6f 73 74 53 65 74 74 69 6e urce$hostSettin
11a70 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 5c 0d 0a  gsFileName]} \..
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11a90 20 20 20 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e      error]} then
11aa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
11ab0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 11ac0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 11ad0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
11ae0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
11af0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
11b00 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
11b10 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
11b20 6f 20 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74 20  o load per-host
11b30 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
11b40 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
11b50 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65           $hostSe 11b60 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 ttingsFileName " 11b70 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c \", error: " \n\ 11b80 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
11b90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
11ba0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
11bb0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
11bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
11bd0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 11be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 11bf0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
11c00 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11c20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c   "---- skipped l
11c30 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20  oading per-host
11c40 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69  test settings fi
11c50 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  le \"" \..
11c60 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73              $hos 11c70 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d tSettingsFileNam 11c80 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e e "\", it does n 11c90 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 ot exist\n"].. 11ca0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 11cb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 11cc0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 11cd0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 11ce0 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72 runSQLiteTestPr 11cf0 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 ologue {} {.. 11d00 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11d10 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 TE: Skip running 11d20 20 6f 75 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c our custom prol 11d30 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e ogue if the main 11d40 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 one has been.. 11d50 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 # ski 11d60 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a pped... #.. 11d70 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 11d80 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f exists ::no(pro 11d90 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 logue.eagle)]} t 11da0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 11db0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 11dc0 3a 20 4c 6f 61 64 20 74 68 65 20 22 62 65 66 6f : Load the "befo 11dd0 72 65 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 re-constraints" 11de0 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 custom per-user 11df0 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d and/or per-host. 11e00 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 11e10 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e test settings n 11e20 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ow... #.. 11e30 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 uplevel 11e40 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 1 [list loadSQLi 11e50 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 teTestSettings$
11e60 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e  ::test_channel .
11e70 62 65 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20  before]....
11e80 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
11e90 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53  NOTE: Skip all S
11ea0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
11eb0 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65 20 68  e related file h
11ec0 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e  andling (deletin
11ed0 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  g,..        #
11ee0 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64      copying, and
11ef0 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 77 65 20   loading) if we
11f00 61 72 65 20 73 6f 20 69 6e 73 74 72 75 63 74 65  are so instructe
11f10 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #..
11f20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
11f30 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71  o exists ::no(sq
11f40 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65  liteFiles)]} the
11f50 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
11f60 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
11f70 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20  TE: Skip trying
11f80 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 66 69  to delete any fi
11f90 6c 65 73 20 69 66 20 77 65 20 61 72 65 20 73 6f  les if we are so
11fa0 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20   instructed...
11fb0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
11fc0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
11fd0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
11fe0 74 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d  teSqliteFiles)]}
11ff0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
12000 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73       tryDeleteAs
12010 73 65 6d 62 6c 79 20 73 71 6c 69 74 65 33 2e 64  sembly sqlite3.d
12020 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..
12030 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74  removeConstraint
12040 20 66 69 6c 65 5f 73 71 6c 69 74 65 33 2e 64 6c   file_sqlite3.dl
12050 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l....
12060 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62   tryDeleteAssemb
12070 6c 79 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  ly SQLite.Intero
12080 70 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20  p.dll..
12090 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61     removeConstra
120a0 69 6e 74 20 66 69 6c 65 5f 53 51 4c 69 74 65 2e  int file_SQLite.
120b0 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a 0d 0a 20  Interop.dll....
120c0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
120d0 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 53 79 73  leteAssembly Sys
120e0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
120f0 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dll..
12100 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e   removeConstrain
12110 74 20 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44 61  t file_System.Da
12120 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 0d  ta.SQLite.dll...
12130 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
12140 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 53  DeleteAssembly S
12150 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
12160 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20  e.Linq.dll..
12170 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f          removeCo
12180 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 5f 53 79  nstraint file_Sy
12190 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
121a0 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20  .Linq.dll..
121b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
121c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
121d0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66   # NOTE: Check f
121e0 6f 72 20 74 68 65 20 22 61 75 74 6f 53 65 6c 65  or the "autoSele
121f0 63 74 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69  ct" runtime opti
12200 6f 6e 2e 20 20 49 66 20 70 72 65 73 65 6e 74 2c  on.  If present,
12210 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
12220 20 20 20 20 61 74 74 65 6d 70 74 20 74 6f 20 61      attempt to a
12230 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c  utomatically sel
12240 65 63 74 20 74 68 65 20 66 69 72 73 74 20 61 76  ect the first av
12250 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ailable..
12260 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64     #       build
12270 20 28 6f 72 20 22 72 65 6c 65 61 73 65 22 29 20   (or "release")
12280 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 20 53 79  of SQLite and Sy
12290 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
122a0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
122b0 20 20 20 20 66 6f 72 20 75 73 65 20 77 69 74 68      for use with
122c0 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e   the test suite.
122d0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
122e0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61           if {[ha
122f0 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61  sRuntimeOption a
12300 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e  utoSelect]} then
12310 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
12320 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51  if {![checkForSQ
12330 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65  LiteBuilds $::te 12340 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d st_channel true] 12350 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12360 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 12370 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 SQLiteReleases$
12380 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74  ::test_channel t
12390 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rue..
123a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
123b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
123c0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
123d0 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f  : Skip trying to
123e0 20 76 65 72 69 66 79 20 74 68 65 20 62 75 69 6c   verify the buil
123f0 64 20 64 69 72 65 63 74 6f 72 79 20 69 66 20 77  d directory if w
12400 65 20 61 72 65 20 73 6f 0d 0a 20 20 20 20 20 20  e are so..
12410 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 74      #       inst
12420 72 75 63 74 65 64 3b 20 6f 74 68 65 72 77 69 73  ructed; otherwis
12430 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74 20  e, make sure it
12440 61 63 74 75 61 6c 6c 79 20 65 78 69 73 74 73 20  actually exists
12450 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  or..          #
12460 20 20 20 20 20 20 68 61 6c 74 20 74 68 65 20 65        halt the e
12470 6e 74 69 72 65 20 74 65 73 74 69 6e 67 20 70 72  ntire testing pr
12480 6f 63 65 73 73 20 69 66 20 69 74 20 64 6f 65 73  ocess if it does
12490 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20 20 20   not exist...
124a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
124b0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
124c0 78 69 73 74 73 20 3a 3a 6e 6f 28 76 65 72 69 66  xists ::no(verif
124d0 79 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 29  yBuildDirectory)
124e0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
124f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
12500 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
12510 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 65   this point, the
12520 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
12530 20 4d 55 53 54 20 65 78 69 73 74 20 61 73 20 61   MUST exist as a
12540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
12550 20 20 20 20 20 20 76 61 6c 69 64 20 64 69 72 65        valid dire
12560 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 74 65  ctory for the te
12570 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 74 6f  sting process to
12580 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 20 20   continue...
12590 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
125a0 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63         set direc
125b0 74 6f 72 79 20 5b 67 65 74 42 75 69 6c 64 44 69  tory [getBuildDi
125c0 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20  rectory]....
125d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69          if {![fi
125e0 6c 65 20 65 78 69 73 74 73 20 24 64 69 72 65 63  le exists $direc 125f0 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 tory] || \.. 12600 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 66 69 ![fi 12610 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 le isdirectory$
12620 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
12630 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
12640 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
12650 20 20 20 23 20 4e 4f 54 45 3a 20 4a 75 73 74 20     # NOTE: Just
12660 70 72 69 6f 72 20 74 6f 20 61 63 74 75 61 6c 6c  prior to actuall
12670 79 20 68 61 6c 74 69 6e 67 20 74 68 65 20 74 65  y halting the te
12680 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2c 0d 0a  sting process,..
12690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
126a0 20 20 20 20 20 20 61 64 64 20 61 6e 20 65 72 72        add an err
126b0 6f 72 20 74 6f 20 74 68 65 20 74 65 73 74 20 6c  or to the test l
126c0 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20  og file...
126d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
126e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $126f0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 12700 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 12720 22 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 "---- could not 12730 76 65 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 verify build dir 12740 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 ectory \""$dire
12750 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20  ctory \..
12760 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
12770 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74  all testing halt
12780 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ed\n"]....
12790 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
127a0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
127b0 20 52 61 69 73 69 6e 67 20 61 20 73 63 72 69 70   Raising a scrip
127c0 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 74 68 69  t error from thi
127d0 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20 68  s point should h
127e0 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  alt..
127f0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 74     #       the t
12800 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d  esting process..
12810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
12820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
12830 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 67  error [appendArg
12840 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
12850 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
12860 74 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 64  t verify build d
12870 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69  irectory \"" $di 12880 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 rectory \.. 12890 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" 128a0 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 , all testing ha 128b0 6c 74 65 64 22 5d 0d 0a 20 20 20 20 20 20 20 20 lted"].. 128c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 128d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 128e0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 128f0 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 OTE: Skip trying 12900 20 74 6f 20 63 6f 70 79 20 61 6e 79 20 66 69 6c to copy any fil 12910 65 73 20 69 66 20 77 65 20 61 72 65 20 73 6f 20 es if we are so 12920 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 instructed... 12930 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 12940 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 12950 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 12960 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 qliteFiles)]} th 12970 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 12980 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c tryCopyAssembl 12990 79 20 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 20 y sqlite3.dll.. 129a0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 129b0 70 79 41 73 73 65 6d 62 6c 79 20 53 51 4c 69 74 pyAssembly SQLit 129c0 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a 20 e.Interop.dll.. 129d0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 129e0 70 79 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 pyAssembly Syste 129f0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl 12a00 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 l.. t 12a10 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 ryCopyAssembly S 12a20 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 12a30 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 e.Linq.dll.. 12a40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 12a50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 12a60 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 # NOTE: Skip t 12a70 72 79 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e rying to load an 12a80 79 20 66 69 6c 65 73 20 69 66 20 77 65 20 61 72 y files if we ar 12a90 65 20 73 6f 20 69 6e 73 74 72 75 63 74 65 64 2e e so instructed. 12aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 12ab0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 12ac0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 12ad0 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c 65 73 29 loadSqliteFiles) 12ae0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 12af0 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 tryLoadAs 12b00 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 sembly System.Da 12b10 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 ta.SQLite.dll.. 12b20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f tryLo 12b30 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 adAssembly Syste 12b40 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 m.Data.SQLite.Li 12b50 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 nq.dll.. 12b60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 12b70 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 12b80 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e NOTE: Skip tryin 12b90 67 20 74 6f 20 64 65 6c 65 74 65 20 65 78 74 65 g to delete exte 12ba0 72 6e 61 6c 20 66 69 6c 65 73 20 69 66 20 77 65 rnal files if we 12bb0 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75 63 74 are so instruct 12bc0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ed... # 12bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 12be0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 12bf0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 45 no(deleteSqliteE 12c00 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 xternalFiles)]} 12c10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12c20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 75 69 tryDeleteBui 12c30 6c 64 46 69 6c 65 20 49 6e 73 74 61 6c 6c 65 72 ldFile Installer 12c40 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 0d .exe.mda.config. 12c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 . try 12c60 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20 DeleteBuildFile 12c70 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e test.exe.mda.con 12c80 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 fig.. 12c90 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 tryDeleteBuildF 12ca0 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 ile testlinq.exe 12cb0 2e 6d 64 61 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 .mda.config.. 12cc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 12cd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 12ce0 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 12cf0 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 20 65 trying to copy e 12d00 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 69 66 xternal files if 12d10 20 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 we are so instr 12d20 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 ucted... 12d30 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 12d40 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 12d50 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 12d60 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d ExternalFiles)]} 12d70 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12d80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 12d90 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 # NOTE: Copy 12da0 20 74 68 65 20 4d 44 41 20 63 6f 6e 66 69 67 75 the MDA configu 12db0 72 61 74 69 6f 6e 20 66 69 6c 65 20 66 6f 72 20 ration file for 12dc0 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 20 the Eagle shell 12dd0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 to the.. 12de0 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c # buil 12df0 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f d output directo 12e00 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 75 73 65 ry; however, use 12e10 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 the name of the 12e20 20 6c 65 67 61 63 79 0d 0a 20 20 20 20 20 20 20 legacy.. 12e30 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 # tes 12e40 74 20 65 78 65 63 75 74 61 62 6c 65 2e 20 20 54 t executable. T 12e50 68 69 73 20 77 69 6c 6c 20 6d 61 6b 65 20 73 75 his will make su 12e60 72 65 20 74 68 61 74 20 74 68 65 20 6c 65 67 61 re that the lega 12e70 63 79 20 74 65 73 74 73 0d 0a 20 20 20 20 20 20 cy tests.. 12e80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 75 # ru 12e90 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 n with the same 12ea0 73 65 74 20 6f 66 20 4d 44 41 73 20 63 6f 6e 66 set of MDAs conf 12eb0 69 67 75 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 igured... 12ec0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 12ed0 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72 tryCopyBinar 12ee0 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c yFile EagleShell 12ef0 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 .exe.mda.config 12f00 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 Installer.exe.md 12f10 61 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 a.config.. 12f20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e tryCopyBin 12f30 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65 aryFile EagleShe 12f40 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 ll.exe.mda.confi 12f50 67 20 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 g test.exe.mda.c 12f60 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 onfig.. 12f70 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79 tryCopyBinary 12f80 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e File EagleShell. 12f90 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 exe.mda.config t 12fa0 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e estlinq.exe.mda. 12fb0 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 config.. 12fc0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 12fd0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 .. catch 12fe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 12ff0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
13000 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
13010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13020 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69  "---- file versi
13030 6f 6e 20 6f 66 20 5c 22 73 71 6c 69 74 65 33 2e  on of \"sqlite3.
13040 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20  dll\"... " \..
13050 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
13060 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69  e version [getBi
13070 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c  naryFileName sql
13080 69 74 65 33 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a  ite3.dll]] \n]..
13090 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
130a0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
130b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 130c0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 130d0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 130e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 130f0 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 file version of 13100 20 5c 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f \"SQLite.Intero 13110 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a p.dll\"... " \.. 13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 13130 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 ile version [get 13140 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 BinaryFileName S 13150 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c QLite.Interop.dl 13160 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 l]] \n].. 13170 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 }.... ca 13180 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 13190 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
131a0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
131b0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
131c0 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
131d0 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74  ersion of \"Syst
131e0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
131f0 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20  ll\"... " \..
13200 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
13210 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e   version [getBin
13220 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74  aryFileName Syst
13230 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
13240 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  ll]] \n]..
13250 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
13260 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
13270 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 13280 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 13290 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 132a0 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 132b0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 version of \"Sys 132c0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 132d0 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 Linq.dll\"... " 132e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 132f0 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b [file version [ 13300 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 13310 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ 13320 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 Lite.Linq.dll]] 13330 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. 13340 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 73 .. set as 13350 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63 74 semblies [object 13360 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61 69 invoke AppDomai 13370 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e 20 n.CurrentDomain 13380 47 65 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d 0a GetAssemblies].. 13390 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 .. object 133a0 20 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c foreach assembl 133b0 79 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d y$assemblies {.
133c0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
133d0 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b 53  string match \{S
133e0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
133f0 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20 74  e* $assembly]} t 13400 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 13410 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
13420 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
13430 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
13440 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f          "---- fo
13450 75 6e 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20  und assembly: "
13460 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20  $assembly \n].. 13470 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 13480 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 13490 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 134a0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
134b0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20  t_channel \..
134c0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
134d0 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74   define constant
134e0 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44  s for \"System.D
134f0 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20  ata.SQLite\"...
13500 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  "....          i
13510 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63  f {[catch {objec
13520 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
13530 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13550 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
13560 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e  te.SQLite3 Defin
13570 65 43 6f 6e 73 74 61 6e 74 73 7d 20 5c 0d 0a 20  eConstants} \..
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13590 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73   defineConstants
135a0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
135b0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
135c0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 135d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 l [appendArgs [f 135e0 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 ormatList [lsort 135f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 13600 20 20 20 20 24 64 65 66 69 6e 65 43 6f 6e 73 74$defineConst
13610 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e  ants] <none>] \n
13620 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
13630 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
13640 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 13650 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e _channel unknown 13660 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d \n.. }. 13670 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 13680 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 13690 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
136a0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
136b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
136c0 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 76 65 72  "---- source ver
136d0 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d  sion of \"System
136e0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
136f0 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  \"... "....
13700 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
13710 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  {object invoke -
13720 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
13730 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13740 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
13750 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43  a.SQLite.SQLiteC
13760 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64  onnection Provid
13770 65 72 56 65 72 73 69 6f 6e 7d 20 5c 0d 0a 20 20  erVersion} \..
13780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13790 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74  version] == 0} t
137a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
137b0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
137c0 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20  ength $version] 137d0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 137e0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set 137f0 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 version null.. 13800 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 13810 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
13820 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
13830 61 70 70 65 6e 64 41 72 67 73 20 24 76 65 72 73  appendArgs $vers 13840 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ion \n].. 13850 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 13860 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
13870 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75  ::test_channel u
13880 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20  nknown\n..
13890 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
138a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
138b0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
138c0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 138d0 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 138e0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 "---- sour 138f0 63 65 20 63 68 65 63 6b 6f 75 74 20 6f 66 20 5c ce checkout of \ 13900 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c "System.Data.SQL 13910 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a ite.dll\"... ".. 13920 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 13930 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 [catch {object i 13940 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 13950 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 13960 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 13970 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 13980 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 13990 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 65 49 ProviderSourceI 139a0 64 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 d} \.. 139b0 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 49 64 sourceId 139c0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 139d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 139e0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
139f0 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20  sourceId] == 0}
13a00 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
13a10 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65        set source
13a20 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20  Id null..
13a30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
13a40 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 13a50 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 13a60 64 41 72 67 73 20 24 73 6f 75 72 63 65 49 64 20 dArgs$sourceId
13a70 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
13a80 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
13a90 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 13aa0 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f st_channel unkno 13ab0 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 wn\n.. 13ac0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 13ad0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 13ae0 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check 13af0 20 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20 62 the available b 13b00 75 69 6c 64 73 20 28 61 6e 64 20 22 72 65 6c 65 uilds (and "rele 13b10 61 73 65 73 22 29 20 6f 66 20 53 51 4c 69 74 65 ases") of SQLite 13b20 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 and.. # 13b30 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 13b40 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 20 a.SQLite... 13b50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 #.. ch 13b60 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c eckForSQLiteBuil 13b70 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ds$::test_chann
13b80 65 6c 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63  el..        chec
13b90 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73  kForSQLiteReleas
13ba0 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  es $::test_chann 13bb0 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d el.... #. 13bc0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 13bd0 20 4e 6f 77 2c 20 77 65 20 6e 65 65 64 20 74 6f Now, we need to 13be0 20 6b 6e 6f 77 20 69 66 20 74 68 65 20 53 51 4c know if the SQL 13bf0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 13c00 20 69 73 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 is available.. 13c10 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28 # ( 13c20 69 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 65 i.e. because the 13c30 20 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79 20 53 79 managed-only Sy 13c40 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 13c50 20 61 73 73 65 6d 62 6c 79 20 63 61 6e 0d 0a 20 assembly can.. 13c60 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c # l 13c70 6f 61 64 20 77 69 74 68 6f 75 74 20 69 74 3b 20 oad without it; 13c80 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 6e however, it cann 13c90 6f 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 ot do anything u 13ca0 73 65 66 75 6c 20 77 69 74 68 6f 75 74 0d 0a 20 seful without.. 13cb0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 # i 13cc0 74 29 2e 20 20 49 66 20 77 65 20 61 72 65 20 75 t). If we are u 13cd0 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d sing the mixed-m 13ce0 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 61 6e 64 ode assembly and 13cf0 20 77 65 20 61 6c 72 65 61 64 79 0d 0a 20 20 20 we already.. 13d00 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 75 # fou 13d10 6e 64 20 69 74 20 28 61 62 6f 76 65 29 2c 20 74 nd it (above), t 13d20 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 his should alway 13d30 73 20 73 75 63 63 65 65 64 2e 0d 0a 20 20 20 20 s succeed... 13d40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 #.. c 13d50 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62 heckForSQLiteLib 13d60 72 61 72 79 20 24 3a 3a 74 65 73 74 5f 63 68 61 rary$::test_cha
13d70 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nnel....
13d80 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
13d90 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
13da0 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61  SQLite interop a
13db0 73 73 65 6d 62 6c 79 20 69 73 20 61 76 61 69 6c  ssembly is avail
13dc0 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  able...        #
13dd0 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
13de0 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20  orSQLiteInterop
13df0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. 13e00 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 13e10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 13e20 65 63 6b 20 74 68 65 20 53 51 4c 69 74 65 20 64 eck the SQLite d 13e30 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 atabase and temp 13e40 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 orary directorie 13e50 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 13e60 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 13e70 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 QLiteDirectories 13e80 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
13e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
13ea0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
13eb0 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d  ttempt to determ
13ec0 69 6e 65 20 69 66 20 76 61 72 69 6f 75 73 20 63  ine if various c
13ed0 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
13ee0 6f 6e 73 20 6e 65 65 64 65 64 20 66 6f 72 0d 0a  ons needed for..
13ef0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
13f00 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  test constraints
13f10 20 77 65 72 65 20 65 6e 61 62 6c 65 64 20 66 6f   were enabled fo
13f20 72 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73  r the managed as
13f30 73 65 6d 62 6c 79 2e 20 20 54 68 65 72 65 0d 0a  sembly.  There..
13f40 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
13f50 61 72 65 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65  are some compile
13f60 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 68  -time options th
13f70 61 74 20 6d 75 73 74 20 61 6c 73 6f 20 68 61 76  at must also hav
13f80 65 20 62 65 65 6e 20 65 6e 61 62 6c 65 64 0d 0a  e been enabled..
13f90 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
13fa0 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20  for the interop
13fb0 61 73 73 65 6d 62 6c 79 20 69 6e 20 6f 72 64 65  assembly in orde
13fc0 72 20 74 6f 20 62 65 20 65 66 66 65 63 74 69 76  r to be effectiv
13fd0 65 2e 20 20 46 6f 72 20 74 68 6f 73 65 0d 0a 20  e.  For those..
13fe0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f         #       o
13ff0 70 74 69 6f 6e 73 2c 20 69 74 20 77 69 6c 6c 20  ptions, it will
14000 62 65 20 61 73 73 75 6d 65 64 20 74 68 61 74 20  be assumed that
14010 69 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66  it was enabled f
14020 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 0d 0a  or the interop..
14030 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
14040 61 73 73 65 6d 62 6c 79 20 69 66 20 69 74 20 77  assembly if it w
14050 61 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74  as enabled for t
14060 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  he managed assem
14070 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  bly...        #.
14080 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
14090 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20   defineConstant
140a0 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
140b0 20 20 20 20 20 43 48 45 43 4b 5f 53 54 41 54 45       CHECK_STATE
140c0 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 20 44 45   COUNT_HANDLE DE
140d0 42 55 47 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45  BUG INTEROP_CODE
140e0 43 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20  C INTEROP_DEBUG
140f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  \..            I
14100 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e  NTEROP_EXTENSION
14110 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 52  _FUNCTIONS INTER
14120 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20  OP_LEGACY_CLOSE
14130 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 5c 0d 0a 20  INTEROP_LOG \..
14140 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52             INTER
14150 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f  OP_TEST_EXTENSIO
14160 4e 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  N INTEROP_VIRTUA
14170 4c 5f 54 41 42 4c 45 20 4e 45 54 5f 32 30 20 4e  L_TABLE NET_20 N
14180 45 54 5f 33 35 20 5c 0d 0a 20 20 20 20 20 20 20  ET_35 \..
14190 20 20 20 20 20 4e 45 54 5f 34 30 20 4e 45 54 5f       NET_40 NET_
141a0 34 35 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  45 NET_COMPACT_2
141b0 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41  0 PLATFORM_COMPA
141c0 43 54 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20  CTFRAMEWORK \..
141d0 20 20 20 20 20 20 20 20 20 20 20 50 52 45 4c 4f             PRELO
141e0 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52  AD_NATIVE_LIBRAR
141f0 59 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 53  Y RETARGETABLE S
14200 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 5c  QLITE_STANDARD \
14210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 48  ..            TH
14220 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20  ROW_ON_DISPOSED
14230 54 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e  TRACE TRACE_CONN
14240 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 48 41 4e  ECTION TRACE_HAN
14250 44 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  DLE \..
14260 20 20 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44     TRACE_PRELOAD
14270 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54   TRACE_STATEMENT
14280 20 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 20 54   TRACE_WARNING T
14290 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45  RACK_MEMORY_BYTE
142a0 53 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  S \..
142b0 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c   USE_INTEROP_DLL
142c0 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56 32 20   USE_PREPARE_V2
142d0 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 20 20  WINDOWS] {..
142e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
142f0 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
14300 20 69 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d   if the compile-
14310 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c  time option is l
14320 69 73 74 65 64 20 69 6e 20 74 68 65 20 6c 69 73  isted in the lis
14330 74 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20  t of..
14340 23 20 20 20 20 20 20 20 22 64 65 66 69 6e 65 20  #       "define
14350 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70 74 20  constants" kept
14360 74 72 61 63 6b 20 6f 66 20 62 79 20 74 68 65 20  track of by the
14370 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
14380 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
14390 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
143a0 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  orSQLiteDefineCo
143b0 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63  nstant $::test_c 143c0 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65 43 6f hannel$defineCo
143d0 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20 20 20 20  nstant..
143e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
143f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
14400 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e  Check the curren
14410 74 20 62 75 69 6c 64 20 79 65 61 72 2e 20 20 42  t build year.  B
14420 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 20 69  asically, this i
14430 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20  ndicates..
14440 20 20 23 20 20 20 20 20 20 20 77 68 69 63 68 20    #       which
14450 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69  version of MSBui
14460 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73 75 61 6c  ld and/or Visual
14470 20 53 74 75 64 69 6f 20 77 61 73 20 75 73 65 64   Studio was used
14480 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20   to..        #
14490 20 20 20 20 20 63 6f 6d 70 69 6c 65 20 74 68 65       compile the
144a0 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69   assembly binari
144b0 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a  es under test...
144c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
144d0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 144e0 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 144f0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch 14500 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste 14510 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 m.Data.SQLite bu 14520 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d ild year... "... 14530 0a 20 20 20 20 20 20 20 20 73 65 74 20 79 65 61 . set yea 14540 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d r [getBuildYear] 14550 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e .. addCon 14560 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 14570 72 67 73 20 62 75 69 6c 64 59 65 61 72 2e 20 24 rgs buildYear.$
14580 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 74  year]..        t
14590 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 145a0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 145b0 20 5c 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d \"$year \"\n].
145c0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
145d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
145e0 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  eck the current
145f0 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74  build configurat
14600 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f 75 6c  ion.  This shoul
14610 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 20  d normally..
14620 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 65      #       be e
14630 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72  ither "Debug" or
14640 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20 20   "Release"...
14650 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
14660 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 14670 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 14680 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check 14690 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 ing for System.D 146a0 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 ata.SQLite build 146b0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 2e configuration.. 146c0 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 . ".... s 146d0 65 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e et configuration 146e0 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 [getBuildConfig 146f0 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 uration].. 14700 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 14710 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c [appendArgs buil 14720 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 dConfiguration. 14730 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d$configuration].
14740 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $14750 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 14760 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 63 appendArgs \"$c
14770 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c 22 5c  onfiguration \"\
14780 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
14790 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
147a0 20 54 72 79 20 74 6f 20 73 65 74 75 70 20 61 6e   Try to setup an
147b0 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c 62   interrupt callb
147c0 61 63 6b 20 75 73 69 6e 67 20 74 68 65 20 73 63  ack using the sc
147d0 72 69 70 74 20 64 65 62 75 67 67 65 72 0d 0a 20  ript debugger..
147e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
147f0 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 65 6c 20  hat will cancel
14800 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 65 73 20  all SQL queries
14810 69 6e 20 70 72 6f 67 72 65 73 73 20 66 6f 72 20  in progress for
14820 61 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a 20 20  all database..
14830 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
14840 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20  nnections known
14850 74 6f 20 74 68 69 73 20 69 6e 74 65 72 70 72 65  to this interpre
14860 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ter...        #.
14870 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69  .        if {![i
14880 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
14890 73 71 6c 69 74 65 49 6e 74 65 72 72 75 70 74 43  sqliteInterruptC
148a0 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65 6e 20  allback)]} then
148b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
148c0 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c  upDbInterruptCal
148d0 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f 63 68  lback $::test_ch 148e0 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f annel$::test_lo
148f0 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  g..        }....
14900 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14910 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
14920 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65 20   for the native
14930 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20  runtime option,
14940 77 68 69 63 68 20 77 6f 75 6c 64 20 6d 65 61 6e  which would mean
14950 20 77 65 20 61 72 65 0d 0a 20 20 20 20 20 20 20   we are..
14960 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 20 74   #       using t
14970 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
14980 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20  sembly...
14990 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63   #..        chec
149a0 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f  kForRuntimeOptio
149b0 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  n $::test_channe 149c0 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 20 l native.... 149d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 149e0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if 149f0 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 73 the test suite s 14a00 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68 65 20 hould count the 14a10 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63 number of connec 14a20 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 tions.. # 14a30 20 20 20 20 20 20 20 22 6f 70 65 6e 65 64 22 20 "opened" 14a40 61 6e 64 20 22 63 6c 6f 73 65 64 22 20 66 72 6f and "closed" fro 14a50 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68 65 6e 20 m the pool when 14a60 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 determining if a 14a70 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 test.. # 14a80 20 20 20 20 20 20 20 70 61 73 73 65 64 2e 20 20 passed. 14a90 44 69 73 61 62 6c 69 6e 67 20 74 68 69 73 20 62 Disabling this b 14aa0 65 68 61 76 69 6f 72 20 69 73 20 73 6f 6d 65 74 ehavior is somet 14ab0 69 6d 65 73 20 6e 65 63 65 73 73 61 72 79 20 28 imes necessary ( 14ac0 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 e.g... # 14ad0 20 20 20 20 20 20 64 75 72 69 6e 67 20 74 68 65 during the 14ae0 20 72 65 6c 65 61 73 65 20 74 65 73 74 69 6e 67 release testing 14af0 20 70 72 6f 63 65 73 73 29 20 62 65 63 61 75 73 process) becaus 14b00 65 20 74 68 65 72 65 20 61 72 65 20 73 65 76 65 e there are seve 14b10 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ral.. # 14b20 20 20 20 20 20 74 65 73 74 73 20 74 68 61 74 20 tests that 14b30 72 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f 70 65 rely on the "ope 14b40 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 ned from pool" c 14b50 6f 75 6e 74 20 62 65 69 6e 67 20 67 72 65 61 74 ount being great 14b60 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 er.. # 14b70 20 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e 20 20 than zero. 14b80 54 68 65 73 65 20 74 65 73 74 73 20 6d 61 79 20 These tests may 14b90 66 61 69 6c 20 64 75 65 20 74 6f 20 74 68 65 20 fail due to the 14ba0 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74 69 non-deterministi 14bb0 63 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 c.. # 14bc0 20 20 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74 behavior of t 14bd0 68 65 20 43 4c 52 20 47 43 2c 20 65 76 65 6e 20 he CLR GC, even 14be0 77 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f when there is no 14bf0 20 62 75 67 20 69 6e 20 74 68 65 20 63 6f 64 65 bug in the code 14c00 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 14c10 20 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 0d being tested.. 14c20 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 14c30 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 checkForRunt 14c40 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 imeOption$::tes
14c50 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c  t_channel noPool
14c60 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 20 20  Counts....
14c70 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
14c80 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20  OTE: Report the
14c90 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 70  resource usage p
14ca0 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20  rior to running
14cb0 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20 20  any tests...
14cc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
14cd0 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75  eportSQLiteResou
14ce0 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  rces $::test_cha 14cf0 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nnel.... 14d00 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 14d10 45 3a 20 53 68 6f 77 20 74 68 65 20 61 63 74 69 E: Show the acti 14d20 76 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 ve test constrai 14d30 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d nts... #. 14d40 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
14d50 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
14d60 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d  appendArgs "----
14d70 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a 20 22 20   constraints: "
14d80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
14d90 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72  formatList [lsor
14da0 74 20 5b 67 65 74 43 6f 6e 73 74 72 61 69 6e 74  t [getConstraint
14db0 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d  s]] <none>] \n].
14dc0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
14dd0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 61        # NOTE: Sa
14de0 76 65 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73  ve the test cons
14df0 74 72 61 69 6e 74 73 20 66 6f 72 20 75 73 65 20  traints for use
14e00 62 79 20 74 68 72 65 61 64 73 20 63 72 65 61 74  by threads creat
14e10 65 64 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20  ed in this..
14e20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70 6c      #       appl
14e30 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2e 20  ication domain.
14e40 20 54 68 69 73 20 69 73 20 6e 65 63 65 73 73 61   This is necessa
14e50 72 79 20 62 65 63 61 75 73 65 20 61 6c 6c 20 74  ry because all t
14e60 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20  he Eagle..
14e70 20 20 23 20 20 20 20 20 20 20 22 74 65 73 74 20    #       "test
14e80 63 6f 6e 74 65 78 74 22 20 69 6e 66 6f 72 6d 61  context" informa
14e90 74 69 6f 6e 20 69 73 20 70 65 72 2d 74 68 72 65  tion is per-thre
14ea0 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ad...        #..
14eb0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
14ec0 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
14ed0 5f 63 6f 6e 73 74 72 61 69 6e 74 73 5d 7d 20 74  _constraints]} t
14ee0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
14ef0 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 73   set ::test_cons
14f00 74 72 61 69 6e 74 73 20 24 3a 3a 65 61 67 6c 65  traints $::eagle 14f10 5f 74 65 73 74 73 28 63 6f 6e 73 74 72 61 69 6e _tests(constrain 14f20 74 73 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ts).. }.. 14f30 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 14f40 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 # NOTE: Loa 14f50 64 20 74 68 65 20 22 61 66 74 65 72 2d 63 6f 6e d the "after-con 14f60 73 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d straints" custom 14f70 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 per-user and/or 14f80 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 per-host.. 14f90 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 # test 14fa0 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 settings now... 14fb0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 14fc0 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 uplevel 1 [lis 14fd0 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 t loadSQLiteTest 14fe0 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 Settings$::test
14ff0 5f 63 68 61 6e 6e 65 6c 20 2e 61 66 74 65 72 5d  _channel .after]
15000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
15010 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
15020 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73  how when our tes
15030 74 73 20 61 63 74 75 61 6c 6c 79 20 62 65 67 61  ts actually bega
15040 6e 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20  n (now)...
15050 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
15060 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 15070 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 15080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 15090 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e --- System.Data. 150a0 53 51 4c 69 74 65 20 74 65 73 74 73 20 62 65 67 SQLite tests beg 150b0 61 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 an at " \.. 150c0 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f [clock fo 150d0 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f rmat [clock seco 150e0 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 nds]] \n].. 150f0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 15100 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 proc runSQLite 15110 54 65 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d 20 TestEpilogue {} 15120 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 15130 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 # NOTE: Skip r 15140 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f unning our custo 15150 6d 20 65 70 69 6c 6f 67 75 65 20 69 66 20 74 68 m epilogue if th 15160 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 e main one has b 15170 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 een.. # 15180 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 skipped... 15190 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 151a0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 151b0 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65 61 67 6c no(epilogue.eagl 151c0 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 e)]} then {.. 151d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 151e0 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 # NOTE: Show whe 151f0 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 75 n our tests actu 15200 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e 6f 77 29 ally ended (now) 15210 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 15220 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
15230 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
15240 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
15250 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73         "---- Sys
15260 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
15270 74 65 73 74 73 20 65 6e 64 65 64 20 61 74 20 22  tests ended at "
15280 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
15290 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63  [clock format [c
152a0 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c  lock seconds]] \
152b0 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
152c0 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49  .        # BUGFI
152d0 58 3a 20 42 65 66 6f 72 65 20 63 68 65 63 6b 69  X: Before checki
152e0 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73  ng the final res
152f0 6f 75 72 63 65 73 20 69 6e 20 75 73 65 20 62 79  ources in use by
15300 20 53 51 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a 20   SQLite, make..
15310 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
15320 20 73 75 72 65 20 62 6f 74 68 20 6f 66 20 74 68   sure both of th
15330 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64  e PRAGMA related
15340 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73   directory names
15350 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20   are freed...
15360 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15370 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69  checkForSQLiteDi
15380 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73  rectories $::tes 15390 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a t_channel true.. 153a0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 153b0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73 # NOTE: Als 153c0 6f 20 72 65 70 6f 72 74 20 74 68 65 20 72 65 73 o report the res 153d0 6f 75 72 63 65 20 75 73 61 67 65 20 61 66 74 65 ource usage afte 153e0 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 r running the te 153f0 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d sts... #. 15400 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 . reportS 15410 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 QLiteResources$
15420 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
15430 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
15440 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70       # NOTE: Rep
15450 6f 72 74 20 74 68 65 20 63 72 69 74 69 63 61 6c  ort the critical
15460 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61   handle counts a
15470 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65  fter running the
15480 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20   tests...
15490 20 23 0d 0a 20 20 20 20 20 20 20 20 67 65 74 53   #..        getS
154a0 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74  QLiteHandleCount
154b0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s \$::test_channe
154c0 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  l..      }..
154d0 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23 23  }.....    ######
154e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15500 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15520 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23  #####..    #####
15530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15540 23 23 23 23 23 23 23 23 20 45 4e 44 20 45 61 67  ######## END Eag
15550 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23  le ONLY ########
15560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15570 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23  ######..    ####
15580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
155a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
155b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
155c0 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a  #######..  }....
155d0 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53    #..  # NOTE: S
155e0 61 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  ave the name of
155f0 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f  the directory co
15600 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69  ntaining this fi
15610 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b  le...  #..  if {
15620 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f  ![info exists co
15630 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d  mmon_directory]}
15640 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74   then {..    set
15650 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72   common_director
15660 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  y [file dirname
15670 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a  [info script]]..
15680 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20    }....  #..  #
15690 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74 68  NOTE: Provide th
156a0 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
156b0 4c 69 74 65 20 74 65 73 74 20 70 61 63 6b 61 67  Lite test packag
156c0 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72  e to the interpr
156d0 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61  eter...  #..  pa
156e0 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53 79  ckage provide Sy
156f0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
15700 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a        .Test 1.0..}..