System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 128ec32ef2a9698401ac6c149bec5d456547b47f:

• File Tests/common.eagle — part of check-in [368a495e57] at 2013-11-01 06:23:44 on branch trunk — In the test suite infrastructure, also check the configured LKG directory, if any, for available System.Data.SQLite assemblies. (user: mistachkin size: 87640)

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 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
8440: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
8450: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
8460: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69  checkForSQLiteLi
8470: 62 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 6c 20  brary { channel
8480: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73  } {..      tputs
8490: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 84a0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c checking for SQL 84b0: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 84c0: 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 ... ".... i 84d0: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 84e0: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 84f0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 8500: 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 +NonPublic Syste 8510: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ 8520: 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 20 20 Lite3 \.. 8530: 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 65 72 SQLiteVer 8540: 73 69 6f 6e 7d 20 76 65 72 73 69 6f 6e 5d 20 3d sion} version] = 8550: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 8560: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8570: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 8580: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 the returned ve 8590: 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 rsion was null. 85a0: 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 If so, make it 85b0: 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 easy.. # 85c0: 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a to spot... 85d0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 85e0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 85f0: 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 ength$version]
8600: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
8610: 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73          set vers
8620: 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20  ion null..
8630: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
8640: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
8650: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65  : Attempt to que
8660: 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f  ry the Fossil so
8670: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20  urce identifier
8680: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a  for the SQLite..
8690: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
86a0: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library...
86b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
86c0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
86d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
86e0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
86f0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
8700: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
8710: 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20  te.SQLite3 \..
8720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
8730: 4c 69 74 65 53 6f 75 72 63 65 49 64 7d 20 73 6f  LiteSourceId} so
8740: 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b 0d  urceId]} then {.
8750: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
8760: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
8770: 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 75 65  We failed to que
8780: 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f  ry the Fossil so
8790: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 2e  urce identifier.
87a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
87b0: 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75           set sou
87c0: 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a 20  rceId unknown..
87d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
87e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
87f0: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
8800: 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 6f 73  the returned Fos
8810: 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74  sil source ident
8820: 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e 20  ifier was null.
8830: 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20   If..        #
8840: 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69 74       so, make it
8850: 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d 0a   easy to spot...
8860: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
8870: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
8880: 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d  ength $sourceId] 8890: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 88a0: 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 set sou 88b0: 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 rceId null.. 88c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 88d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 88e0: 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c TE: Yes, the SQL 88f0: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 8900: 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 appears to be a 8910: 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 vailable... 8920: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 #.. ad 8930: 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 dConstraint SQLi 8940: 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 te.... tp 8950: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
8960: 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22  pendArgs "yes ("
8970: 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73   $version " "$s
8980: 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a  ourceId ")\n"]..
8990: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
89a0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 89b0: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 hannel no\n.. 89c0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 89d0: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo 89e0: 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 7b rSQLiteInterop { 89f0: 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 channel } {.. 8a00: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
8a10: 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e  el "---- checkin
8a20: 67 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e 74  g for SQLite int
8a30: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e 2e  erop assembly...
8a40: 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   "....      if {
8a50: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
8a60: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
8a70: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
8a80: 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44  nPublic System.D
8a90: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
8aa0: 65 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e3 \..
8ab0: 20 20 20 20 49 6e 74 65 72 6f 70 56 65 72 73 69      InteropVersi
8ac0: 6f 6e 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20  on} version] ==
8ad0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
8ae0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
8af0: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
8b00: 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 72 73  he returned vers
8b10: 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49  ion was null.  I
8b20: 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61  f so, make it ea
8b30: 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  sy..        #
8b40: 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20      to spot...
8b50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8b60: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
8b70: 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d  gth $version] == 8b80: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 8b90: 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f set versio 8ba0: 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 n null.. 8bb0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 8bc0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 8bd0: 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72 79 Attempt to query 8be0: 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 the Fossil sour 8bf0: 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f ce identifier fo 8c00: 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 r the SQLite.. 8c10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 8c20: 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 re library... 8c30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8c40: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 8c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob 8c60: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 8c70: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 gs +NonPublic Sy 8c80: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 8c90: 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 .SQLite3 \.. 8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 65 Inte 8cb0: 72 6f 70 53 6f 75 72 63 65 49 64 7d 20 73 6f 75 ropSourceId} sou 8cc0: 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a rceId]} then {.. 8cd0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 8ce0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 # NOTE: W 8cf0: 65 20 66 61 69 6c 65 64 20 74 6f 20 71 75 65 72 e failed to quer 8d00: 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 y the Fossil sou 8d10: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 2e 0d rce identifier.. 8d20: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 8d30: 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 set sour 8d40: 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 ceId unknown.. 8d50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 8d60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 8d70: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 8d80: 68 65 20 72 65 74 75 72 6e 65 64 20 46 6f 73 73 he returned Foss 8d90: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 il source identi 8da0: 66 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e 20 20 fier was null. 8db0: 49 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 If.. # 8dc0: 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 so, make it 8dd0: 65 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 easy to spot... 8de0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8df0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 8e00: 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d 20 ngth$sourceId]
8e10: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
8e20: 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72          set sour
8e30: 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20  ceId null..
8e40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
8e50: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
8e60: 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69  E: Yes, the SQLi
8e70: 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  te interop assem
8e80: 62 6c 79 20 61 70 70 65 61 72 73 20 74 6f 20 62  bly appears to b
8e90: 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20  e available...
8ea0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8eb0: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53   addConstraint S
8ec0: 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a 0d 0a  QLiteInterop....
8ed0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 8ee0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 8ef0: 67 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 gs "yes ("$vers
8f00: 69 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49  ion " " $sourceI 8f10: 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 d ")\n"].. 8f20: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 8f30: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
8f40: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a   no\n..      }..
8f50: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
8f60: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  oc checkForSQLit
8f70: 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20  eDefineConstant
8f80: 7b 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d  { channel name }
8f90: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20   {..      tputs
8fa0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 8fb0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 8fc0: 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 "---- checking 8fd0: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 for System.Data 8fe0: 2e 53 51 4c 69 74 65 20 64 65 66 69 6e 65 20 63 .SQLite define c 8ff0: 6f 6e 73 74 61 6e 74 20 5c 22 22 20 24 6e 61 6d onstant \""$nam
9000: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  e \..          "
9010: 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20  \"... "]....
9020: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
9030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
9040: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
9050: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79  gs +NonPublic Sy
9060: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
9070: 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20  .SQLite3 \..
9080: 20 20 20 20 20 20 20 20 20 20 44 65 66 69 6e 65            Define
9090: 43 6f 6e 73 74 61 6e 74 73 7d 20 64 65 66 69 6e  Constants} defin
90a0: 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30  eConstants] == 0
90b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
90c0: 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d    if {[lsearch -
90d0: 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 24 64  exact -nocase $d 90e0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 20 24 efineConstants$
90f0: 6e 61 6d 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65  name] != -1} the
9100: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
9110: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
9120: 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20 64 65  TE: Yes, this de
9130: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 77 61  fine constant wa
9140: 73 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 20 74  s enabled when t
9150: 68 65 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20  he managed..
9160: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73        #       as
9170: 73 65 6d 62 6c 79 20 77 61 73 20 63 6f 6d 70 69  sembly was compi
9180: 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  led...
9190: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64  #..          add
91a0: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
91b0: 6e 64 41 72 67 73 20 64 65 66 69 6e 65 43 6f 6e  ndArgs defineCon
91c0: 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74  stant.System.Dat
91d0: 61 2e 53 51 4c 69 74 65 2e 20 24 6e 61 6d 65 5d  a.SQLite. $name] 91e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 .... tp 91f0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 uts$channel yes
9200: 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c  \n..        } el
9210: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
9220: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n 9230: 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a o\n.. }.. 9240: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 9250: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
9260: 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e 0d 0a  hannel error\n..
9270: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
9280: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44  ...    proc getD
9290: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 7b 7d  ateTimeFormat {}
92a0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
92b0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
92c0: 70 72 6f 63 65 64 75 72 65 20 73 69 6d 70 6c 79  procedure simply
92d0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 22 64 65   returns the "de
92e0: 66 61 75 6c 74 22 20 44 61 74 65 54 69 6d 65 20  fault" DateTime
92f0: 66 6f 72 6d 61 74 20 75 73 65 64 0d 0a 20 20 20  format used..
9300: 20 20 20 23 20 20 20 20 20 20 20 62 79 20 74 68     #       by th
9310: 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
9320: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
9330: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
9340: 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74  :datetime_format
9350: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
9360: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
9370: 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72   $::datetime_for 9380: 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b mat] > 0} then { 9390: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 93a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 # NOTE: Ret 93b0: 75 72 6e 20 74 68 65 20 6d 61 6e 75 61 6c 6c 79 urn the manually 93c0: 20 6f 76 65 72 72 69 64 64 65 6e 20 76 61 6c 75 overridden valu 93d0: 65 20 66 6f 72 20 74 68 65 20 44 61 74 65 54 69 e for the DateTi 93e0: 6d 65 20 66 6f 72 6d 61 74 2e 0d 0a 20 20 20 20 me format... 93f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 9400: 65 74 75 72 6e 20 24 3a 3a 64 61 74 65 74 69 6d eturn$::datetim
9410: 65 5f 66 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20  e_format..
9420: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
9430: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
9440: 4f 54 45 3a 20 52 65 74 75 72 6e 20 61 6e 20 49  OTE: Return an I
9450: 53 4f 38 36 30 31 20 44 61 74 65 54 69 6d 65 20  SO8601 DateTime
9460: 66 6f 72 6d 61 74 20 63 6f 6d 70 61 74 69 62 6c  format compatibl
9470: 65 20 77 69 74 68 20 53 51 4c 69 74 65 2c 0d 0a  e with SQLite,..
9480: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
9490: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
94a0: 74 65 2c 20 61 6e 64 20 73 75 69 74 61 62 6c 65  te, and suitable
94b0: 20 66 6f 72 20 72 6f 75 6e 64 2d 74 72 69 70 70   for round-tripp
94c0: 69 6e 67 20 77 69 74 68 20 74 68 65 0d 0a 20 20  ing with the..
94d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 44 61        #       Da
94e0: 74 65 54 69 6d 65 20 63 6c 61 73 73 20 6f 66 20  teTime class of
94f0: 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 2e 20 20  the framework.
9500: 49 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73  If this value is
9510: 20 63 68 61 6e 67 65 64 2c 0d 0a 20 20 20 20 20   changed,..
9520: 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 6f     #       vario
9530: 75 73 20 74 65 73 74 73 20 6d 61 79 20 66 61 69  us tests may fai
9540: 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  l...        #..
9550: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 79         return "y
9560: 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a  yyy-MM-dd HH:mm:
9570: 73 73 2e 46 46 46 46 46 46 46 4b 22 0d 0a 20 20  ss.FFFFFFFK"..
9580: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
9590: 0a 20 20 20 20 70 72 6f 63 20 65 6e 75 6d 65 72  .    proc enumer
95a0: 61 62 6c 65 54 6f 4c 69 73 74 20 7b 20 65 6e 75  ableToList { enu
95b0: 6d 65 72 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20  merable } {..
95c0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c     set result [l
95d0: 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ist]....      if
95e0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
95f0: 20 24 65 6e 75 6d 65 72 61 62 6c 65 5d 20 3d 3d   $enumerable] == 9600: 20 30 20 7c 7c 20 24 65 6e 75 6d 65 72 61 62 6c 0 ||$enumerabl
9610: 65 20 65 71 20 22 6e 75 6c 6c 22 7d 20 74 68 65  e eq "null"} the
9620: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
9630: 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20  urn $result.. 9640: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 }.... ob 9650: 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c ject foreach -al 9660: 69 61 73 20 69 74 65 6d 20 24 65 6e 75 6d 65 72 ias item$enumer
9670: 61 62 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  able {..
9680: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
9690: 74 68 20 24 69 74 65 6d 5d 20 3e 20 30 7d 20 74  th $item] > 0} t 96a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 96b0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 lappend result 96c0: 5b 24 69 74 65 6d 20 54 6f 53 74 72 69 6e 67 5d [$item ToString]
96d0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
96e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
96f0: 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result.. 9700: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 9710: 20 63 61 74 63 68 41 6e 64 52 65 74 75 72 6e 20 catchAndReturn 9720: 7b 20 73 63 72 69 70 74 20 7b 73 74 61 63 6b 54 { script {stackT 9730: 72 61 63 65 20 66 61 6c 73 65 7d 20 7b 73 74 72 race false} {str 9740: 69 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ict true} } {.. 9750: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 9760: 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 NOTE: Evaluate t 9770: 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 he script provid 9780: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 9790: 20 69 6e 20 74 68 65 69 72 20 63 6f 6e 74 65 78 in their contex 97a0: 74 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 t,.. # 97b0: 20 20 63 61 70 74 75 72 69 6e 67 20 62 6f 74 68 capturing both 97c0: 20 74 68 65 20 72 65 73 75 6c 74 20 61 6e 64 20 the result and 97d0: 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e the return code. 97e0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 97f0: 20 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 set code [catch 9800: 20 7b 75 70 6c 65 76 65 6c 20 31 20 24 73 63 72 {uplevel 1$scr
9810: 69 70 74 7d 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a  ipt} result]....
9820: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
9830: 20 4e 4f 54 45 3a 20 44 69 64 20 74 68 65 20 73   NOTE: Did the s
9840: 63 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62  cript provided b
9850: 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 4e 4f 54  y our caller NOT
9860: 20 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72 3f   raise an error?
9870: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
9880: 20 69 66 20 7b 24 73 74 72 69 63 74 20 26 26 20   if {$strict && 9890: 24 63 6f 64 65 20 3d 3d 20 30 20 7c 7c 20 21 24$code == 0 || !$98a0: 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 65 20 strict &&$code
98b0: 21 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  != 1} then {..
98c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
98d0: 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73   # NOTE: Success
98e0: 2e 20 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74  .  Return a list
98f0: 20 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e   with the return
9900: 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65   code and the re
9910: 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  sult...        #
9920: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9930: 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65   [list $code$re
9940: 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65  sult]..      } e
9950: 6c 73 65 69 66 20 7b 24 73 74 61 63 6b 54 72 61  lseif {$stackTra 9960: 63 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ce} then {.. 9970: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 9980: 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 NOTE: Failure. 9990: 20 4f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 Our caller want 99a0: 73 20 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 s a full stack t 99b0: 72 61 63 65 20 28 69 66 20 61 70 70 6c 69 63 61 race (if applica 99c0: 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 ble),.. # 99d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 20 return a 99e0: 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 list with the re 99f0: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 turn code and th 9a00: 65 20 72 65 73 75 6c 74 20 76 65 72 62 61 74 69 e result verbati 9a10: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 m... #.. 9a20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l 9a30: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c ist$code $resul 9a40: 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 t].. } else 9a50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 9a60: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 9a70: 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c ailure. Our cal 9a80: 6c 65 72 20 64 6f 65 73 20 6e 6f 74 20 77 61 6e ler does not wan 9a90: 74 20 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 t a full stack t 9aa0: 72 61 63 65 20 28 69 66 0d 0a 20 20 20 20 20 20 race (if.. 9ab0: 20 20 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 # applic 9ac0: 61 62 6c 65 29 2c 20 72 65 74 75 72 6e 20 61 20 able), return a 9ad0: 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 list with the re 9ae0: 74 75 72 6e 20 63 6f 64 65 2c 20 74 68 65 20 65 turn code, the e 9af0: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 rror.. # 9b00: 20 20 20 20 20 20 63 6f 64 65 20 66 6f 72 20 74 code for t 9b10: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20 he interpreter, 9b20: 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 and the error me 9b30: 73 73 61 67 65 20 75 70 20 74 6f 20 74 68 65 0d ssage up to the. 9b40: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 9b50: 20 70 6f 69 6e 74 20 77 68 65 72 65 20 74 68 65 point where the 9b60: 20 73 74 61 63 6b 20 74 72 61 63 65 20 73 68 6f stack trace sho 9b70: 75 6c 64 20 73 74 61 72 74 2e 0d 0a 20 20 20 20 uld start... 9b80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 9b90: 65 74 20 69 6e 64 65 78 20 5b 73 74 72 69 6e 67 et index [string 9ba0: 20 66 69 72 73 74 20 22 20 20 20 61 74 20 22 20 first " at " 9bb0: 24 72 65 73 75 6c 74 5d 3b 20 23 20 48 41 43 4b$result]; # HACK
9bc0: 3a 20 52 65 6c 69 61 62 6c 65 3f 0d 0a 0d 0a 20  : Reliable?....
9bd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
9be0: 69 73 74 20 24 63 6f 64 65 20 24 3a 3a 65 72 72  ist $code$::err
9bf0: 6f 72 43 6f 64 65 20 5b 65 78 70 72 20 7b 24 69  orCode [expr {$i 9c00: 6e 64 65 78 20 21 3d 20 2d 31 20 3f 20 5c 0d 0a ndex != -1 ? \.. 9c10: 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 9c20: 69 6e 67 20 74 72 69 6d 20 5b 73 74 72 69 6e 67 ing trim [string 9c30: 20 72 61 6e 67 65 20 24 72 65 73 75 6c 74 20 30 range$result 0
9c40: 20 24 69 6e 64 65 78 5d 5d 20 3a 20 24 72 65 73   $index]] :$res
9c50: 75 6c 74 7d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d  ult}]]..      }.
9c60: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
9c70: 72 6f 63 20 63 6f 6d 70 69 6c 65 43 53 68 61 72  roc compileCShar
9c80: 70 57 69 74 68 20 7b 0d 0a 20 20 20 20 20 20 20  pWith {..
9c90: 20 20 20 20 20 74 65 78 74 20 6d 65 6d 6f 72 79       text memory
9ca0: 20 73 79 6d 62 6f 6c 73 20 73 74 72 69 63 74 20   symbols strict
9cb0: 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 65  resultsVarName e
9cc0: 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 66 69 6c  rrorsVarName fil
9cd0: 65 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20  eNames..
9ce0: 20 20 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20 20      args } {..
9cf0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
9d00: 4f 54 45 3a 20 53 69 6e 63 65 20 77 65 20 61 72  OTE: Since we ar
9d10: 65 20 67 6f 69 6e 67 20 74 6f 20 75 73 65 20 74  e going to use t
9d20: 68 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20  his method name
9d30: 61 20 6c 6f 74 2c 20 61 73 73 69 67 6e 20 69 74  a lot, assign it
9d40: 20 74 6f 20 61 0d 0a 20 20 20 20 20 20 23 20 20   to a..      #
9d50: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 66 69       variable fi
9d60: 72 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  rst...      #..
9d70: 20 20 20 20 20 73 65 74 20 61 64 64 20 52 65 66       set add Ref
9d80: 65 72 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65  erencedAssemblie
9d90: 73 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 20 20 23  s.Add....      #
9da0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
9db0: 43 72 65 61 74 65 20 74 68 65 20 62 61 73 65 20  Create the base
9dc0: 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75  command to evalu
9dd0: 61 74 65 20 61 6e 64 20 61 64 64 20 74 68 65 20  ate and add the
9de0: 70 72 6f 70 65 72 74 79 20 73 65 74 74 69 6e 67  property setting
9df0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
9e00: 20 74 68 61 74 20 61 72 65 20 61 6c 6d 6f 73 74   that are almost
9e10: 20 61 6c 77 61 79 73 20 6e 65 65 64 65 64 20 62   always needed b
9e20: 79 20 6f 75 72 20 75 6e 69 74 20 74 65 73 74 73  y our unit tests
9e30: 20 28 69 2e 65 2e 20 74 68 65 20 53 79 73 74 65   (i.e. the Syste
9e40: 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  m..      #
9e50: 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61   and System.Data
9e60: 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65   assembly refere
9e70: 6e 63 65 73 29 2e 0d 0a 20 20 20 20 20 20 23 0d  nces)...      #.
9e80: 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61  .      set comma
9e90: 6e 64 20 5b 6c 69 73 74 20 63 6f 6d 70 69 6c 65  nd [list compile
9ea0: 43 53 68 61 72 70 20 24 74 65 78 74 20 24 6d 65  CSharp $text$me
9eb0: 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73  mory $symbols$s
9ec0: 74 72 69 63 74 20 72 65 73 75 6c 74 73 20 5c 0d  trict results \.
9ed0: 0a 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72  .          error
9ee0: 73 20 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c  s $add System.dl 9ef0: 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61 l$add System.Da
9f00: 74 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74  ta.dll $add Syst 9f10: 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 em.Xml.dll].... 9f20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 9f30: 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 68 NOTE: Add all th 9f40: 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c 65 20 e provided file 9f50: 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d 62 6c names as assembl 9f60: 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20 y references... 9f70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f #.. fo 9f80: 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
9f90: 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  fileNames {..
9fa0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d       lappend com
9fb0: 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74 42 69  mand $add [getBi 9fc0: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
9fd0: 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d  leName]..      }
9fe0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
9ff0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74     # NOTE: Add t
a000: 68 65 20 65 78 74 72 61 20 61 72 67 75 6d 65 6e  he extra argumen
a010: 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74  ts, if any, to t
a020: 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76  he command to ev
a030: 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 23  aluate...      #
a040: 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70  ..      eval lap
a050: 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72  pend command $ar a060: 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 gs.... #.. a070: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69 # NOTE: Ali a080: 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 as the compiler a090: 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 61 6e local results an a0a0: 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 62 6c d errors variabl a0b0: 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 es to the.. a0c0: 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c # variabl a0d0: 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 65 64 e names provided a0e0: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d by our caller.. a0f0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. a100: 75 70 76 61 72 20 31 20 24 72 65 73 75 6c 74 73 upvar 1$results
a110: 56 61 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 0d  VarName results.
a120: 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $a130: 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 65 72 errorsVarName er a140: 72 6f 72 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d rors.... #. a150: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 . # NOTE: E a160: 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e 73 valuate the cons a170: 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65 tructed [compile a180: 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20 CSharp] command a190: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d 0a and return the.. a1a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re a1b0: 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a sult... #.. a1c0: 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d eval$comm
a1d0: 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  and..    }.....
a1e0: 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79     proc isMemory
a1f0: 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20  Db { fileName }
a200: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
a210: 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65    # NOTE: Is the
a220: 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62   specified datab
a230: 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 65  ase file name re
a240: 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  ally an in-memor
a250: 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 20  y database?..
a260: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
a270: 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e  rn [expr {$fileN a280: 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a ame eq ":memory: a290: 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 " || \.. a2a0: 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 [string range a2b0: 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20$fileName 0 12]
a2c0: 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79  eq "file::memory
a2d0: 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  :"}]..    }.....
a2e0: 20 20 20 20 70 72 6f 63 20 69 73 54 61 62 6c 65      proc isTable
a2f0: 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61 72  InDb { name {var
a300: 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20  Name db} } {..
a310: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
a320: 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68  OTE: Refer to th
a330: 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69  e specified vari
a340: 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29  able (e.g. "db")
a350: 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context
a360: 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20  of our..      #
a370: 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 49        caller.  I
a380: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 64  t contains the d
a390: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
a3a0: 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20 77  on handle that w
a3b0: 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 20  ill be..      #
a3c0: 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 65 78        used to ex
a3d0: 65 63 75 74 65 20 74 68 65 20 71 75 65 72 79 20  ecute the query
a3e0: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
a3f0: 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74  e if the named t
a400: 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 23  able is..      #
a410: 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 69         present i
a420: 6e 20 74 68 61 74 20 64 61 74 61 62 61 73 65 2e  n that database.
a430: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
a440: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam a450: 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d e db.... #. a460: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 . # NOTE: E a470: 78 65 63 75 74 65 20 74 68 65 20 53 51 4c 20 71 xecute the SQL q a480: 75 65 72 79 20 61 67 61 69 6e 73 74 20 74 68 65 uery against the a490: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 sqlite_master t a4a0: 61 62 6c 65 20 74 6f 20 63 68 65 63 6b 20 69 66 able to check if a4b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # a4c0: 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 the named table a4d0: 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 72 is present and r a4e0: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 eturn non-zero i a4f0: 66 20 69 74 20 69 73 2e 0d 0a 20 20 20 20 20 20 f it is... a500: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 #.. return a510: 5b 65 78 70 72 20 7b 5b 73 71 6c 20 65 78 65 63 [expr {[sql exec a520: 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 ute -execute sca a530: 6c 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 lar$db \..
a540: 20 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f 55       "SELECT COU
a550: 4e 54 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74  NT(*) FROM sqlit
a560: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  e_master WHERE t
a570: 79 70 65 20 3d 20 27 74 61 62 6c 65 27 20 41 4e  ype = 'table' AN
a580: 44 20 6e 61 6d 65 20 3d 20 3f 3b 22 20 5c 0d 0a  D name = ?;" \..
a590: 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20            [list
a5a0: 70 61 72 61 6d 31 20 53 74 72 69 6e 67 20 24 6e  param1 String $n a5b0: 61 6d 65 5d 5d 20 3e 20 30 7d 5d 0d 0a 20 20 20 ame]] > 0}].. a5c0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc a5d0: 74 72 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 trimSql { sql } a5e0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 {.. return a5f0: 5b 72 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 [regsub -all -- a600: 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 {\s+} [string tr a610: 69 6d 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 im$sql] " "]..
a620: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
a630: 63 20 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73  c executeSql { s
a640: 71 6c 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65  ql {execute none
a650: 7d 20 7b 66 69 6c 65 4e 61 6d 65 20 22 22 7d 20  } {fileName ""}
a660: 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
a670: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66  string length $f a680: 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 ileName] == 0} t a690: 68 65 6e 20 7b 73 65 74 20 66 69 6c 65 4e 61 6d hen {set fileNam a6a0: 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 e :memory:}.. a6b0: 20 20 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 setupDb$file
a6c0: 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22  Name "" "" "" ""
a6d0: 20 22 22 20 66 61 6c 73 65 20 66 61 6c 73 65 20   "" false false
a6e0: 66 61 6c 73 65 20 66 61 6c 73 65 20 6d 65 6d 44  false false memD
a6f0: 62 0d 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b  b....      try {
a700: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
a710: 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65   [sql execute -e
a720: 78 65 63 75 74 65 20 24 65 78 65 63 75 74 65 20  xecute $execute a730: 24 6d 65 6d 44 62 20 24 73 71 6c 5d 0d 0a 20 20$memDb $sql].. a740: 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d } finally {. a750: 0a 20 20 20 20 20 20 20 20 63 6c 65 61 6e 75 70 . cleanup a760: 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 6d 65 6d Db$fileName mem
a770: 44 62 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a  Db false false..
a780: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
a790: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75  ...    proc setu
a7a0: 70 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  pDb {..
a7b0: 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64     fileName {mod
a7c0: 65 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 46  e ""} {dateTimeF
a7d0: 6f 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 65 54  ormat ""} {dateT
a7e0: 69 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61  imeKind ""} {fla
a7f0: 67 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20  gs ""}..
a800: 20 20 20 20 7b 65 78 74 72 61 20 22 22 7d 20 7b      {extra ""} {
a810: 71 75 61 6c 69 66 79 20 74 72 75 65 7d 20 7b 64  qualify true} {d
a820: 65 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 72 69  elete true} {uri
a830: 20 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20   false}..
a840: 20 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 79 20       {temporary
a850: 74 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64  true} {varName d
a860: 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  b} } {..      #.
a870: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46  .      # NOTE: F
a880: 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72  irst, see if our
a890: 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75   caller has requ
a8a0: 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f  ested an in-memo
a8b0: 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20  ry database...
a8c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
a8d0: 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d   isMemory [isMem
a8e0: 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d  oryDb $fileName] a8f0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. a900: 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e # NOTE: For n a910: 6f 77 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74 ow, all test dat a920: 61 62 61 73 65 73 20 75 73 65 64 20 62 79 20 74 abases used by t a930: 68 65 20 74 65 73 74 20 73 75 69 74 65 20 61 72 he test suite ar a940: 65 20 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 20 e placed.. a950: 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65 # into the a960: 20 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74 database direct a970: 6f 72 79 2e 20 20 45 61 63 68 20 64 61 74 61 62 ory. Each datab a980: 61 73 65 20 61 6e 64 20 72 65 6c 61 74 65 64 20 ase and related a990: 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 files.. # a9a0: 20 20 20 20 20 75 73 65 64 20 62 79 20 61 20 74 used by a t a9b0: 65 73 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6c est should be cl a9c0: 65 61 6e 65 64 20 75 70 20 62 79 20 74 68 61 74 eaned up by that a9d0: 20 74 65 73 74 20 75 73 69 6e 67 20 74 68 65 0d test using the. a9e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 . # " a9f0: 63 6c 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65 cleanupDb" proce aa00: 64 75 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 dure, below... aa10: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if aa20: 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 {!$isMemory && $aa30: 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d qualify} then {. aa40: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c . set fil aa50: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e eName [file join aa60: 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 [getDatabaseDir aa70: 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 ectory] [file ta aa80: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a il$fileName]]..
aa90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
aaa0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
aab0: 3a 20 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65  : By default, de
aac0: 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69  lete any pre-exi
aad0: 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77  sting database w
aae0: 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c  ith the same fil
aaf0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
ab00: 20 6e 61 6d 65 20 69 66 20 69 74 20 63 75 72 72   name if it curr
ab10: 65 6e 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20  ently exists...
ab20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
ab30: 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20   {!$isMemory && ab40: 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65$delete && [file
ab50: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam ab60: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. ab70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # ab80: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t ab90: 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 o delete any pre aba0: 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 -existing databa abb0: 73 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 se with the same abc0: 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 file.. # abd0: 20 20 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 name... abe0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. abf0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c if {[catch {fil ac00: 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 e delete$fileNa
ac10: 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e  me} error]} then
ac20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
ac30: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
ac40: 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61  E: We somehow fa
ac50: 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74  iled to delete t
ac60: 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20  he file, report
ac70: 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  why...
ac80: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  #..          tpu
ac90: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann aca0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ acb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. acc0: 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f acd0: 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 ailed to delete ace0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 database file \" acf0: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 "$fileName \..
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
ad10: 20 64 75 72 69 6e 67 20 73 65 74 75 70 2c 20 65   during setup, e
ad20: 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er ad30: 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. ad40: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... ad50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # ad60: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t ad70: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var ad80: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" ad90: 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context ada0: 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # adb0: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 caller. adc0: 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 The handle to th add0: 65 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 e opened databas ade0: 65 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 e will be stored adf0: 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 there... # ae00: 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 ae10: 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20$varName db....
ae20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
ae30: 4e 4f 54 45 3a 20 53 74 61 72 74 20 62 75 69 6c  NOTE: Start buil
ae40: 64 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  ding the connect
ae50: 69 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 65  ion string.  The
ae60: 20 6f 6e 6c 79 20 72 65 71 75 69 72 65 64 20 70   only required p
ae70: 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  ortion..      #
ae80: 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e        of the con
ae90: 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69  nection string i
aea0: 73 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63  s the data sourc
aeb0: 65 2c 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e  e, which contain
aec0: 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  s the..      #
aed0: 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69       database fi
aee0: 6c 65 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20  le name itself.
aef0: 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 77   If our caller w
af00: 61 6e 74 73 20 74 6f 20 75 73 65 20 61 20 55 52  ants to use a UR
af10: 49 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20  I as..      #
af20: 20 20 20 20 74 68 65 20 64 61 74 61 20 73 6f 75      the data sou
af30: 72 63 65 2c 20 75 73 65 20 74 68 65 20 46 75 6c  rce, use the Ful
af40: 6c 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  lUri connection
af50: 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20  string property
af60: 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  to..      #
af70: 20 20 70 72 65 76 65 6e 74 20 74 68 65 20 64 61    prevent the da
af80: 74 61 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67  ta source string
af90: 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67   from being mang
afa0: 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  led...      #..
afb0: 20 20 20 20 20 69 66 20 7b 24 75 72 69 7d 20 74       if {$uri} t afc0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 hen {.. s afd0: 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 et connection {F afe0: 75 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d ullUri=${fileNam
aff0: 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  e}}..      } els
b000: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
b010: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74   connection {Dat
b020: 61 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e  a Source=${fileN b030: 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a ame}}.. }.. b040: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. b050: 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 # NOTE: Since t b060: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 68 61 his procedure ha b070: 73 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f s no special kno b080: 77 6c 65 64 67 65 20 6f 66 20 77 68 61 74 20 74 wledge of what t b090: 68 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 he default.. b0a0: 20 20 23 20 20 20 20 20 20 20 73 65 74 74 69 6e # settin b0b0: 67 20 69 73 20 66 6f 72 20 74 68 65 20 54 6f 46 g is for the ToF b0c0: 75 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 ullPath connecti b0d0: 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 on string proper b0e0: 79 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 y, always.. b0f0: 20 23 20 20 20 20 20 20 20 61 64 64 20 74 68 65 # add the b100: 20 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 value we know a b110: 62 6f 75 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e bout to the conn b120: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a ection string... b130: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 #.. a b140: 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e ppend connection b150: 20 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b {;ToFullPath=${
b160: 71 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20  qualify}}....
b170: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
b180: 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65  TE: If our calle
b190: 72 20 73 70 65 63 69 66 69 65 64 20 61 20 6a 6f  r specified a jo
b1a0: 75 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20  urnal mode, add
b1b0: 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f  the necessary po
b1c0: 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20  rtion..      #
b1d0: 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e       of the conn
b1e0: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f  ection string no
b1f0: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
b200: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
b210: 65 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30  ength $mode] > 0 b220: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. b230: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect b240: 69 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f ion {;Journal Mo b250: 64 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 de=${mode}}..
b260: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
b270: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
b280: 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65  f our caller spe
b290: 63 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d  cified a DateTim
b2a0: 65 20 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 68  e format, add th
b2b0: 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20  e necessary..
b2c0: 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69     #       porti
b2d0: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63  on of the connec
b2e0: 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e  tion string now.
b2f0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
b300: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
b310: 67 74 68 20 24 64 61 74 65 54 69 6d 65 46 6f 72  gth $dateTimeFor b320: 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b mat] > 0} then { b330: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append b340: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 connection {;Da b350: 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 teTimeFormat=${d
b360: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d  ateTimeFormat}}.
b370: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
b380: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
b390: 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72  E: If our caller
b3a0: 20 73 70 65 63 69 66 69 65 64 20 61 20 44 61 74   specified a Dat
b3b0: 65 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74  eTimeKind, add t
b3c0: 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72  he necessary por
b3d0: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
b3e0: 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65      of the conne
b3f0: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77  ction string now
b400: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
b410: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
b420: 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65 4b 69  ngth $dateTimeKi b430: 6e 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d nd] > 0} then {. b440: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 . append b450: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 connection {;Dat b460: 65 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 eTimeKind=${date
b470: 54 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20  TimeKind}}..
b480: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
b490: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
b4a0: 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 67   there are any g
b4b0: 6c 6f 62 61 6c 20 28 70 65 72 20 74 65 73 74 20  lobal (per test
b4c0: 72 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  run) connection
b4d0: 66 6c 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d  flags currently.
b4e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
b4f0: 65 74 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77  et, use them now
b500: 20 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e   (i.e. by combin
b510: 69 6e 67 20 74 68 65 6d 20 77 69 74 68 20 74 68  ing them with th
b520: 65 20 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d  e ones for this.
b530: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
b540: 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20  onnection)...
b550: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
b560: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63  [info exists ::c
b570: 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d  onnection_flags]
b580: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
b590: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
b5a0: 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c  $::connection_fl b5b0: 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ags] > 0} then { b5c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. b5d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho b5e0: 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 61 74 w (and log) that b5f0: 20 77 65 20 64 65 74 65 63 74 65 64 20 73 6f 6d we detected som b600: 65 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 e global connect b610: 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 ion flags... b620: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t b630: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
b640: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
b650: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b660: 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e  "---- global con
b670: 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 64 65  nection flags de
b680: 74 65 63 74 65 64 3a 20 22 20 24 3a 3a 63 6f 6e  tected: " $::con b690: 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 6e nection_flags \n b6a0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. b6b0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: b6c0: 43 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 Combine and/or r b6d0: 65 70 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 eplace the conne b6e0: 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 ction flags and b6f0: 74 68 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 then show the.. b700: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e # n b710: 65 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 ew value... b720: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se b730: 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 t flags [combine b740: 46 6c 61 67 73 20 24 66 6c 61 67 73 20 24 3a 3a Flags$flags $:: b750: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 connection_flags b760: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 ].... tpu b770: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
b780: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
b790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
b7a0: 2d 2d 2d 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e  --- combined con
b7b0: 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72  nection flags ar
b7c0: 65 3a 20 22 20 24 66 6c 61 67 73 20 5c 6e 5d 0d  e: " $flags \n]. b7d0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... b7e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT b7f0: 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 E: If our caller b800: 20 73 70 65 63 69 66 69 65 64 20 73 6f 6d 65 20 specified some b810: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection b820: 46 6c 61 67 73 2c 20 61 64 64 20 74 68 65 0d 0a Flags, add the.. b830: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 # ne b840: 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 cessary portion b850: 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f of the connectio b860: 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 n string now... b870: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if b880: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length b890: 20 24 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68$flags] > 0} th
b8a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70  en {..        ap
b8b0: 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  pend connection
b8c0: 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d  {;Flags=${flags} b8d0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... b8e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N b8f0: 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c OTE: If our call b900: 65 72 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 er specified an b910: 65 78 74 72 61 20 70 61 79 6c 6f 61 64 20 74 6f extra payload to b920: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d the connection. b930: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s b940: 74 72 69 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 tring, append it b950: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a now... #.. b960: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin b970: 67 20 6c 65 6e 67 74 68 20 24 65 78 74 72 61 5d g length$extra]
b980: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
b990: 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e        append con
b9a0: 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72  nection \; $extr b9b0: 61 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 a.. }.... b9c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N b9d0: 4f 54 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 OTE: Open the da b9e0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f tabase connectio b9f0: 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 n now, placing t ba00: 68 65 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 he opaque handle ba10: 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 value.. # ba20: 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76 into the v ba30: 61 72 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 ariable specifie ba40: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e d by our caller. ba50: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. ba60: 20 73 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 set db [sql ope ba70: 6e 20 2d 74 79 70 65 20 53 51 4c 69 74 65 20 5b n -type SQLite [ ba80: 73 75 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f subst$connectio
ba90: 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  n]]....      #..
baa0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f        # NOTE: Co
bab0: 6e 66 69 67 75 72 65 20 74 68 65 20 74 65 6d 70  nfigure the temp
bac0: 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20  orary directory
bad0: 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70  for the newly op
bae0: 65 6e 65 64 20 64 61 74 61 62 61 73 65 0d 0a 20  ened database..
baf0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
bb00: 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65  nection now unle
bb10: 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f  ss our caller fo
bb20: 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20  rbids it...
bb30: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 74   #..      if {$t bb40: 65 6d 70 6f 72 61 72 79 20 26 26 20 21 5b 69 6e emporary && ![in bb50: 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 fo exists ::no(s bb60: 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 etTemporaryDirec bb70: 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a tory)]} then {.. bb80: 20 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 sql exec bb90: 75 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 ute$db [appendA
bba0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
bbb0: 20 20 20 22 50 52 41 47 4d 41 20 74 65 6d 70 5f     "PRAGMA temp_
bbc0: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory
bbd0: 3d 20 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f 72  = \"" [getTempor
bbe0: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 5c 22  aryDirectory] \"
bbf0: 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  \;]..      }....
bc00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
bc10: 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 72 65   NOTE: Always re
bc20: 74 75 72 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74  turn the connect
bc30: 69 6f 6e 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20  ion handle upon
bc40: 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  success...
bc50: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
bc60: 24 64 62 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  $db.. }..... bc70: 20 20 20 70 72 6f 63 20 67 65 74 44 62 43 6f 6e proc getDbCon bc80: 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 nection { {varNa bc90: 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 me db} } {.. bca0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT bcb0: 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 E: Refer to the bcc0: 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 specified variab bcd0: 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 le (e.g. "db") i bce0: 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 n the context of bcf0: 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 our.. # bd00: 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 caller. The bd10: 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 handle to the d bd20: 61 74 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 atabase previous bd30: 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 ly opened via th bd40: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # bd50: 20 5b 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 [setupDb] proce bd60: 64 75 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 dure should be s bd70: 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 tored there... bd80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 #.. upv bd90: 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 ar 1$varName db
bda0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
bdb0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
bdc0: 72 65 74 75 72 6e 73 20 74 68 65 20 41 44 4f 2e  returns the ADO.
bdd0: 4e 45 54 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f  NET IDbConnectio
bde0: 6e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  n object instanc
bdf0: 65 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20  e for the..
be00: 20 23 20 20 20 20 20 20 20 73 70 65 63 69 66 69   #       specifi
be10: 65 64 20 64 61 74 61 62 73 65 20 68 61 6e 64 6c  ed databse handl
be20: 65 2e 20 20 53 69 6e 63 65 20 67 65 74 74 69 6e  e.  Since gettin
be30: 67 20 74 68 69 73 20 6f 62 6a 65 63 74 20 72 65  g this object re
be40: 6c 69 65 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20  lies upon..
be50: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 20 69   #       Eagle i
be60: 6e 74 65 72 6e 61 6c 73 2c 20 67 72 65 61 74 20  nternals, great
be70: 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20 74  care should be t
be80: 61 6b 65 6e 20 74 6f 20 61 76 6f 69 64 20 64 69  aken to avoid di
be90: 73 70 6f 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20  sposing of..
bea0: 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20 6f    #       this o
beb0: 62 6a 65 63 74 20 6f 72 20 6f 74 68 65 72 77 69  bject or otherwi
bec0: 73 65 20 70 75 74 74 69 6e 67 20 69 74 20 69 6e  se putting it in
bed0: 74 6f 20 61 6e 20 69 6e 76 61 6c 69 64 20 73 74  to an invalid st
bee0: 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ate...      #..
bef0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
bf00: 78 69 73 74 73 20 64 62 5d 7d 20 74 68 65 6e 20  xists db]} then
bf10: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
bf20: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
bf30: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
bf40: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
bf50: 6f 6e 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74  onPublic -object
bf60: 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65  flags +NoDispose
bf70: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
bf80: 20 20 20 20 2d 61 6c 69 61 73 20 49 6e 74 65 72      -alias Inter
bf90: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
bfa0: 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65  .connections Ite
bfb0: 6d 20 24 64 62 7d 20 5c 0d 0a 20 20 20 20 20 20  m $db} \.. bfc0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 result bfd0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. bfe0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. bff0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S c000: 75 63 63 65 73 73 2c 20 72 65 74 75 72 6e 20 74 uccess, return t c010: 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 he opaque object c020: 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 handle... c030: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. c040: 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d return$result.
c050: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
c060: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
c070: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
c080: 3a 20 46 61 69 6c 75 72 65 2c 20 72 65 70 6f 72  : Failure, repor
c090: 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20  t why...
c0a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 74    #..          t
c0b0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha c0c0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs c0d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. c0e0: 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: c0f0: 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 63 failed to get c c100: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 onnection handle c110: 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 5c 22 for database \" c120: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. c130: 20 20 20 24 64 62 20 22 5c 22 2c 20 65 72 72 6f$db "\", erro
c140: 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c  r: " \n\t $resul c150: 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d t \n].. } c160: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } c170: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 66 72 ..... proc fr c180: 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b eeDbConnection { c190: 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 {varName connec c1a0: 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 tion} } {.. c1b0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE c1c0: 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 : Refer to the s c1d0: 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c pecified variabl c1e0: 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 e (e.g. "connect c1f0: 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d 0a 20 20 ion") in the.. c200: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 # cont c210: 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 ext of our calle c220: 72 2e 20 20 54 68 65 20 6f 70 61 71 75 65 20 6f r. The opaque o c230: 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 6f 72 bject handle for c240: 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a 20 20 20 an ADO.NET.. c250: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 # conne c260: 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 ction previously c270: 20 72 65 74 75 72 6e 65 64 20 62 79 20 5b 67 65 returned by [ge c280: 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73 tDbConnection] s c290: 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 hould be.. c2a0: 23 20 20 20 20 20 20 20 73 74 6f 72 65 64 20 74 # stored t c2b0: 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a here... #.. c2c0: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
c2d0: 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f  arName connectio
c2e0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  n....      #..
c2f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
c300: 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65 20 74 68  mpt to remove th
c310: 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20  e opaque object
c320: 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65 20  handle from the
c330: 69 6e 74 65 72 70 72 65 74 65 72 0d 0a 20 20 20  interpreter..
c340: 20 20 20 23 20 20 20 20 20 20 20 6e 6f 77 2e 20     #       now.
c350: 20 54 68 69 73 20 5b 6f 62 6a 65 63 74 20 64 69   This [object di
c360: 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77 69 6c 6c  spose] call will
c370: 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 64 69   not actually di
c380: 73 70 6f 73 65 20 6f 66 20 74 68 65 0d 0a 20 20  spose of the..
c390: 20 20 20 20 23 20 20 20 20 20 20 20 75 6e 64 65      #       unde
c3a0: 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74 20 62 65  rlying object be
c3b0: 63 61 75 73 65 20 74 68 65 20 2b 4e 6f 44 69 73  cause the +NoDis
c3c0: 70 6f 73 65 20 66 6c 61 67 20 77 61 73 20 73 65  pose flag was se
c3d0: 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20 20 20 23  t on it..      #
c3e0: 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 63 72         during cr
c3f0: 65 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70  eation of the op
c400: 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64  aque object hand
c410: 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  le...      #..
c420: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
c430: 69 73 74 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  ists connection]
c440: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
c450: 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20   [catch {object
c460: 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e 65 63 74  dispose $connect c470: 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 ion} error]} the c480: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. c490: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: c4a0: 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 We somehow faile c4b0: 64 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 d to remove the c4c0: 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72 74 20 77 handle, report w c4d0: 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a hy... #.. c4e0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
c4f0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
c500: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
c510: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
c520: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
c530: 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e 65 63 74  o remove connect
c540: 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22 22 20 24  ion handle \"" $c550: 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 connection \.. c560: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 65 "\", e c570: 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
c580: 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  ror \n]..      }
c590: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
c5a0: 70 72 6f 63 20 61 64 64 44 62 43 6f 6e 6e 65 63  proc addDbConnec
c5b0: 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63 74 69 6f  tion { connectio
c5c0: 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d  n {varName db} }
c5d0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
c5e0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72     # NOTE: Refer
c5f0: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
c600: 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e  d variable (e.g.
c610: 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f   "db") in the co
c620: 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20  ntext of our..
c630: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c      #       call
c640: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
c650: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var c660: 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 Name db.... c670: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE c680: 3a 20 43 72 65 61 74 65 20 61 20 63 6f 72 72 65 : Create a corre c690: 63 74 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 6e ctly formatted n c6a0: 61 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 ame for the data c6b0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 base connection c6c0: 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 to.. # c6d0: 20 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 be added to th c6e0: 65 20 6c 69 73 74 20 6d 61 6e 61 67 65 64 20 62 e list managed b c6f0: 79 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 y the Eagle inte c700: 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 rpreter... c710: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62 20 #.. set db c720: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d [object invoke - c730: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic c740: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 45 61 \.. Ea c750: 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e gle._Components. c760: 50 72 69 76 61 74 65 2e 46 6f 72 6d 61 74 4f 70 Private.FormatOp c770: 73 20 44 61 74 61 62 61 73 65 4f 62 6a 65 63 74 s DatabaseObject c780: 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e Name$connection
c790: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51   \..          SQ
c7a0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b  LiteConnection [
c7b0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
c7c0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
c7d0: 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a  ive NextId]]....
c7e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
c7f0: 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 64   NOTE: Add the d
c800: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
c810: 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f  on provided by o
c820: 75 72 20 63 61 6c 6c 65 72 20 74 6f 20 74 68 65  ur caller to the
c830: 20 6c 69 73 74 0d 0a 20 20 20 20 20 20 23 20 20   list..      #
c840: 20 20 20 20 20 6f 66 20 74 68 6f 73 65 20 6b 6e       of those kn
c850: 6f 77 6e 20 74 6f 20 74 68 65 20 45 61 67 6c 65  own to the Eagle
c860: 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
c870: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 6f 62       #..      ob
c880: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
c890: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e  gs +NonPublic In
c8a0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
c8b0: 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ive.connections
c8c0: 41 64 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  Add \..
c8d0: 20 24 64 62 20 24 63 6f 6e 6e 65 63 74 69 6f 6e   $db$connection
c8e0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
c8f0: 70 72 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b  proc cleanupDb {
c900: 20 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61   fileName {varNa
c910: 6d 65 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20  me db} {collect
c920: 74 72 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74  true} {qualify t
c930: 72 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  rue}..
c940: 20 20 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65             {dele
c950: 74 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20  te true} } {..
c960: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
c970: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
c980: 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e  force all pendin
c990: 67 20 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65  g "garbage" obje
c9a0: 63 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63  cts to be collec
c9b0: 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20  ted,..      #
c9c0: 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51      including SQ
c9d0: 4c 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20  Lite statements
c9e0: 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  and backup objec
c9f0: 74 73 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20  ts; this should
ca00: 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20  allow..      #
ca10: 20 20 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79       the underly
ca20: 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c  ing database fil
ca30: 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e  e to be deleted.
ca40: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
ca50: 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74   if {$collect} t ca60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 hen {.. c ca70: 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a ollectGarbage$:
ca80: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20  :test_channel..
ca90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
caa0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
cab0: 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70   Refer to the sp
cac0: 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65  ecified variable
cad0: 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20   (e.g. "db") in
cae0: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f  the context of o
caf0: 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ur..      #
cb00: 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68    caller.  The h
cb10: 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74  andle to the dat
cb20: 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79  abase previously
cb30: 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d   opened via the.
cb40: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b  .      #       [
cb50: 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75  setupDb] procedu
cb60: 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f  re should be sto
cb70: 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20  red there...
cb80: 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72    #..      upvar
cb90: 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a   1 $varName db.. cba0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. cbb0: 20 23 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 # NOTE: Close t cbc0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f he connection to cbd0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f the database no cbe0: 77 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 w. This should cbf0: 61 6c 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 20 allow us.. cc00: 23 20 20 20 20 20 20 20 74 6f 20 64 65 6c 65 74 # to delet cc10: 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 e the underlying cc20: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d database file.. cc30: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. cc40: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists cc50: 20 64 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b db] && [catch { cc60: 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 sql close$db} e
cc70: 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  rror]} then {..
cc80: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
cc90: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d    # NOTE: We som
cca0: 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63  ehow failed to c
ccb0: 6c 6f 73 65 20 74 68 65 20 64 61 74 61 62 61 73  lose the databas
ccc0: 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a  e, report why...
ccd0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
cce0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test ccf0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append cd00: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. cd10: 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN cd20: 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f G: failed to clo cd30: 73 65 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 se database \"" cd40: 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20$db "\", error:
cd50: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
cd60: 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] cd70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... cd80: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO cd90: 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 TE: First, see i cda0: 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 f our caller has cdb0: 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e requested an in cdc0: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 -memory database cdd0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. cde0: 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b set isMemory [ cdf0: 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 isMemoryDb$file
ce00: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23  Name]....      #
ce10: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
ce20: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70  Build the full p
ce30: 61 74 68 20 74 6f 20 74 68 65 20 64 61 74 61 62  ath to the datab
ce40: 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20  ase file name.
ce50: 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73  For now, all tes
ce60: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
ce70: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files
ce80: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
ce90: 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  e temporary dire
cea0: 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d  ctory...      #.
ceb0: 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d  .      if {!$isM cec0: 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 emory &&$qualif
ced0: 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  y} then {..
cee0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
cef0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
cf00: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
cf10: 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  ] [file tail $fi cf20: 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 leName]].. cf30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. cf40: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec cf50: 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 k if the file st cf60: 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 ill exists... cf70: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { cf80: 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 !$isMemory && $d cf90: 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 elete && [file e cfa0: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
cfb0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
cfc0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
cfd0: 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69  OTE: Skip deleti
cfe0: 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ng database file
cff0: 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65  s if somebody se
d000: 74 73 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20  ts the global..
d010: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76         #       v
d020: 61 72 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65  ariable to preve
d030: 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  nt it...
d040: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  #..        if {!
d050: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
d060: 6f 28 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 29  o(cleanupDbFile)
d070: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
d080: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
d090: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
d0a0: 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20  t to delete the
d0b0: 74 65 73 74 20 64 61 74 61 62 61 73 65 20 66 69  test database fi
d0c0: 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20  le now...
d0d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
d0e0: 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63  if {[set code [c
d0f0: 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74  atch {file delet
d100: 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72  e $fileName} err d110: 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 or]]} then {.. d120: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. d130: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: d140: 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c We somehow fail d150: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 ed to delete the d160: 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 file, report wh d170: 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y... d180: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 #.. t d190: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
d1a0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
d1b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
d1c0: 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
d1d0: 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  G: failed to del
d1e0: 65 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ete database fil
d1f0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName d200: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. d210: 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c "\" during cl d220: 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 eanup, error: " d230: 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
d240: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
d250: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
d260: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
d270: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
d280: 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70  how that we skip
d290: 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65  ped deleting the
d2a0: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...
d2b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
d2c0: 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20  et code 0....
d2d0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: d2e0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap d2f0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. d300: 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== d310: 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 WARNING: skipped d320: 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 deleting databa d330: 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c se file \""$fil
d340: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
d350: 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e         "\" durin
d360: 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20  g cleanup\n"]..
d370: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
d380: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
d390: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
d3a0: 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f  OTE: The file do
d3b0: 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75  es not exist, su
d3c0: 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20  ccess!..
d3d0: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  #..        set c
d3e0: 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a  ode 0..      }..
d3f0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $d400: 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a code.. }..... d410: 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 proc setupDb d420: 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 InterruptCallbac d430: 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c 6f 67 20 k { channel log d440: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 } {.. tputs d450: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
d460: 73 65 74 74 69 6e 67 20 75 70 20 64 65 62 75 67  setting up debug
d470: 67 65 72 20 69 6e 74 65 72 72 75 70 74 20 63 61  ger interrupt ca
d480: 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20  llback... "....
d490: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
d4a0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
d4b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61        # NOTE: Ma
d4c0: 6b 65 20 73 75 72 65 20 74 68 65 20 73 63 72 69  ke sure the scri
d4d0: 70 74 20 64 65 62 75 67 67 65 72 20 61 6e 64 20  pt debugger and
d4e0: 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74  the isolated int
d4f0: 65 72 70 72 65 74 65 72 20 61 72 65 0d 0a 20 20  erpreter are..
d500: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65        #       se
d510: 74 75 70 20 61 6e 64 20 72 65 61 64 79 20 66 6f  tup and ready fo
d520: 72 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20  r use...
d530: 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67  #..        debug
d540: 20 73 65 74 75 70 20 74 72 75 65 20 74 72 75 65   setup true true
d550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
d560: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c         # NOTE: L
d570: 6f 61 64 20 74 68 65 20 6e 65 63 65 73 73 61 72  oad the necessar
d580: 79 20 70 61 63 6b 61 67 65 73 20 69 6e 74 6f 20  y packages into
d590: 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74  the isolated int
d5a0: 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20  erpreter...
d5b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64 65     #..        de
d5c0: 62 75 67 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20  bug eval {..
d5d0: 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65        package re
d5e0: 71 75 69 72 65 20 45 61 67 6c 65 0d 0a 20 20 20  quire Eagle..
d5f0: 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72         package r
d600: 65 71 75 69 72 65 20 45 61 67 6c 65 2e 4c 69 62  equire Eagle.Lib
d610: 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rary..
d620: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require
d630: 45 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20  Eagle.Test..
d640: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
d650: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
d660: 54 45 3a 20 43 6f 70 79 20 74 68 65 20 6e 65 63  TE: Copy the nec
d670: 65 73 73 61 72 79 20 76 61 72 69 61 62 6c 65 73  essary variables
d680: 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74   into the isolat
d690: 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  ed interpreter..
d6a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
d6b0: 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65      debug invoke
d6c0: 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 68   0 set ::test_ch
d6d0: 61 6e 6e 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20  annel $channel; d6e0: 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75 # NOTE: For [tpu d6f0: 74 73 5d 2e 0d 0a 20 20 20 20 20 20 20 20 64 65 ts]... de d700: 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 bug invoke 0 set d710: 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 ::test_log$log
d720: 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74  ; # NOTE: For [t
d730: 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20 20  log].....
d740: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
d750: 54 45 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20  TE: Install the
d760: 63 61 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20  callback script
d770: 74 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64 20  to be evaluated
d780: 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d  in the isolated.
d790: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
d7a0: 20 69 6e 74 65 72 70 72 65 74 65 72 20 77 68 65   interpreter whe
d7b0: 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74  n this interpret
d7c0: 65 72 20 69 73 20 69 6e 74 65 72 72 75 70 74 65  er is interrupte
d7d0: 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20 20 20  d by script..
d7e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6e       #       can
d7f0: 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 63 2e 0d  cellation, etc..
d800: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
d810: 20 20 20 20 64 65 62 75 67 20 63 61 6c 6c 62 61      debug callba
d820: 63 6b 20 61 70 70 6c 79 20 7b 7b 73 65 6e 64 65  ck apply {{sende
d830: 72 20 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20  r e} {..
d840: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
d850: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
d860: 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 69 73  this callback is
d870: 20 6f 6e 65 20 74 68 61 74 20 77 65 20 63 61 72   one that we car
d880: 65 20 61 62 6f 75 74 2e 0d 0a 20 20 20 20 20 20  e about...
d890: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
d8a0: 20 69 66 20 7b 22 43 61 6e 63 65 6c 65 64 22 20   if {"Canceled"
d8b0: 69 6e 20 5b 73 70 6c 69 74 20 5b 24 65 20 49 6e  in [split [$e In d8c0: 74 65 72 72 75 70 74 54 79 70 65 5d 20 22 2c 20 terruptType] ", d8d0: 22 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 "]} then {.. d8e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d8f0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 # NOTE: I d900: 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 61 terate through a d910: 6c 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e ll database conn d920: 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f ections known to d930: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 the.. d940: 20 20 23 20 20 20 20 20 20 20 70 61 72 65 6e 74 # parent d950: 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 interpreter... d960: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. d970: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object d980: 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 foreach -alias d990: 70 61 69 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 pair \.. d9a0: 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 [object d9b0: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N d9c0: 6f 6e 50 75 62 6c 69 63 20 24 65 20 49 6e 74 65 onPublic$e Inte
d9d0: 72 70 72 65 74 65 72 2e 63 6f 6e 6e 65 63 74 69  rpreter.connecti
d9e0: 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ons] {..
d9f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
da00: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
da10: 74 74 65 6d 70 74 20 74 6f 20 63 61 6e 63 65 6c  ttempt to cancel
da20: 20 61 6e 79 20 53 51 4c 20 71 75 65 72 69 65 73   any SQL queries
da30: 20 69 6e 20 70 72 6f 67 72 65 73 73 20 6f 6e 20   in progress on
da40: 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  this..
da50: 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61      #       data
da60: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
da70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
da80: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
da90: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61   if {[catch {$pa daa0: 69 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d ir Value.Cancel} dab0: 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. dac0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . dad0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
dae0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
daf0: 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20  gs \n \..
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
db10: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
db20: 65 64 20 74 6f 20 63 61 6e 63 65 6c 20 71 75 65  ed to cancel que
db30: 72 79 20 66 6f 72 20 63 6f 6e 6e 65 63 74 69 6f  ry for connectio
db40: 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  n \"" \..
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 70               [$p db60: 61 69 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 air Key] "\", er db70: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
db80: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
db90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
dba0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
dbb0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 7d 0d    }..        }}.
dbc0: 0a 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20  .      } error]
dbd0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
dbe0: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
dbf0: 69 6e 74 20 69 6e 74 65 72 72 75 70 74 43 61 6c  int interruptCal
dc00: 6c 62 61 63 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d  lback.sqlite3...
dc10: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $dc20: 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 channel yes\n.. dc30: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. dc40: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
dc50: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
dc60: 73 20 22 6e 6f 2c 20 65 72 72 6f 72 3a 20 22 20  s "no, error: "
dc70: 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. dc80: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. dc90: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 .... proc cle dca0: 61 6e 75 70 46 69 6c 65 20 7b 20 66 69 6c 65 4e anupFile { fileN dcb0: 61 6d 65 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 ame {collect tru dcc0: 65 7d 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d e} {force false} dcd0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. dce0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att dcf0: 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c empt to force al dd00: 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 l pending "garba dd10: 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 ge" objects to b dd20: 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 e collected,.. dd30: 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c # incl dd40: 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 uding SQLite sta dd50: 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b tements and back dd60: 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 up objects; this dd70: 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 should allow.. dd80: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the dd90: 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 underlying data dda0: 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 base file to be ddb0: 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 deleted... ddc0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f #.. if {$co
ddd0: 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  llect} then {..
dde0: 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61         collectGa
ddf0: 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68  rbage $::test_ch de00: 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a annel.. }.. de10: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. de20: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i de30: 66 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c f the file still de40: 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 exists... de50: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 #.. if {[fi de60: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
de70: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
de80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
de90: 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65   # NOTE: Skip de
dea0: 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69 6c 65  leting test file
deb0: 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65  s if somebody se
dec0: 74 73 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  ts the global va
ded0: 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  riable..
dee0: 23 20 20 20 20 20 20 20 74 6f 20 70 72 65 76 65  #       to preve
def0: 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  nt it...
df00: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24  #..        if {$df10: 66 6f 72 63 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 force || ![info df20: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 exists ::no(clea df30: 6e 75 70 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 nupFile)]} then df40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. df50: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE df60: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c : Attempt to del df70: 65 74 65 20 74 68 65 20 74 65 73 74 20 66 69 6c ete the test fil df80: 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 e now... df90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i dfa0: 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 f {[set code [ca dfb0: 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 tch {file delete dfc0: 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f$fileName} erro
dfd0: 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  r]]} then {..
dfe0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
dff0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
e000: 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65  We somehow faile
e010: 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20  d to delete the
e020: 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79  file, report why
e030: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
e040: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
e050: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan e060: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs e070: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. e080: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING e090: 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 : failed to dele e0a0: 74 65 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 te test file \"" e0b0: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
e0d0: 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70  " during cleanup
e0e0: 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
e0f0: 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. e100: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. e110: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. e120: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. e130: 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 # NOTE: Show t e140: 68 61 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 hat we skipped d e150: 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 eleting the file e160: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. e170: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f set co e180: 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 de 0.... e190: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
e1a0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
e1b0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
e1c0: 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
e1d0: 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65  NG: skipped dele
e1e0: 74 69 6e 67 20 74 65 73 74 20 66 69 6c 65 20 5c  ting test file \
e1f0: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a  "" $fileName \.. e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ e210: 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 " during cleanup e220: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. e230: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. e240: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. e250: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The e260: 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 file does not ex e270: 69 73 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 ist, success!.. e280: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. e290: 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 set code 0.. e2a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r e2b0: 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 eturn$code..
e2c0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
e2d0: 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 7b  collectGarbage {
e2e0: 20 63 68 61 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73   channel {millis
e2f0: 65 63 6f 6e 64 73 20 31 30 30 30 7d 20 7b 71 75  econds 1000} {qu
e300: 69 65 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  iet true} } {..
e310: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
e320: 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47  {object invoke G
e330: 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79  C GetTotalMemory
e340: 20 66 61 6c 73 65 7d 20 72 65 73 75 6c 74 5d 20   false} result]
e350: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
e360: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie e370: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. e380: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
e390: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
e3a0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
e3b0: 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e   "---- memory in
e3c0: 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 20   use by the CLR
e3d0: 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69 6f  before collectio
e3e0: 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20  n... " \..
e3f0: 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20          $result e400: 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 " bytes\n"].. e410: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } e420: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. e430: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
e440: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
e450: 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
e460: 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
e470: 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72  to get CLR memor
e480: 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20  y usage, error:
e490: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
e4a0: 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n e4b0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... e4c0: 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 ############ e4d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ e4e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ e4f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ e500: 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d #############... e510: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. e520: 23 20 4e 4f 54 45 3a 20 52 65 70 65 61 74 65 64 # NOTE: Repeated e530: 6c 79 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f ly attempt to co e540: 6c 6c 65 63 74 20 67 61 72 62 61 67 65 20 75 6e llect garbage un e550: 74 69 6c 20 74 68 65 20 61 6c 6c 6f 74 74 65 64 til the allotted e560: 20 6e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 23 number.. # e570: 20 20 20 20 20 20 20 6f 66 20 6d 69 6c 6c 69 73 of millis e580: 65 63 6f 6e 64 73 20 68 61 73 20 65 6c 61 70 73 econds has elaps e590: 65 64 2e 20 20 41 6c 77 61 79 73 20 61 74 74 65 ed. Always atte e5a0: 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 mpt to collect g e5b0: 61 72 62 61 67 65 0d 0a 20 20 20 20 20 20 23 20 arbage.. # e5c0: 20 20 20 20 20 20 61 74 20 6c 65 61 73 74 20 6f at least o e5d0: 6e 63 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 nce... #.. e5e0: 20 20 20 20 20 73 65 74 20 73 74 61 72 74 20 5b set start [ e5f0: 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a clock seconds].. e600: 20 20 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b set stop [ e610: 65 78 70 72 20 7b 24 73 74 61 72 74 20 2b 20 28 expr {$start + (
e620: 24 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20  $milliseconds / e630: 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 1000)}].... e640: 20 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 do {.. # e650: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE e660: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 : Attempt to for e670: 63 65 20 61 20 66 75 6c 6c 20 67 61 72 62 61 67 ce a full garbag e680: 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 e collection now e690: 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a 20 . Report any.. e6a0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 # e e6b0: 72 72 6f 72 20 74 68 61 74 20 69 73 20 65 6e 63 rror that is enc e6c0: 6f 75 6e 74 65 72 65 64 20 69 66 20 77 65 20 66 ountered if we f e6d0: 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ail... #. e6e0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca e6f0: 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f tch {object invo e700: 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 ke GC GetTotalMe e710: 6d 6f 72 79 20 74 72 75 65 7d 20 65 72 72 6f 72 mory true} error e720: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. e730: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
e740: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
e750: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
e760: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
e770: 66 61 69 6c 65 64 20 66 75 6c 6c 20 67 61 72 62  failed full garb
e780: 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20  age collection,
e790: 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20  error: " \..
e7a0: 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24            \n\t $e7b0: 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. e7c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... e7d0: 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73 set now [clock s e7e0: 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 7d econds].. } e7f0: 20 77 68 69 6c 65 20 7b 24 73 74 61 72 74 20 3c while {$start <
e800: 3d 20 24 6e 6f 77 20 26 26 20 24 6e 6f 77 20 3c  = $now &&$now <
e810: 20 24 73 74 6f 70 7d 0d 0a 0d 0a 20 20 20 20 20   $stop}.... e820: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############### e830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ e840: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ e850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ e860: 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 ##########.... e870: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { e880: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 object invoke GC e890: 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 GetTotalMemory e8a0: 66 61 6c 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d false} result] = e8b0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. e8c0: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
e8d0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
e8e0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann e8f0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ e900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e910: 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 "---- memory in e920: 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 61 use by the CLR a e930: 66 74 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e fter collection. e940: 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 .. " \.. e950: 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 22 20$result "
e960: 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20  bytes\n"]..
e970: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
e980: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
e990: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap e9a0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. e9b0: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA e9c0: 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to e9d0: 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 get CLR memory e9e0: 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 usage, error: " e9f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c \.. \ ea00: 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
ea10: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
ea20: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
ea30: 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e  SQLiteHandleCoun
ea40: 74 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75  ts { channel {qu
ea50: 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  iet false} } {..
ea60: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74        set result
ea70: 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20   [list]....
ea80: 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72   if {[haveConstr
ea90: 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  aint \..
eaa0: 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73        defineCons
eab0: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
eac0: 2e 53 51 4c 69 74 65 2e 43 4f 55 4e 54 5f 48 41  .SQLite.COUNT_HA
ead0: 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  NDLE]} then {..
eae0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
eaf0: 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 65 61    # NOTE: Add ea
eb00: 63 68 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64  ch critical hand
eb10: 6c 65 20 63 6f 75 6e 74 20 74 6f 20 74 68 65 20  le count to the
eb20: 72 65 73 75 6c 74 69 6e 67 20 6c 69 73 74 2e 0d  resulting list..
eb30: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
eb40: 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65      foreach name
eb50: 20 5b 6c 69 73 74 20 63 6f 6e 6e 65 63 74 69 6f   [list connectio
eb60: 6e 43 6f 75 6e 74 20 73 74 61 74 65 6d 65 6e 74  nCount statement
eb70: 43 6f 75 6e 74 20 62 61 63 6b 75 70 43 6f 75 6e  Count backupCoun
eb80: 74 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  t] {..
eb90: 73 65 74 20 76 61 6c 75 65 20 5b 6f 62 6a 65 63  set value [objec
eba0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
ebb0: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
ebc0: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
ebd0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
ebe0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ebf0: 64 73 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  ds $name].... ec00: 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
ec10: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
ec20: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c ec30: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr ec40: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. ec50: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 72 69 74 "---- crit ec60: 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e ical handle coun ec70: 74 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 t \""$name "\"
ec80: 69 73 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d  is " $value \n]. ec90: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... eca0: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen ecb0: 64 20 72 65 73 75 6c 74 20 24 76 61 6c 75 65 0d d result$value.
ecc0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
ecd0: 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 24 71 75    } elseif {!$qu ece0: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. ecf0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. ed00: 23 20 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 75 # NOTE: The actu ed10: 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 al handle counts ed20: 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 are not availab ed30: 6c 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6a le; therefore, j ed40: 75 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ust.. # ed50: 20 20 20 20 20 72 65 74 75 72 6e 20 61 6e 20 65 return an e ed60: 6d 70 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 mpty list... ed70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t ed80: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
ed90: 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e  --- critical han
eda0: 64 6c 65 20 63 6f 75 6e 74 73 20 75 6e 61 76 61  dle counts unava
edb0: 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20  ilable\n"..
edc0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
edd0: 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  rn $result.. ede0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 }..... proc s edf0: 68 75 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 hutdownSQLite { ee00: 63 68 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 channel {force f ee10: 61 6c 73 65 7d 20 7b 71 75 69 65 74 20 66 61 6c alse} {quiet fal ee20: 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 se} } {.. # ee30: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: ee40: 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 53 Make sure that S ee50: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 QLite core libra ee60: 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 ry is completely ee70: 20 73 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 shutdown. This ee80: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # ee90: 69 73 20 75 73 65 64 20 62 79 20 74 65 73 74 73 is used by tests eea0: 20 74 68 61 74 20 63 68 61 6e 67 65 20 63 6f 6e that change con eeb0: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f figuration optio eec0: 6e 73 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d ns and/or those. eed0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t eee0: 68 61 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 hat need to make eef0: 20 73 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 sure logging is ef00: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 2e initialized (i. ef10: 65 2e 20 6a 75 73 74 20 69 6e 20 63 61 73 65 0d e. just in case. ef20: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t ef30: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c he SQLite core l ef40: 69 62 72 61 72 79 20 77 61 73 20 69 6e 69 74 69 ibrary was initi ef50: 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 70 72 alized in the pr ef60: 6f 63 65 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a ocess prior to.. ef70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th ef80: 65 20 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 e SQLiteLog clas ef90: 73 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 s being able to efa0: 73 65 74 75 70 20 69 74 73 20 6c 6f 67 67 69 6e setup its loggin efb0: 67 20 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 g callback)... efc0: 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 72 6d # Norm efd0: 61 6c 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c ally, this shoul efe0: 64 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 d only be perfor eff0: 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 med if SQLite is f000: 20 6c 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 loaded and.. f010: 20 20 20 23 20 20 20 20 20 20 20 72 65 61 64 79 # ready f020: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 for use by the f030: 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 test suite... f040: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { f050: 24 66 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c$force || [isSQL
f060: 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20  iteReady]} then
f070: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
f080: 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20        # BUGFIX:
f090: 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74  Before calling t
f0a0: 68 65 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f  he native shutdo
f0b0: 77 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b  wn function, mak
f0c0: 65 20 73 75 72 65 20 62 6f 74 68 0d 0a 20 20 20  e sure both..
f0d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 6f       #         o
f0e0: 66 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c  f the PRAGMA rel
f0f0: 61 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e  ated directory n
f100: 61 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d  ames are freed..
f110: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f120: 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
f130: 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 63  teDirectories $c f140: 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 hannel true.... f150: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc f160: 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 h {object invoke f170: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl f180: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. f190: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat f1a0: 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN f1b0: 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a ativeMethods \.. f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f1d0: 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e sqlite3_shutdown f1e0: 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 } result] == 0} f1f0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. f200: 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
f210: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
f220: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe f230: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. f240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . f250: 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 "---- call sqli f260: 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e te3_shutdown().. f270: 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 . ok: "$result
f280: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
f290: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
f2a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
f2b0: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then f2c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t f2d0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
f2e0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
f300: 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  -- call sqlite3_
f310: 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 65 72  shutdown()... er
f320: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73  ror: " \n\t $res f330: 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. f340: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. f350: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. f360: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 .... proc rep f370: 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 ortSQLiteResourc f380: 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 es { channel {qu f390: 69 65 74 20 66 61 6c 73 65 7d 20 7b 63 6f 6c 6c iet false} {coll f3a0: 65 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ect true} } {.. f3b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # f3c0: 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6f NOTE: Skip all o f3d0: 75 74 70 75 74 20 69 66 20 77 65 20 61 72 65 20 utput if we are f3e0: 72 75 6e 6e 69 6e 67 20 69 6e 20 22 71 75 69 65 running in "quie f3f0: 74 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 t" mode... f400: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 #.. if {[ha f410: 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a veConstraint \.. f420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de f430: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 fineConstant.Sys f440: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. f450: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f INTEROP_VIRTUAL_ f460: 54 41 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 TABLE] && \.. f470: 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 [haveCons f480: 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 traint \.. f490: 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f defineCo f4a0: 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 nstant.System.Da f4b0: 74 61 2e 53 51 4c 69 74 65 2e 54 52 41 43 4b 5f ta.SQLite.TRACK_ f4c0: 4d 45 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 MEMORY_BYTES]} t f4d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i f4e0: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
f4f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
f500: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- f510: 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 -- current memor f520: 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 y in use by SQLi f530: 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 teMemory... ".. f540: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... f550: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { f560: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f f570: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic f580: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. f590: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S f5a0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f QLite.SQLiteMemo f5b0: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. f5c0: 20 20 20 20 20 20 62 79 74 65 73 41 6c 6c 6f 63 bytesAlloc f5d0: 61 74 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d ated} memory] == f5e0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. f5f0: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
f600: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
f610: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch f620: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg f630: 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 s$memory " byte
f640: 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  s\n"]..
f650: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
f660: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
f670: 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f  set memory unkno
f680: 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  wn....
f690: 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the f6a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. f6b0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
f6c0: 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem f6d0: 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. f6e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. f6f0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! f700: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
f710: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
f720: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d  $channel "---- m f730: 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e aximum memory in f740: 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 use by SQLiteMe f750: 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 mory... ".. f760: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... f770: 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 if {[catch {obje f780: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags f790: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. f7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S f7b0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit f7c0: 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 5c e.SQLiteMemory \ f7d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f7e0: 20 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c maximumBytesAl f7f0: 6c 6f 63 61 74 65 64 7d 20 6d 65 6d 6f 72 79 5d located} memory] f800: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. f810: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
f820: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
f830: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
f840: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append f850: 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 Args$memory " b
f860: 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  ytes\n"]..
f870: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
f880: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
f890: 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e     set memory un
f8a0: 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  known....
f8b0: 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} f8c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. f8d0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
f8e0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $f8f0: 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. f900: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. f910: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... f920: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
f930: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
f940: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel f950: 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d "---- current m f960: 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by f970: 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 SQLite... ".. f980: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if f990: 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 {[catch {object f9a0: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + f9b0: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. f9c0: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste f9d0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e m.Data.SQLite.Un f9e0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 safeNativeMethod f9f0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. fa00: 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 sqlite3_memor fa10: 79 5f 75 73 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 y_used} memory] fa20: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. fa30: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
fa40: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
fa50: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan fa60: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs fa70: 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c$memory " bytes\
fa80: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n"]..        }..
fa90: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
faa0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
fab0: 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65     # NOTE: Maybe
fac0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
fad0: 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76   library is unav
fae0: 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20  ailable?..
faf0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
fb00: 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d   memory unknown.
fb10: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
fb20: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. fb30: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs fb40: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
fb50: 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d  Args $memory \n] fb60: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. fb70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 }.... se fb80: 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79 t result$memory
fb90: 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e  ; # NOTE: Return
fba0: 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74   memory in-use t
fbb0: 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d  o our caller....
fbc0: 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69  .      if {!$qui fbd0: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. fbe0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
fbf0: 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d  el "---- maximum
fc00: 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62   memory in use b
fc10: 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20  y SQLite... "..
fc20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
fc30: 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65  if {[catch {obje
fc40: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
fc50: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
fc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
fc70: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
fc80: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
fc90: 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ods \..
fca0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d       sqlite3_mem
fcb0: 6f 72 79 5f 68 69 67 68 77 61 74 65 72 20 30 7d  ory_highwater 0}
fcc0: 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74   memory] == 0} t
fcd0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
fce0: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then fcf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp fd00: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
fd10: 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory fd20: 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 " bytes\n"].. fd30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } fd40: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. fd50: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO fd60: 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 TE: Maybe the SQ fd70: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar fd80: 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 y is unavailable fd90: 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ?.. #.. fda0: 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory fdb0: 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 unknown.... fdc0: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
fdd0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
fde0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe fdf0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
fe00: 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
fe10: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
fe20: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c  .      if {$coll fe30: 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ect} then {.. fe40: 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 collectGarb fe50: 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 age$channel..
fe60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
fe70: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then fe80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput fe90: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
fea0: 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20   current memory
feb0: 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c  in use by the CL
fec0: 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d  R... "..      }.
fed0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
fee0: 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f  tch {object invo
fef0: 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65  ke GC GetTotalMe
ff00: 6d 6f 72 79 20 66 61 6c 73 65 7d 20 6d 65 6d 6f  mory false} memo
ff10: 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ry] == 0} then {
ff20: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
ff30: 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72  tring is integer
ff40: 20 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 79   -strict $memory ff50: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. ff60: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
ff70: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
ff80: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha ff90: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs ffa0: 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73$memory " bytes
ffb0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
ffc0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
ffd0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e {..          s
ffe0: 65 74 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69  et memory invali
fff0: 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  d....          i
10000 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 10010 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 10020 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
10030 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 10040 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ry \n].. 10050 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 10060 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 10070 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f set memo 10080 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 ry unknown.... 10090 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
100a0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
100b0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 100c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 100d0 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20$memory \n]..
100e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
100f0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
10100 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a  $result.. }.. 10110 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 ... proc chec 10120 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 kForSQLiteDirect 10130 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 ories { channel 10140 7b 72 65 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 {reset false} } 10150 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 10160 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 10170 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 if the sqlite3_w 10180 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 10190 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 ry function is a 101a0 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 vailable... 101b0 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 #.. tputs 101c0 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20$channel \..
101d0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63        "---- chec
101e0 6b 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f  king for functio
101f0 6e 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  n sqlite3_win32_
10200 73 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e  set_directory...
10210 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   "....      #..
10220 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
10230 73 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 71  s call to the sq
10240 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
10250 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69  directory functi
10260 6f 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 20 20  on uses the..
10270 20 20 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c     #       inval
10280 69 64 20 76 61 6c 75 65 20 30 20 66 6f 72 20 74  id value 0 for t
10290 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
102a0 74 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69 73  t.  This code is
102b0 20 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 20   designed..
102c0 20 23 20 20 20 20 20 20 20 74 6f 20 63 68 65 63   #       to chec
102d0 6b 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 65  k if calling the
102e0 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72   function will r
102f0 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f  aise an exceptio
10300 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23  n (i.e...      #
10310 20 20 20 20 20 20 20 74 68 65 20 61 63 74 75 61         the actua
10320 6c 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  l result of the
10330 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  function does no
10340 74 20 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e 67  t matter as long
10350 20 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20   as no..      #
10360 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory
10370 69 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20  is changed)...
10380 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
10390 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
103a0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
103b0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
103c0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
103d0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
103e0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
103f0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
10400 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10410 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f    sqlite3_win32_
10420 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20  set_directory 0
10430 6e 75 6c 6c 7d 5d 20 3d 3d 20 30 7d 20 74 68 65  null}] == 0} the
10440 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
10450 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
10460 43 61 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c 69  Calling the sqli
10470 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
10480 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e  rectory function
10490 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20   does not..
104a0 20 20 20 23 20 20 20 20 20 20 20 63 61 75 73 65     #       cause
104b0 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20 74   an exception; t
104c0 68 65 72 65 66 6f 72 65 2c 20 69 74 20 6d 75 73  herefore, it mus
104d0 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 28  t be available (
104e0 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20  i.e...        #
104f0 20 20 20 20 20 20 65 76 65 6e 20 74 68 6f 75 67        even thoug
10500 68 20 69 74 20 73 68 6f 75 6c 64 20 72 65 74 75  h it should retu
10510 72 6e 20 61 20 66 61 69 6c 75 72 65 20 72 65 74  rn a failure ret
10520 75 72 6e 20 63 6f 64 65 20 69 6e 20 74 68 69 73  urn code in this
10530 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
10540 20 20 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 20    case)...
10550 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64    #..        add
10560 43 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 74  Constraint sqlit
10570 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
10580 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20  ectory....
10590 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 105a0 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 yes\n.... 105b0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 105c0 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 OTE: Does our ca 105d0 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 ller want to res 105e0 65 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 et the directori 105f0 65 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a es?.. #.. 10600 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 if {$res
10610 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
10620 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10630 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d     # NOTE: Now m
10640 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74  ake sure the dat
10650 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72  abase and tempor
10660 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 20  ary directories
10670 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23  are..          #
10680 20 20 20 20 20 20 20 72 65 73 65 74 20 74 68 65         reset the
10690 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ir default value
106a0 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20  s, which should
106b0 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68  be null for both
106c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  ...          #
106d0 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 73       Since the s
106e0 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
106f0 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74  _directory funct
10700 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
10710 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  ,..          #
10720 20 20 20 20 20 75 73 65 20 69 74 2e 0d 0a 20 20       use it...
10730 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10740 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e       for {set in
10750 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c  dex 1} {$index < 10760 20 33 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 3} {incr index} 10770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 10780 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 10790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 107a0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 107b0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 107c0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 107d0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 107e0 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa 107f0 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods 10800 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10810 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 sqlite3_w 10820 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 10830 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 7d 20 ry$index null}
10840 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
10850 20 20 20 20 20 20 20 72 65 73 75 6c 74 5d 20 3d         result] =
10860 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
10870 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
10880 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 10890 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 108a0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 108b0 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 call sqlite3_wi 108c0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 108d0 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 y("$index \..
108e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
108f0 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20  ", null)... ok:
10900 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  " $result \n].. 10910 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 10920 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 10930 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
10940 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
10950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
10960 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71     "---- call sq
10970 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
10980 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64  directory(" $ind 10990 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ex \.. 109a0 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 ", null) 109b0 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c ... error: " \n\ 109c0 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
109d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
109e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
109f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
10a00 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
10a10 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\ 10a20 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n.... #.. 10a30 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 10a40 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 Does our caller 10a50 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 want to reset th 10a60 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20 20 e directories? 10a70 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 This can only.. 10a80 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 10a90 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 e performed if S 10aa0 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 QLite is loaded 10ab0 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 and ready for us 10ac0 65 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20 e by the test.. 10ad0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s 10ae0 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 uite... # 10af0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 .. if {$r
10b00 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69 74  eset && [isSQLit
10b10 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d  eReady]} then {.
10b20 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
10b30 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
10b40 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68  Now make sure th
10b50 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  e database and t
10b60 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
10b70 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20  ries are..
10b80 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65      #       rese
10b90 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20  t their default
10ba0 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68  values, which sh
10bb0 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72  ould be null for
10bc0 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20   both...
10bd0 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20    #       Since
10be0 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33  the sqlite3_win3
10bf0 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20  2_set_directory
10c00 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  function does no
10c10 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  t..          #
10c20 20 20 20 20 20 61 70 70 65 61 72 20 74 6f 20 62       appear to b
10c30 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 65  e available, use
10c40 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated
10c50 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d  PRAGMA commands.
10c60 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
10c70 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20     instead...
10c80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10c90 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65      foreach dire
10ca0 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61  ctory [list data
10cb0 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
10cc0 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
10cd0 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20  ctory] {..
10ce0 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61        set sql [a
10cf0 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d  ppendArgs "PRAGM
10d00 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22  A " $directory " 10d10 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 = \"\";"].... 10d20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 10d30 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c atch {executeSql 10d40 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d$sql} result] =
10d50 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
10d60 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
10d70 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 10d80 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 10d90 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 10da0 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 execute PRAGMA 10db0 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e "$directory "..
10dc0 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20  . ok: \"" \..
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $10de0 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 result \"\n].. 10df0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 10e00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 10e10 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
10e20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
10e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10e40 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20    "---- execute
10e50 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74  PRAGMA " $direct 10e60 6f 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 ory "... error: 10e70 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 10e80 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 \n\t$res
10e90 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
10ea0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
10eb0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
10ec0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
10ed0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
10ee0 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20  : Finally, show
10ef0 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
10f00 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
10f10 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d  e and temporary.
10f20 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
10f30 69 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69  irectories.  Thi
10f40 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65  s can only be pe
10f50 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74  rformed if SQLit
10f60 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20  e is loaded..
10f70 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72     #       and r
10f80 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20  eady for use by
10f90 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d  the test suite..
10fa0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
10fb0 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61  if {[isSQLiteRea
10fc0 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  dy]} then {..
10fd0 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72       foreach dir
10fe0 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74  ectory [list dat
10ff0 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
11000 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  y temp_store_dir
11010 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20  ectory] {..
11020 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 11030 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 11040 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 "---- checking " 11050 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e$directory "...
11060 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   "]....
11070 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64   set sql [append
11080 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24  Args "PRAGMA " $11090 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d directory \;]... 110a0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 110b0 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 catch {executeSq 110c0 6c 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 l$sql scalar} r
110d0 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
110e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
110f0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 11100 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a [appendArgs "ok: 11110 20 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c \""$result \"\
11120 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  n]..          }
11130 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
11140 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 11150 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " 11160 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 error: " \n\t$r
11170 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
11180 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
11190 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
111a0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c  }.....    proc l
111b0 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74  oadSQLiteTestSet
111c0 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20  tings { channel
111d0 7b 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69  {suffix ""} {qui
111e0 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  et false} } {..
111f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
11200 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69  NOTE: Skip loadi
11210 6e 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 20  ng the settings
11220 69 66 20 74 68 65 69 72 20 75 73 61 67 65 20 68  if their usage h
11230 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64  as been disabled
11240 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
11250 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
11260 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54  sts ::no(sqliteT
11270 65 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74  estSettings)]} t
11280 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
11290 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
112a0 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65  : Load custom pe
112b0 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65  r-user and/or pe
112c0 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74  r-host test sett
112d0 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
112e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
112f0 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
11300 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73  :tcl_platform(us
11310 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  er)]} then {..
11320 20 20 20 20 20 20 20 20 73 65 74 20 75 73 65 72          set user
11330 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
11340 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
11350 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d  CommonDirectory]
11360 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
11370 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65    [appendArgs se
11380 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e  ttings $suffix . 11390 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
113a0 28 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d  (user) .eagle]].
113b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
113c0 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 75  {[file exists $u 113d0 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e serSettingsFileN 113e0 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 113f0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
11400 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
11420 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 11430 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 11440 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 11450 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 -- loading per-u 11460 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 ser test setting 11470 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 s file \"" \.. 11480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11490 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c$userSettingsFil
114a0 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a  eName \"...\n]..
114b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
114c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
114d0 7b 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c  {[catch {uplevel
114e0 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20   1 [list source
114f0 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c  $userSettingsFil 11500 65 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 eName]} \.. 11510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e 11520 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rror]} then {.. 11530 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 11540 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
11550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
11560 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 11570 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 11580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11590 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 115a0 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 G: failed to loa 115b0 64 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 69 d per-user setti 115c0 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a ngs file \"" \.. 115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 115e0 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67$userSetting
115f0 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65  sFileName "\", e
11600 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 11610 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 11620 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 11630 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 11640 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 11650 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
11660 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
11670 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
11680 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 11690 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 116a0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 116b0 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e - skipped loadin 116c0 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 g per-user test 116d0 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 settings file \" 116e0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 116f0 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74$userSett
11700 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22  ingsFileName "\"
11710 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  , it does not ex
11720 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  ist\n"]..
11730 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
11740 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
11750 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 23  ..        ######
11760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11770 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11780 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11790 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
117a0 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  #....        if
117b0 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
117c0 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73  tcl_platform(hos
117d0 74 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  t)]} then {..
117e0 20 20 20 20 20 20 20 73 65 74 20 68 6f 73 74 53         set hostS
117f0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
11800 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43  [file join [getC
11810 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20  ommonDirectory]
11820 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
11830 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74   [appendArgs set
11840 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20  tings $suffix . 11850 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28$::tcl_platform(
11860 68 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a  host) .eagle]]..
11870 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
11880 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f  [file exists $ho 11890 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 stSettingsFileNa 118a0 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 118b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
118c0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
118d0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
118e0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 118f0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 11900 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 11910 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f - loading per-ho 11920 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 st test settings 11930 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 file \"" \.. 11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
11950 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65  hostSettingsFile
11960 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20  Name \"...\n]..
11970 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11980 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
11990 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20  [catch {uplevel
119a0 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24  1 [list source $119b0 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 hostSettingsFile 119c0 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 Name]} \.. 119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er 119e0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. 119f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 11a00 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
11a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
11a20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 11a30 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 11a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11a50 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 11a60 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 : failed to load 11a70 20 70 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e per-host settin 11a80 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 gs file \"" \.. 11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11aa0 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73$hostSettings
11ab0 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72  FileName "\", er
11ac0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 11ad0 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 11ae0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 11af0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 11b00 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 11b10 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
11b20 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
11b30 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
11b40 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 11b50 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 11b60 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 11b70 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 skipped loading 11b80 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 per-host test s 11b90 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 ettings file \"" 11ba0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11bb0 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69$hostSetti
11bc0 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c  ngsFileName "\",
11bd0 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
11be0 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
11bf0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
11c00 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
11c10 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
11c20 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51  ..    proc runSQ
11c30 4c 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65  LiteTestPrologue
11c40 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
11c50 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
11c60 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63  ip running our c
11c70 75 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69  ustom prologue i
11c80 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68  f the main one h
11c90 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23  as been..      #
11ca0 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d         skipped..
11cb0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
11cc0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
11cd0 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e  s ::no(prologue.
11ce0 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  eagle)]} then {.
11cf0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
11d00 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64      # NOTE: Load
11d10 20 74 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e   the "before-con
11d20 73 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d  straints" custom
11d30 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72   per-user and/or
11d40 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20   per-host..
11d50 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20     #       test
11d60 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20  settings now...
11d70 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
11d80 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73    uplevel 1 [lis
11d90 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74  t loadSQLiteTest
11da0 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74  Settings $::test 11db0 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 _channel .before 11dc0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 11dd0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 11de0 53 6b 69 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e Skip all System. 11df0 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 Data.SQLite rela 11e00 74 65 64 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e ted file handlin 11e10 67 20 28 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 g (deleting,.. 11e20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 11e30 70 79 69 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69 pying, and loadi 11e40 6e 67 29 20 69 66 20 77 65 20 61 72 65 20 73 6f ng) if we are so 11e50 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 instructed... 11e60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 11e70 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 11e80 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 ts ::no(sqliteFi 11e90 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 11ea0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 11eb0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 11ec0 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c ip trying to del 11ed0 65 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 ete any files if 11ee0 20 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 we are so instr 11ef0 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 ucted... 11f00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 11f10 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 11f20 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 11f30 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 teFiles)]} then 11f40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 11f50 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 ryDeleteAssembly 11f60 20 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 20 20 sqlite3.dll.. 11f70 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 remove 11f80 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 5f Constraint file_ 11f90 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 0d 0a 20 sqlite3.dll.... 11fa0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 11fb0 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 53 51 4c leteAssembly SQL 11fc0 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d ite.Interop.dll. 11fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 11fe0 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 oveConstraint fi 11ff0 6c 65 5f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f le_SQLite.Intero 12000 70 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 p.dll.... 12010 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 tryDeleteAs 12020 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 sembly System.Da 12030 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 ta.SQLite.dll.. 12040 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 remov 12050 65 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 eConstraint file 12060 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c _System.Data.SQL 12070 69 74 65 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 ite.dll.... 12080 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 12090 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e Assembly System. 120a0 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 Data.SQLite.Linq 120b0 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 120c0 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 removeConstrai 120d0 6e 74 20 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44 nt file_System.D 120e0 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e ata.SQLite.Linq. 120f0 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 7d dll.. } 12100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 12110 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 12120 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 E: Check for the 12130 20 22 61 75 74 6f 53 65 6c 65 63 74 22 20 72 75 "autoSelect" ru 12140 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 49 ntime option. I 12150 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20 20 f present,.. 12160 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 74 # at 12170 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 tempt to automat 12180 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 ically select th 12190 65 20 66 69 72 73 74 20 61 76 61 69 6c 61 62 6c e first availabl 121a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 e.. # 121b0 20 20 20 20 20 62 75 69 6c 64 20 28 6f 72 20 22 build (or " 121c0 72 65 6c 65 61 73 65 22 29 20 6f 66 20 53 51 4c release") of SQL 121d0 69 74 65 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 ite and System.D 121e0 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 ata.SQLite.. 121f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f # fo 12200 72 20 75 73 65 20 77 69 74 68 20 74 68 65 20 74 r use with the t 12210 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 est suite... 12220 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 12230 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 if {[hasRunti 12240 6d 65 4f 70 74 69 6f 6e 20 61 75 74 6f 53 65 6c meOption autoSel 12250 65 63 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ect]} then {.. 12260 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 12270 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 checkForSQLiteBu 12280 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 ilds$::test_cha
12290 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 74 68 65 6e  nnel true]} then
122a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
122b0 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
122c0 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 74  Releases $::test 122d0 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 _channel true.. 122e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 122f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 12300 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 12310 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 12320 20 74 72 79 69 6e 67 20 74 6f 20 76 65 72 69 66 trying to verif 12330 79 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 y the build dire 12340 63 74 6f 72 79 20 69 66 20 77 65 20 61 72 65 20 ctory if we are 12350 73 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 so.. # 12360 20 20 20 20 20 20 69 6e 73 74 72 75 63 74 65 64 instructed 12370 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b ; otherwise, mak 12380 65 20 73 75 72 65 20 69 74 20 61 63 74 75 61 6c e sure it actual 12390 6c 79 20 65 78 69 73 74 73 20 6f 72 0d 0a 20 20 ly exists or.. 123a0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 123b0 68 61 6c 74 20 74 68 65 20 65 6e 74 69 72 65 20 halt the entire 123c0 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 testing process 123d0 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 if it does not e 123e0 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 xist... 123f0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 12400 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 12410 3a 3a 6e 6f 28 76 65 72 69 66 79 42 75 69 6c 64 ::no(verifyBuild 12420 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 Directory)]} the 12430 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 12440 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 12450 23 20 4e 4f 54 45 3a 20 41 74 20 74 68 69 73 20 # NOTE: At this 12460 70 6f 69 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 point, the build 12470 20 64 69 72 65 63 74 6f 72 79 20 4d 55 53 54 20 directory MUST 12480 65 78 69 73 74 20 61 73 20 61 0d 0a 20 20 20 20 exist as a.. 12490 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 124a0 76 61 6c 69 64 20 64 69 72 65 63 74 6f 72 79 20 valid directory 124b0 66 6f 72 20 74 68 65 20 74 65 73 74 69 6e 67 20 for the testing 124c0 70 72 6f 63 65 73 73 20 74 6f 20 63 6f 6e 74 69 process to conti 124d0 6e 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 nue... 124e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 124f0 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b set directory [ 12500 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 getBuildDirector 12510 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 y].... 12520 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi 12530 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d 20 sts$directory]
12540 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  || \..
12550 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 64        ![file isd
12560 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74  irectory $direct 12570 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ory]} then {.. 12580 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 12590 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 125a0 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72 20 OTE: Just prior 125b0 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c 74 to actually halt 125c0 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 ing the testing 125d0 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20 20 process,.. 125e0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 125f0 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 add an error to 12600 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c the test log fil 12610 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e... 12620 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 12630 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
12640 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
12650 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
12660 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
12670 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79  could not verify
12680 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
12690 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 20   \"" $directory 126a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 126b0 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 "\", all te 126c0 73 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e 22 5d sting halted\n"] 126d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 126e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 126f0 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 73 69 # NOTE: Raisi 12700 6e 67 20 61 20 73 63 72 69 70 74 20 65 72 72 6f ng a script erro 12710 72 20 66 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e r from this poin 12720 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d 0a 20 t should halt.. 12730 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 12740 20 20 20 20 20 74 68 65 20 74 65 73 74 69 6e 67 the testing 12750 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 process... 12760 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 12770 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 error 12780 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 127a0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 "could not veri 127b0 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f fy build directo 127c0 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 ry \""$director
127d0 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y \..
127e0 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20         "\", all
127f0 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 5d  testing halted"]
12800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
12810 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
12820 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
12830 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
12840 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f  kip trying to co
12850 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20  py any files if
12860 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75  we are so instru
12870 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  cted...
12880 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
12890 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
128a0 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46  ::no(copySqliteF
128b0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
128c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
128d0 6f 70 79 41 73 73 65 6d 62 6c 79 20 73 71 6c 69  opyAssembly sqli
128e0 74 65 33 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  te3.dll..
128f0 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
12900 6d 62 6c 79 20 53 51 4c 69 74 65 2e 49 6e 74 65  mbly SQLite.Inte
12910 72 6f 70 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  rop.dll..
12920 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
12930 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
12940 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20  .SQLite.dll..
12950 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
12960 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
12970 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
12980 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  .dll..
12990 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  }....          #
129a0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
129b0 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20  TE: Skip trying
129c0 74 6f 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65  to load any file
129d0 73 20 69 66 20 77 65 20 61 72 65 20 73 6f 20 69  s if we are so i
129e0 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20  nstructed...
129f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12a00 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
12a10 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71  ists ::no(loadSq
12a20 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65  liteFiles)]} the
12a30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
12a40 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79   tryLoadAssembly
12a50 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
12a60 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  ite.dll..
12a70 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65       tryLoadAsse
12a80 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
12a90 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
12aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
12ab0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
12ac0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
12ad0 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64  Skip trying to d
12ae0 65 6c 65 74 65 20 65 78 74 65 72 6e 61 6c 20 66  elete external f
12af0 69 6c 65 73 20 69 66 20 77 65 20 61 72 65 20 73  iles if we are s
12b00 6f 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20  o instructed...
12b10 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
12b20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
12b30 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c   exists ::no(del
12b40 65 74 65 53 71 6c 69 74 65 45 78 74 65 72 6e 61  eteSqliteExterna
12b50 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  lFiles)]} then {
12b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
12b70 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65  yDeleteBuildFile
12b80 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d   Installer.exe.m
12b90 64 61 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20  da.config..
12ba0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
12bb0 42 75 69 6c 64 46 69 6c 65 20 74 65 73 74 2e 65  BuildFile test.e
12bc0 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 0d 0a 20  xe.mda.config..
12bd0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
12be0 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20 74 65  leteBuildFile te
12bf0 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e 63  stlinq.exe.mda.c
12c00 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20  onfig..
12c10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
12c20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
12c30 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67  OTE: Skip trying
12c40 20 74 6f 20 63 6f 70 79 20 65 78 74 65 72 6e 61   to copy externa
12c50 6c 20 66 69 6c 65 73 20 69 66 20 77 65 20 61 72  l files if we ar
12c60 65 20 73 6f 20 69 6e 73 74 72 75 63 74 65 64 2e  e so instructed.
12c70 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
12c80 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
12c90 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
12ca0 63 6f 70 79 53 71 6c 69 74 65 45 78 74 65 72 6e  copySqliteExtern
12cb0 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  alFiles)]} then
12cc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
12cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
12ce0 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 4d  NOTE: Copy the M
12cf0 44 41 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  DA configuration
12d00 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20 45 61   file for the Ea
12d10 67 6c 65 20 73 68 65 6c 6c 20 74 6f 20 74 68 65  gle shell to the
12d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
12d30 20 20 20 20 20 20 62 75 69 6c 64 20 6f 75 74 70        build outp
12d40 75 74 20 64 69 72 65 63 74 6f 72 79 3b 20 68 6f  ut directory; ho
12d50 77 65 76 65 72 2c 20 75 73 65 20 74 68 65 20 6e  wever, use the n
12d60 61 6d 65 20 6f 66 20 74 68 65 20 6c 65 67 61 63  ame of the legac
12d70 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  y..            #
12d80 20 20 20 20 20 20 20 74 65 73 74 20 65 78 65 63         test exec
12d90 75 74 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69  utable.  This wi
12da0 6c 6c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  ll make sure tha
12db0 74 20 74 68 65 20 6c 65 67 61 63 79 20 74 65 73  t the legacy tes
12dc0 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..
12dd0 23 20 20 20 20 20 20 20 72 75 6e 20 77 69 74 68  #       run with
12de0 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f 66   the same set of
12df0 20 4d 44 41 73 20 63 6f 6e 66 69 67 75 72 65 64   MDAs configured
12e00 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
12e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
12e20 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20  yCopyBinaryFile
12e30 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d  EagleShell.exe.m
12e40 64 61 2e 63 6f 6e 66 69 67 20 49 6e 73 74 61 6c  da.config Instal
12e50 6c 65 72 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  ler.exe.mda.conf
12e60 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ig..
12e70 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c  tryCopyBinaryFil
12e80 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65  e EagleShell.exe
12e90 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65 73 74  .mda.config test
12ea0 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 0d  .exe.mda.config.
12eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
12ec0 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20 45  CopyBinaryFile E
12ed0 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64  agleShell.exe.md
12ee0 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 6c 69 6e  a.config testlin
12ef0 71 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  q.exe.mda.config
12f00 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
12f10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
12f20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
12f30 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 12f40 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 12f50 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 12f60 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 12f70 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 12f80 5c 22 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e \"sqlite3.dll\". 12f90 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 .. " \.. 12fa0 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 [file vers 12fb0 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ion [getBinaryFi 12fc0 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 leName sqlite3.d 12fd0 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 ll]] \n].. 12fe0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 }.... c 12ff0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 13000 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
13010 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
13020 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
13030 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
13040 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 51 4c  version of \"SQL
13050 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c  ite.Interop.dll\
13060 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20  "... " \..
13070 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65          [file ve
13080 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79  rsion [getBinary
13090 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e  FileName SQLite.
130a0 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 20 5c 6e  Interop.dll]] \n
130b0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ]..        }....
130c0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
130d0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
130e0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 130f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 13100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 13110 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 13120 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 of \"System.Dat 13130 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e a.SQLite.dll\".. 13140 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 . " \.. 13150 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 [file versi 13160 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c on [getBinaryFil 13170 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 eName System.Dat 13180 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20 5c a.SQLite.dll]] \ 13190 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d n].. }... 131a0 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 131b0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 131c0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
131d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
131e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
131f0 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
13200 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61  n of \"System.Da
13210 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64  ta.SQLite.Linq.d
13220 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20  ll\"... " \..
13230 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
13240 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e   version [getBin
13250 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74  aryFileName Syst
13260 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c  em.Data.SQLite.L
13270 69 6e 71 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20  inq.dll]] \n]..
13280 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
13290 20 20 20 20 73 65 74 20 61 73 73 65 6d 62 6c 69      set assembli
132a0 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  es [object invok
132b0 65 20 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72  e AppDomain.Curr
132c0 65 6e 74 44 6f 6d 61 69 6e 20 47 65 74 41 73 73  entDomain GetAss
132d0 65 6d 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20  emblies]....
132e0 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
132f0 63 68 20 61 73 73 65 6d 62 6c 79 20 24 61 73 73  ch assembly $ass 13300 65 6d 62 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20 emblies {.. 13310 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 13320 20 6d 61 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e match \{System. 13330 44 61 74 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 Data.SQLite*$as
13340 73 65 6d 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d  sembly]} then {.
13350 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
13360 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 13370 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 13380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 13390 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 61 73 "---- found as 133a0 73 65 6d 62 6c 79 3a 20 22 20 24 61 73 73 65 6d sembly: "$assem
133b0 62 6c 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  bly \n]..
133c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
133d0 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  ...        catch
133e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
133f0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 13400 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 13410 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 66 69 6e "---- defin 13420 65 20 63 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 e constants for 13430 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \"System.Data.SQ 13440 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 Lite\"... ".... 13450 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 13460 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f tch {object invo 13470 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 13480 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 13490 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 134a0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 134b0 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 74 ite3 DefineConst 134c0 61 6e 74 73 7d 20 5c 0d 0a 20 20 20 20 20 20 20 ants} \.. 134d0 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e defin 134e0 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 eConstants] == 0 134f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 13500 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
13510 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
13520 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c  endArgs [formatL
13530 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20  ist [lsort \..
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64                $d 13550 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 efineConstants] 13560 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 <none>] \n].. 13570 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 13580 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 13590 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
135a0 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20  el unknown\n..
135b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
135c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
135d0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
135e0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 135f0 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 13600 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 13610 73 6f 75 72 63 65 20 76 65 72 73 69 6f 6e 20 6f source version o 13620 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e f \"System.Data. 13630 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 SQLite.dll\"... 13640 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ".... i 13650 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 f {[catch {objec 13660 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 13670 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13690 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 136a0 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 te.SQLiteConnect 136b0 69 6f 6e 20 50 72 6f 76 69 64 65 72 56 65 72 73 ion ProviderVers 136c0 69 6f 6e 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 ion} \.. 136d0 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f versio 136e0 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d n] == 0} then {. 136f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 13700 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 13710 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20$version] == 0}
13720 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
13730 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f        set versio
13740 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20  n null..
13750 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
13760 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 13770 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 13780 41 72 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e Args$version \n
13790 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
137a0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
137b0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 137c0 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e _channel unknown 137d0 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d \n.. }. 137e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 137f0 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 13800 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
13810 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
13820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13830 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65  "---- source che
13840 63 6b 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65  ckout of \"Syste
13850 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
13860 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  l\"... "....
13870 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
13880 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   {object invoke
13890 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
138a0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
138b0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
138c0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
138d0 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69  Connection Provi
138e0 64 65 72 53 6f 75 72 63 65 49 64 7d 20 5c 0d 0a  derSourceId} \..
138f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13900 20 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30    sourceId] == 0
13910 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13920 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
13930 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65  g length $source 13940 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b Id] == 0} then { 13950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 13960 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c set sourceId nul 13970 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d l.. } 13980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 13990 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
139a0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
139b0 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20  $sourceId \n].. 139c0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 139d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 139e0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
139f0 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a  nnel unknown\n..
13a00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
13a10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
13a20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
13a30 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61  OTE: Check the a
13a40 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20  vailable builds
13a50 28 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29  (and "releases")
13a60 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a   of SQLite and..
13a70 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
13a80 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
13a90 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  te...        #..
13aa0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
13ab0 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a  SQLiteBuilds $:: 13ac0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 test_channel.. 13ad0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 13ae0 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a LiteReleases$::
13af0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a  test_channel....
13b00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13b10 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20     # NOTE: Now,
13b20 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20  we need to know
13b30 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
13b40 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76  re library is av
13b50 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ailable..
13b60 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62   #       (i.e. b
13b70 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67  ecause the manag
13b80 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44  ed-only System.D
13b90 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d  ata.SQLite assem
13ba0 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20  bly can..
13bb0 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69   #       load wi
13bc0 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65  thout it; howeve
13bd0 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20  r, it cannot do
13be0 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20  anything useful
13bf0 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20  without..
13c00 20 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49   #       it).  I
13c10 66 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74  f we are using t
13c20 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
13c30 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c  sembly and we al
13c40 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23  ready..        #
13c50 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20         found it
13c60 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68  (above), this sh
13c70 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63  ould always succ
13c80 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  eed...        #.
13c90 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
13ca0 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24  rSQLiteLibrary $13cb0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 13cc0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 13cd0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 13ce0 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 ck if the SQLite 13cf0 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c interop assembl 13d00 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d y is available.. 13d10 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 13d20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 checkForSQLi 13d30 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 teInterop$::tes
13d40 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
13d50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
13d60 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68  # NOTE: Check th
13d70 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  e SQLite databas
13d80 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20  e and temporary
13d90 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20  directories...
13da0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13db0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44   checkForSQLiteD
13dc0 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65  irectories $::te 13dd0 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 13de0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13df0 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 13e00 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 to determine if 13e10 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 various compile 13e20 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 -time options ne 13e30 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 eded for.. 13e40 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63 # test c 13e50 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 onstraints were 13e60 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 enabled for the 13e70 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 managed assembly 13e80 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 . There.. 13e90 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73 6f # are so 13ea0 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 me compile-time 13eb0 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 options that mus 13ec0 74 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e t also have been 13ed0 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 enabled.. 13ee0 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 # for th 13ef0 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 e interop assemb 13f00 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 ly in order to b 13f10 65 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f e effective. Fo 13f20 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 r those.. 13f30 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 # options 13f40 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 , it will be ass 13f50 75 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 73 umed that it was 13f60 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 enabled for the 13f70 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 interop.. 13f80 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 13f90 6c 79 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 ly if it was ena 13fa0 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e bled for the man 13fb0 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a aged assembly... 13fc0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 13fd0 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e foreach defin 13fe0 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 eConstant [list 13ff0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 \.. C 14000 48 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 HECK_STATE COUNT 14010 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e _HANDLE DEBUG IN 14020 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 TEROP_CODEC INTE 14030 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 ROP_DEBUG \.. 14040 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP 14050 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 _EXTENSION_FUNCT 14060 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 4c 45 47 IONS INTEROP_LEG 14070 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45 52 4f ACY_CLOSE INTERO 14080 50 5f 4c 4f 47 20 5c 0d 0a 20 20 20 20 20 20 20 P_LOG \.. 14090 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 45 53 INTEROP_TES 140a0 54 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 T_EXTENSION INTE 140b0 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c ROP_VIRTUAL_TABL 140c0 45 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20 E NET_20 NET_35 140d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4e \.. N 140e0 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 ET_40 NET_45 NET 140f0 5f 43 4f 4d 50 41 43 54 5f 32 30 20 50 4c 41 54 _COMPACT_20 PLAT 14100 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d FORM_COMPACTFRAM 14110 45 57 4f 52 4b 20 5c 0d 0a 20 20 20 20 20 20 20 EWORK \.. 14120 20 20 20 20 20 50 52 45 4c 4f 41 44 5f 4e 41 54 PRELOAD_NAT 14130 49 56 45 5f 4c 49 42 52 41 52 59 20 52 45 54 41 IVE_LIBRARY RETA 14140 52 47 45 54 41 42 4c 45 20 53 51 4c 49 54 45 5f RGETABLE SQLITE_ 14150 53 54 41 4e 44 41 52 44 20 5c 0d 0a 20 20 20 20 STANDARD \.. 14160 20 20 20 20 20 20 20 20 54 48 52 4f 57 5f 4f 4e THROW_ON 14170 5f 44 49 53 50 4f 53 45 44 20 54 52 41 43 45 20 _DISPOSED TRACE 14180 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e TRACE_CONNECTION 14190 20 54 52 41 43 45 5f 48 41 4e 44 4c 45 20 5c 0d TRACE_HANDLE \. 141a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41 . TRA 141b0 43 45 5f 50 52 45 4c 4f 41 44 20 54 52 41 43 45 CE_PRELOAD TRACE 141c0 5f 53 54 41 54 45 4d 45 4e 54 20 54 52 41 43 45 _STATEMENT TRACE 141d0 5f 57 41 52 4e 49 4e 47 20 54 52 41 43 4b 5f 4d _WARNING TRACK_M 141e0 45 4d 4f 52 59 5f 42 59 54 45 53 20 5c 0d 0a 20 EMORY_BYTES \.. 141f0 20 20 20 20 20 20 20 20 20 20 20 55 53 45 5f 49 USE_I 14200 4e 54 45 52 4f 50 5f 44 4c 4c 20 55 53 45 5f 50 NTEROP_DLL USE_P 14210 52 45 50 41 52 45 5f 56 32 20 57 49 4e 44 4f 57 REPARE_V2 WINDOW 14220 53 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 S] {.. 14230 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 14240 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th 14250 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f e compile-time o 14260 70 74 69 6f 6e 20 69 73 20 6c 69 73 74 65 64 20 ption is listed 14270 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0d 0a in the list of.. 14280 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 14290 20 20 22 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 "define consta 142a0 6e 74 73 22 20 6b 65 70 74 20 74 72 61 63 6b 20 nts" kept track 142b0 6f 66 20 62 79 20 74 68 65 20 6d 61 6e 61 67 65 of by the manage 142c0 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 d assembly... 142d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 142e0 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 checkForSQLi 142f0 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 teDefineConstant 14300 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
14310 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74   $defineConstant 14320 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 14330 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 14340 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 14350 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c the current buil 14360 64 20 79 65 61 72 2e 20 20 42 61 73 69 63 61 6c d year. Basical 14370 6c 79 2c 20 74 68 69 73 20 69 6e 64 69 63 61 74 ly, this indicat 14380 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 es.. # 14390 20 20 20 20 77 68 69 63 68 20 76 65 72 73 69 6f which versio 143a0 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 6e 64 n of MSBuild and 143b0 2f 6f 72 20 56 69 73 75 61 6c 20 53 74 75 64 69 /or Visual Studi 143c0 6f 20 77 61 73 20 75 73 65 64 20 74 6f 0d 0a 20 o was used to.. 143d0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 143e0 6f 6d 70 69 6c 65 20 74 68 65 20 61 73 73 65 6d ompile the assem 143f0 62 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e 64 bly binaries und 14400 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 er test... 14410 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 14420 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
14430 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  el \..
14440 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67    "---- checking
14450 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61   for System.Data
14460 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 79 65  .SQLite build ye
14470 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ar... "....
14480 20 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74     set year [get
14490 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20  BuildYear]..
144a0 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
144b0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75  t [appendArgs bu
144c0 69 6c 64 59 65 61 72 2e 20 24 79 65 61 72 5d 0d  ildYear. $year]. 144d0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
144e0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
144f0 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 79  appendArgs \" $y 14500 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 ear \"\n].... 14510 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14520 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 # NOTE: Check th 14530 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 e current build 14540 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 configuration. 14550 54 68 69 73 20 73 68 6f 75 6c 64 20 6e 6f 72 6d This should norm 14560 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 ally.. # 14570 20 20 20 20 20 20 62 65 20 65 69 74 68 65 72 20 be either 14580 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 "Debug" or "Rele 14590 61 73 65 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 ase"... # 145a0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 145b0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
145c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
145d0 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
145e0 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
145f0 4c 69 74 65 20 62 75 69 6c 64 20 63 6f 6e 66 69  Lite build confi
14600 67 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d  guration... "...
14610 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e  .        set con
14620 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42  figuration [getB
14630 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
14640 6e 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43  n]..        addC
14650 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
14660 64 41 72 67 73 20 62 75 69 6c 64 43 6f 6e 66 69  dArgs buildConfi
14670 67 75 72 61 74 69 6f 6e 2e 20 24 63 6f 6e 66 69  guration. $confi 14680 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 guration].. 14690 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
146a0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
146b0 41 72 67 73 20 5c 22 20 24 63 6f 6e 66 69 67 75  Args \" $configu 146c0 72 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a ration \"\n].... 146d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 146e0 20 20 20 23 20 4e 4f 54 45 3a 20 54 72 79 20 74 # NOTE: Try t 146f0 6f 20 73 65 74 75 70 20 61 6e 20 69 6e 74 65 72 o setup an inter 14700 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 20 75 73 rupt callback us 14710 69 6e 67 20 74 68 65 20 73 63 72 69 70 74 20 64 ing the script d 14720 65 62 75 67 67 65 72 0d 0a 20 20 20 20 20 20 20 ebugger.. 14730 20 23 20 20 20 20 20 20 20 74 68 61 74 20 77 69 # that wi 14740 6c 6c 20 63 61 6e 63 65 6c 20 61 6c 6c 20 53 51 ll cancel all SQ 14750 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f L queries in pro 14760 67 72 65 73 73 20 66 6f 72 20 61 6c 6c 20 64 61 gress for all da 14770 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 tabase.. 14780 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 # connecti 14790 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 ons known to thi 147a0 73 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a s interpreter... 147b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 147c0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 147d0 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 ists ::no(sqlite 147e0 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 InterruptCallbac 147f0 6b 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 k)]} then {.. 14800 20 20 20 20 20 20 20 73 65 74 75 70 44 62 49 6e setupDbIn 14810 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 terruptCallback 14820 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
14830 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20 20 20  $::test_log.. 14840 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 14850 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 14860 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 OTE: Check for t 14870 68 65 20 6e 61 74 69 76 65 20 72 75 6e 74 69 6d he native runtim 14880 65 20 6f 70 74 69 6f 6e 2c 20 77 68 69 63 68 20 e option, which 14890 77 6f 75 6c 64 20 6d 65 61 6e 20 77 65 20 61 72 would mean we ar 148a0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 148b0 20 20 20 75 73 69 6e 67 20 74 68 65 20 6d 69 78 using the mix 148c0 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 148d0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 148e0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 checkForRu 148f0 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 ntimeOption$::t
14900 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 61 74 69  est_channel nati
14910 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  ve....        #.
14920 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
14930 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 74 65   Check if the te
14940 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c 64 20  st suite should
14950 63 6f 75 6e 74 20 74 68 65 20 6e 75 6d 62 65 72  count the number
14960 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d   of connections.
14970 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
14980 20 22 6f 70 65 6e 65 64 22 20 61 6e 64 20 22 63   "opened" and "c
14990 6c 6f 73 65 64 22 20 66 72 6f 6d 20 74 68 65 20  losed" from the
149a0 70 6f 6f 6c 20 77 68 65 6e 20 64 65 74 65 72 6d  pool when determ
149b0 69 6e 69 6e 67 20 69 66 20 61 20 74 65 73 74 0d  ining if a test.
149c0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
149d0 20 70 61 73 73 65 64 2e 20 20 44 69 73 61 62 6c   passed.  Disabl
149e0 69 6e 67 20 74 68 69 73 20 62 65 68 61 76 69 6f  ing this behavio
149f0 72 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 6e  r is sometimes n
14a00 65 63 65 73 73 61 72 79 20 28 65 2e 67 2e 0d 0a  ecessary (e.g...
14a10 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
14a20 64 75 72 69 6e 67 20 74 68 65 20 72 65 6c 65 61  during the relea
14a30 73 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65  se testing proce
14a40 73 73 29 20 62 65 63 61 75 73 65 20 74 68 65 72  ss) because ther
14a50 65 20 61 72 65 20 73 65 76 65 72 61 6c 0d 0a 20  e are several..
14a60 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
14a70 65 73 74 73 20 74 68 61 74 20 72 65 6c 79 20 6f  ests that rely o
14a80 6e 20 74 68 65 20 22 6f 70 65 6e 65 64 20 66 72  n the "opened fr
14a90 6f 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e 74 20 62  om pool" count b
14aa0 65 69 6e 67 20 67 72 65 61 74 65 72 0d 0a 20 20  eing greater..
14ab0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
14ac0 61 6e 20 7a 65 72 6f 2e 20 20 54 68 65 73 65 20  an zero.  These
14ad0 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c 20 64  tests may fail d
14ae0 75 65 20 74 6f 20 74 68 65 20 6e 6f 6e 2d 64 65  ue to the non-de
14af0 74 65 72 6d 69 6e 69 73 74 69 63 0d 0a 20 20 20  terministic..
14b00 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 68       #       beh
14b10 61 76 69 6f 72 20 6f 66 20 74 68 65 20 43 4c 52  avior of the CLR
14b20 20 47 43 2c 20 65 76 65 6e 20 77 68 65 6e 20 74   GC, even when t
14b30 68 65 72 65 20 69 73 20 6e 6f 20 62 75 67 20 69  here is no bug i
14b40 6e 20 74 68 65 20 63 6f 64 65 0d 0a 20 20 20 20  n the code..
14b50 20 20 20 20 23 20 20 20 20 20 20 20 62 65 69 6e      #       bein
14b60 67 20 74 65 73 74 65 64 2e 0d 0a 20 20 20 20 20  g tested...
14b70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
14b80 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74  eckForRuntimeOpt
14b90 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ion $::test_chan 14ba0 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 nel noPoolCounts 14bb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 14bc0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 # NOTE: R 14bd0 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 eport the resour 14be0 63 65 20 75 73 61 67 65 20 70 72 69 6f 72 20 74 ce usage prior t 14bf0 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 74 65 o running any te 14c00 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d sts... #. 14c10 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 . reportS 14c20 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 QLiteResources$
14c30 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
14c40 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
14c50 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f       # NOTE: Sho
14c60 77 20 74 68 65 20 61 63 74 69 76 65 20 74 65 73  w the active tes
14c70 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a  t constraints...
14c80 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14c90 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 14ca0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 14cb0 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 Args "---- const 14cc0 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20 raints: " \.. 14cd0 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 74 [format 14ce0 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74 List [lsort [get 14cf0 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 3c 6e Constraints]] <n 14d00 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 one>] \n].... 14d10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14d20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 # NOTE: Save the 14d30 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 test constraint 14d40 73 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 72 s for use by thr 14d50 65 61 64 73 20 63 72 65 61 74 65 64 20 69 6e 20 eads created in 14d60 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 this.. # 14d70 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f applicatio 14d80 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20 n domain. This 14d90 69 73 20 6e 65 63 65 73 73 61 72 79 20 62 65 63 is necessary bec 14da0 61 75 73 65 20 61 6c 6c 20 74 68 65 20 45 61 67 ause all the Eag 14db0 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 le.. # 14dc0 20 20 20 20 22 74 65 73 74 20 63 6f 6e 74 65 78 "test contex 14dd0 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 t" information i 14de0 73 20 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20 s per-thread... 14df0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 14e00 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 14e10 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 sts ::test_const 14e20 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d raints]} then {. 14e30 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a . set : 14e40 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 :test_constraint 14e50 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 s$::eagle_tests
14e60 28 63 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20  (constraints)..
14e70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
14e80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
14e90 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20   NOTE: Load the
14ea0 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e  "after-constrain
14eb0 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75  ts" custom per-u
14ec0 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68  ser and/or per-h
14ed0 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ost..        #
14ee0 20 20 20 20 20 74 65 73 74 20 73 65 74 74 69 6e       test settin
14ef0 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20  gs now...
14f00 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65   #..        uple
14f10 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64  vel 1 [list load
14f20 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e  SQLiteTestSettin
14f30 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  gs $::test_chann 14f40 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 el .after].... 14f50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 14f60 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 # NOTE: Show wh 14f70 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 en our tests act 14f80 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 ually began (now 14f90 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 14fa0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
14fb0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
14fc0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
14fd0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79          "---- Sy
14fe0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
14ff0 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 74 20   tests began at
15000 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
15010 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b   [clock format [
15020 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20  clock seconds]]
15030 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
15040 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
15050 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 70   runSQLiteTestEp
15060 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20  ilogue {} {..
15070 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
15080 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67  TE: Skip running
15090 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 69 6c   our custom epil
150a0 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e  ogue if the main
150b0 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20   one has been..
150c0 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69       #       ski
150d0 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  pped...      #..
150e0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
150f0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69   exists ::no(epi
15100 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74  logue.eagle)]} t
15110 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
15120 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
15130 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 20  : Show when our
15140 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 65  tests actually e
15150 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 20  nded (now)...
15160 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15170 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 15180 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 15190 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 151a0 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 "---- System.Da 151b0 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73 20 ta.SQLite tests 151c0 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a 20 20 ended at " \.. 151d0 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b [clock 151e0 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 format [clock s 151f0 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a econds]] \n].... 15200 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 15210 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 # BUGFIX: Bef 15220 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 74 68 65 ore checking the 15230 20 66 69 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 final resources 15240 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 in use by SQLit 15250 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 e, make.. 15260 20 23 20 20 20 20 20 20 20 20 20 73 75 72 65 20 # sure 15270 62 6f 74 68 20 6f 66 20 74 68 65 20 50 52 41 47 both of the PRAG 15280 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 MA related direc 15290 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 tory names are f 152a0 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 reed... # 152b0 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 152c0 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 orSQLiteDirector 152d0 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ies$::test_chan
152e0 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20  nel true....
152f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
15300 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f   NOTE: Also repo
15310 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20  rt the resource
15320 75 73 61 67 65 20 61 66 74 65 72 20 72 75 6e 6e  usage after runn
15330 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a  ing the tests...
15340 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
15350 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52     reportSQLiteR
15360 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74  esources $::test 15370 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 _channel.... 15380 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 15390 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 NOTE: Report th 153a0 65 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c e critical handl 153b0 65 20 63 6f 75 6e 74 73 20 61 66 74 65 72 20 72 e counts after r 153c0 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 unning the tests 153d0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 153e0 20 20 20 20 20 20 67 65 74 53 51 4c 69 74 65 48 getSQLiteH 153f0 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 andleCounts$::t
15400 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  est_channel..
15410 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
15420 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23      ############
15430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
15470 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
15480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15490 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e 4c  ## END Eagle ONL
154a0 59 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  Y ##############
154b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
154c0 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
154d0 23 23 23 23 23 23 23 23 23 23 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 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20  #..  }....  #..
15520 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68   # NOTE: Save th
15530 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69  e name of the di
15540 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69  rectory containi
15550 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20  ng this file...
15560 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f   #..  if {![info
15570 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f 64   exists common_d
15580 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20  irectory]} then
15590 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d 6f  {..    set commo
155a0 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c  n_directory [fil
155b0 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20  e dirname [info
155c0 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d  script]]..  }...
155d0 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE:
155e0 50 72 6f 76 69 64 65 20 74 68 65 20 53 79 73 74  Provide the Syst
155f0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74  em.Data.SQLite t
15600 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f 20 74  est package to t
15610 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  he interpreter..
15620 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67 65 20  .  #..  package
15630 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d 2e 44  provide System.D
15640 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74 20  ata.SQLite.Test
15650 31 2e 30 0d 0a 7d 0d 0a                          1.0..}..