System.Data.SQLite
Hex Artifact Content
Not logged in

• File Tests/common.eagle — part of check-in [a75bb0a659] at 2013-02-15 04:36:50 on branch legacyClose — Fix compilation and test issues with the INTEROP_LEGACY_CLOSE compile-time option. (user: mistachkin size: 71098) [more...]

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 43 6f 6e 66 69 67 75 72  getBuildConfigur
0f40: 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20  ation {} {..
0f50: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
0f60: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22 63  E: See if the "c
0f70: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73 65  onfiguration" se
0f80: 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f  tting has been o
0f90: 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65  verridden by the
0fa0: 20 75 73 65 72 0d 0a 20 20 20 20 20 20 23 20 20   user..      #
0fb0: 20 20 20 20 20 28 65 2e 67 2e 20 6f 6e 20 74 68       (e.g. on th
0fc0: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e  e command line).
0fd0: 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e    This helps con
0fe0: 74 72 6f 6c 20 65 78 61 63 74 6c 79 20 77 68 69  trol exactly whi
0ff0: 63 68 20 73 65 74 0d 0a 20 20 20 20 20 20 23 20  ch set..      #
1000: 20 20 20 20 20 20 6f 66 20 62 69 6e 61 72 69 65        of binarie
1010: 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67  s we are testing
1020: 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75 69   (i.e. those bui
1030: 6c 74 20 69 6e 20 74 68 65 20 22 44 65 62 75 67  lt in the "Debug
1040: 22 20 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20  " or..      #
1050: 20 20 20 20 22 52 65 6c 65 61 73 65 22 20 62 75      "Release" bu
1060: 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ild configuratio
1070: 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69 64  ns).  To overrid
1080: 65 20 74 68 69 73 20 76 61 6c 75 65 20 76 69 61  e this value via
1090: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
10a0: 20 20 20 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65      command line
10b0: 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e  , enter a comman
10c0: 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65  d similar to one
10d0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
10e0: 67 20 28 61 6c 6c 0d 0a 20 20 20 20 20 20 23 20  g (all..      #
10f0: 20 20 20 20 20 20 6f 6e 20 6f 6e 65 20 6c 69 6e        on one lin
1100: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  e):..      #..
1110: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
1120: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65 49  eShell.exe -preI
1130: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74  nitialize "set t
1140: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
1150: 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20 20  n Debug"..
1160: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20  #         -file
1170: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
1180: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  gle..      #..
1190: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
11a0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65 49  eShell.exe -preI
11b0: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74  nitialize "set t
11c0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
11d0: 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20 20  n Release"..
11e0: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
11f0: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
1200: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
1210: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61        #       Ea
1220: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66 69  gleShell.exe -fi
1230: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c  le .\path\to\all
1240: 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74 0d  .eagle -preTest.
1250: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
1260: 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c   "unset -nocompl
1270: 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67 75  ain test_configu
1280: 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 23  ration"..      #
1290: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
12a0: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
12b0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 26  configuration] &
12c0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
12d0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 12e0: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 :test_configurat 12f0: 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ion] > 0} then { 1300: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1310: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 1320: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 the specified t 1330: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f est configuratio 1340: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 n. The default 1350: 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20 20 value used.. 1360: 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 # for 1370: 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 73 this variable is 1380: 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 20 73 "Release", as s 1390: 65 74 20 62 79 20 74 68 65 20 74 65 73 74 20 73 et by the test s 13a0: 75 69 74 65 20 69 74 73 65 6c 66 2e 0d 0a 20 20 uite itself... 13b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13c0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f return$::test_
13d0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  configuration..
13e0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
13f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1400: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72 6d 61 6c    # NOTE: Normal
1410: 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e 65 76 65  ly, we will neve
1420: 72 20 68 69 74 20 74 68 69 73 20 63 61 73 65 20  r hit this case
1430: 62 65 63 61 75 73 65 20 74 68 65 20 76 61 6c 75  because the valu
1440: 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  e of the..
1450: 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63    #       test c
1460: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 61 72  onfiguration var
1470: 69 61 62 6c 65 20 69 73 20 61 6c 77 61 79 73 20  iable is always
1480: 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 20  set by the test
1490: 73 75 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23  suite..        #
14a0: 20 20 20 20 20 20 20 69 74 73 65 6c 66 3b 20 68         itself; h
14b0: 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 20 62  owever, it can b
14c0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 75 73 69  e overridden usi
14d0: 6e 67 20 74 68 65 20 75 6e 73 65 74 20 63 6f 6d  ng the unset com
14e0: 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20  mand..        #
14f0: 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 2d        from the -
1500: 70 72 65 54 65 73 74 20 6f 70 74 69 6f 6e 20 74  preTest option t
1510: 6f 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  o the test suite
1520: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1530: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 1540: 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 63 eagle_platform(c 1550: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 0d 0a 20 onfiguration).. 1560: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 1570: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 .. proc getBu 1580: 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 ildDirectory {} 1590: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 15a0: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 # NOTE: See if 15b0: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 the "native" ru 15c0: 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 ntime option has 15d0: 20 62 65 65 6e 20 73 65 74 2e 20 20 49 66 20 73 been set. If s 15e0: 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 o, use the.. 15f0: 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 # direct 1600: 6f 72 79 20 66 6f 72 20 74 68 65 20 6d 69 78 65 ory for the mixe 1610: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 d-mode assembly 1620: 28 61 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69 (a.k.a. the nati 1630: 76 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 ve interop.. 1640: 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 1650: 6c 79 29 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20 ly). To enable 1660: 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 this option via 1670: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line 1680: 2c 20 65 6e 74 65 72 20 61 0d 0a 20 20 20 20 20 , enter a.. 1690: 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 # command 16a0: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 similar to one 16b0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 of the following 16c0: 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e (all on one lin 16d0: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e):.. #.. 16e0: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 16f0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 eShell.exe -init 1700: 69 61 6c 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f ialize -runtimeO 1710: 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 ption native.. 1720: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 # -f 1730: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c ile .\path\to\al 1740: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 l.eagle.. # 1750: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1760: 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 20 6f To enable this o 1770: 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 63 6f ption via the co 1780: 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72 mmand line prior 1790: 20 74 6f 20 74 68 65 20 22 62 65 74 61 20 31 36 to the "beta 16 17a0: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ".. # 17b0: 20 72 65 6c 65 61 73 65 20 6f 66 20 45 61 67 6c release of Eagl 17c0: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 e, the following 17d0: 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65 command must be 17e0: 20 75 73 65 64 20 69 6e 73 74 65 61 64 0d 0a 20 used instead.. 17f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 28 61 6c # (al 1800: 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 so all on one li 1810: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ne):.. #.. 1820: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 1830: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 leShell.exe -ini 1840: 74 69 61 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69 tialize -postIni 1850: 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23 tialize.. # 1860: 20 20 20 20 20 20 20 20 20 22 6f 62 6a 65 63 74 "object 1870: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 invoke Interpre 1880: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 41 64 ter.GetActive Ad 1890: 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e dRuntimeOption n 18a0: 61 74 69 76 65 22 0d 0a 20 20 20 20 20 20 23 20 ative".. # 18b0: 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c -file .\ 18c0: 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c path\to\all.eagl 18d0: 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 e.. #.. 18e0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 18f0: 74 73 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 ts ::build_direc 1900: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tory] && \.. 1910: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 1920: 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69 ngth$::build_di
1930: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68  rectory] > 0} th
1940: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
1950: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1960: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66   The location of
1970: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
1980: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
1990: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
19a0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
19b0: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72  fore, use it ver
19c0: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
19d0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
19e0: 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63  n $::build_direc 19f0: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 1a00: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 1a10: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1a20: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 Figure out the 1a30: 62 75 69 6c 64 20 62 61 73 65 20 64 69 72 65 63 build base direc 1a40: 74 6f 72 79 2e 20 20 54 68 69 73 20 77 69 6c 6c tory. This will 1a50: 20 62 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 be the director 1a60: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 1a70: 20 20 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 that contains 1a80: 20 74 68 65 20 61 63 74 75 61 6c 20 62 75 69 6c the actual buil 1a90: 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f d output directo 1aa0: 72 79 20 28 65 2e 67 2e 20 22 62 69 6e 22 29 2e ry (e.g. "bin"). 1ab0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1ac0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 1ad0: 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 62 61 xists ::build_ba 1ae0: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 se_directory] && 1af0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b00: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
1b10: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
1b20: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
1b30: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
1b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
1b50: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e  TE: The location
1b60: 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 62 61   of the build ba
1b70: 73 65 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  se directory has
1b80: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
1b90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  ;..          #
1ba0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore,
1bb0: 75 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e  use it verbatim.
1bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1bd0: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74           set pat
1be0: 68 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f  h $::build_base_ 1bf0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 1c00: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in 1c10: 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d fo exists ::comm 1c20: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 on_directory] && 1c30: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c40: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
1c50: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
1c60: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
1c70: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1c80: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1c90: 4e 65 78 74 2c 20 66 61 6c 6c 62 61 63 6b 20 74  Next, fallback t
1ca0: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64 69 72  o the parent dir
1cb0: 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f 6e  ectory of the on
1cc0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20  e containing..
1cd0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1ce0: 74 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e 20  this file (i.e.
1cf0: 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c  "common.eagle"),
1d00: 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   if available...
1d10: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1d20: 20 20 20 20 20 20 20 73 65 74 20 70 61 74 68 20         set path
1d30: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a  [file dirname $: 1d40: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 :common_director 1d50: 79 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c y].. } el 1d60: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 1d70: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1d80: 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 OTE: Finally, fa 1d90: 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 70 61 llback to the pa 1da0: 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f rent directory o 1db0: 66 20 74 68 65 20 45 61 67 6c 65 54 65 73 74 0d f the EagleTest. 1dc0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 1dd0: 20 20 20 70 61 74 68 2e 20 20 54 68 65 20 45 61 path. The Ea 1de0: 67 6c 65 54 65 73 74 20 70 61 63 6b 61 67 65 20 gleTest package 1df0: 67 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 guarantees that 1e00: 74 68 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 this variable.. 1e10: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1e20: 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 will be set to 1e30: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f the directory co 1e40: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 72 ntaining the fir 1e50: 73 74 20 66 69 6c 65 20 74 6f 0d 0a 20 20 20 20 st file to.. 1e60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 # ex 1e70: 65 63 75 74 65 20 74 68 65 20 5b 72 75 6e 54 65 ecute the [runTe 1e80: 73 74 50 72 6f 6c 6f 67 75 65 5d 20 73 63 72 69 stPrologue] scri 1e90: 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65 pt library proce 1ea0: 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 dure... 1eb0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 #.. se 1ec0: 74 20 70 61 74 68 20 5b 66 69 6c 65 20 64 69 72 t path [file dir 1ed0: 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20 name$::path]..
1ee0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1ef0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1f00: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e   NOTE: If the "n
1f10: 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f  ative" runtime o
1f20: 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68  ption is set, th
1f30: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
1f40: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23  embly..        #
1f50: 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20         is being
1f60: 74 65 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74  tested.  In that
1f70: 20 63 61 73 65 2c 20 74 68 65 20 70 61 74 68 20   case, the path
1f80: 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  to the build dir
1f90: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..
1fa0: 23 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e  #       will con
1fb0: 74 61 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72  tain the platfor
1fc0: 6d 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74  m name and all t
1fd0: 68 65 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65  he binaries unde
1fe0: 72 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  r test..
1ff0: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  #       should b
2000: 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61  e present in tha
2010: 74 20 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66  t directory.  If
2020: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75   the "native" ru
2030: 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23  ntime..        #
2040: 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73         option is
2050: 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75   not set, the bu
2060: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 77 69  ild directory wi
2070: 6c 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64  ll be considered
2080: 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..
2090: 23 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72  #       "platfor
20a0: 6d 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68  m-neutral", with
20b0: 20 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63   the notable exc
20c0: 65 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61  eption of any na
20d0: 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20  tive..        #
20e0: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28        assembly (
20f0: 65 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74  e.g. "SQLite.Int
2100: 65 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65  erop.dll") copie
2110: 64 20 74 68 65 72 65 20 64 75 72 69 6e 67 20 74  d there during t
2120: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
2130: 20 20 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73      build proces
2140: 73 20 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68  s itself.  If th
2150: 65 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20  e build process
2160: 73 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74  somehow does not
2170: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2180: 20 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76    copy the nativ
2190: 65 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74  e assembly for t
21a0: 68 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f  his platform, mo
21b0: 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d  st of the tests.
21c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
21d0: 20 69 6e 20 74 68 65 20 73 75 69 74 65 20 77 69   in the suite wi
21e0: 6c 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69  ll simply be ski
21f0: 70 70 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79  pped.  Generally
2200: 20 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65   speaking, there
2210: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2220: 20 20 61 72 65 20 74 77 6f 20 77 61 79 73 20 74    are two ways t
2230: 6f 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61  o build the bina
2240: 72 69 65 73 20 77 68 65 6e 20 70 72 65 70 61 72  ries when prepar
2250: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a  ing to run the..
2260: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2270: 74 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20  test suite:..
2280: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2290: 23 20 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64  #       1. Build
22a0: 20 74 68 65 20 73 65 70 61 72 61 74 65 20 6d 61   the separate ma
22b0: 6e 61 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65  naged and native
22c0: 20 61 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e   assemblies usin
22d0: 67 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20  g some..
22e0: 23 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61  #          comma
22f0: 6e 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d  nds similar to:.
2300: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2310: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62      #          b
2320: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69  uild.bat ${Confi 2330: 67 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 guration}Managed 2340: 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d Only${Platform}
2350: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2360: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24       build.bat $2370: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e {Configuration}N 2380: 61 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 ativeOnly${Plat
2390: 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23  form}..        #
23a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
23b0: 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e       Where ${Con 23c0: 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 figuration} is e 23d0: 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 ither "Debug" or 23e0: 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a "Release" and.. 23f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2400: 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69${Platform} i
2410: 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22  s either "Win32"
2420: 20 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20   or "x64"...
2430: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2440: 20 20 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20         2. Build
2450: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
2460: 73 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20  ssembly using a
2470: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20  command similar
2480: 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  to:..        #..
2490: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
24a0: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43     build.bat ${C 24b0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b onfiguration}${
24c0: 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20  Platform}..
24d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
24e0: 20 20 20 20 20 20 20 20 20 57 68 65 72 65 20 24           Where $24f0: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 {Configuration} 2500: 69 73 20 65 69 74 68 65 72 20 22 44 65 62 75 67 is either "Debug 2510: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 " or "Release" a 2520: 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 nd.. # 2530: 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72${Platfor
2540: 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 57 69  m} is either "Wi
2550: 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20  n32" or "x64".
2560: 49 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  If this command
2570: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
2580: 20 20 20 20 20 20 20 75 73 65 64 2c 20 76 61 72         used, var
2590: 69 6f 75 73 20 74 65 73 74 73 20 74 68 61 74 20  ious tests that
25a0: 72 65 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65  require suppleme
25b0: 6e 74 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20  ntary managed..
25c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
25d0: 20 20 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e    assemblies (e.
25e0: 67 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20  g. LINQ) may be
25f0: 73 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74  skipped unless t
2600: 68 6f 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20  hose binaries..
2610: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
2620: 20 20 61 72 65 20 73 75 62 73 65 71 75 65 6e 74    are subsequent
2630: 6c 79 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74  ly copied into t
2640: 68 65 20 63 6f 72 72 65 63 74 20 64 69 72 65 63  he correct direc
2650: 74 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20  tory (i.e. by..
2660: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
2670: 20 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22    "test_all.bat"
2680: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  )...        #..
2690: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e         #       N
26a0: 6f 74 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20  ote that all of
26b0: 74 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e  the build comman
26c0: 64 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65  ds above will de
26d0: 66 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a  fault to using..
26e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
26f0: 74 68 65 20 6c 61 74 65 73 74 20 76 65 72 73 69  the latest versi
2700: 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76  on of MSBuild av
2710: 61 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20  ailable and the
2720: 22 74 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d  "test_year" may.
2730: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2740: 20 6e 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75   need to be adju
2750: 73 74 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79  sted accordingly
2760: 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e   to actually run
2770: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e   the test suite.
2780: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2790: 20 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 63    Refer to the c
27a0: 6f 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42  omments in [getB
27b0: 75 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f  uildYear] for mo
27c0: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  re information o
27d0: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
27e0: 20 20 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68     how to set th
27f0: 69 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20  is variable...
2800: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2810: 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65   if {[hasRuntime
2820: 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20  Option native]}
2830: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2840: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a    return [file j
2850: 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20 5b 67  oin $path bin [g 2860: 65 74 42 75 69 6c 64 59 65 61 72 5d 20 5b 6d 61 etBuildYear] [ma 2870: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 chineToPlatform 2880: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2890: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
28a0: 28 6d 61 63 68 69 6e 65 29 5d 20 5b 67 65 74 42  (machine)] [getB
28b0: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
28c0: 6e 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  n]]..        } e
28d0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
28e0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f   return [file jo
28f0: 69 6e 20 24 70 61 74 68 20 62 69 6e 20 5b 67 65  in $path bin [ge 2900: 74 42 75 69 6c 64 59 65 61 72 5d 20 5b 67 65 74 tBuildYear] [get 2910: 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 BuildConfigurati 2920: 6f 6e 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 on] \.. 2930: 20 20 20 20 20 62 69 6e 5d 0d 0a 20 20 20 20 20 bin].. 2940: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 2950: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 2960: 63 20 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 c getBuildFileNa 2970: 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 me { fileName } 2980: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 2990: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return 29a0: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 s the specified 29b0: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 file name as if 29c0: 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 it were located 29d0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 in the.. # 29e0: 20 20 20 20 20 20 62 75 69 6c 64 20 64 69 72 65 build dire 29f0: 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e ctory, discardin 2a00: 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 g any directory 2a10: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 information pres 2a20: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ent.. # 2a30: 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e in the file n 2a40: 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 ame as provided 2a50: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... 2a60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 2a70: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 eturn [file nati 2a80: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 vename \.. 2a90: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b [file join [ 2aa0: 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 getBuildDirector 2ab0: 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 y] [file tail$f
2ac0: 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20  ileName]]]..
2ad0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
2ae0: 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72  etBinaryDirector
2af0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  y {} {..      #.
2b00: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
2b10: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65  his procedure re
2b20: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74  turns the direct
2b30: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65  ory where the te
2b40: 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a  st application..
2b50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74        #       it
2b60: 73 65 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45  self (i.e. the E
2b70: 61 67 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c  agle shell) is l
2b80: 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20 77 69  ocated.  This wi
2b90: 6c 6c 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20  ll be used as..
2ba0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
2bb0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72   destination for
2bc0: 20 74 68 65 20 63 6f 70 69 65 64 20 53 79 73 74   the copied Syst
2bd0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e  em.Data.SQLite n
2be0: 61 74 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20  ative and..
2bf0: 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64   #       managed
2c00: 20 61 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65   assemblies (i.e
2c10: 2e 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69  . because this i
2c20: 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77  s one of the few
2c30: 20 70 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23   places..      #
2c40: 20 20 20 20 20 20 20 77 68 65 72 65 20 74 68 65         where the
2c50: 20 43 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c   CLR will actual
2c60: 6c 79 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64  ly find and load
2c70: 20 74 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e   them properly).
2c80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
2c90: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
2ca0: 73 20 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63  s ::binary_direc
2cb0: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
2cc0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
2cd0: 6e 67 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64  ngth $::binary_d 2ce0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 2cf0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 2d00: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2d10: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 2d20: 66 20 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 f the binary dir 2d30: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 2d40: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 overridden;.. 2d50: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 2d60: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 refore, use it v 2d70: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 erbatim... 2d80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 2d90: 75 72 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 urn$::binary_di
2da0: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
2db0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
2dc0: 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69   return [info bi
2dd0: 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  nary]..      }..
2de0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
2df0: 6f 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c 65  oc getBinaryFile
2e00: 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20  Name { fileName
2e10: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
2e20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
2e30: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65  rns the specifie
2e40: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69  d file name as i
2e50: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65  f it were locate
2e60: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  d in the..
2e70: 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64  #       binary d
2e80: 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72  irectory, discar
2e90: 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f  ding any directo
2ea0: 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70  ry information p
2eb0: 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20  resent..      #
2ec0: 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c        in the fil
2ed0: 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64  e name as provid
2ee0: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
2ef0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
2f00: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e    return [file n
2f10: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
2f20: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
2f30: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
2f40: 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69  ctory] [file tai
2f50: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a  l $fileName]]].. 2f60: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 2f70: 6f 63 20 67 65 74 43 6f 72 65 42 69 6e 61 72 79 oc getCoreBinary 2f80: 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 73 74 61 6e FileName { {stan 2f90: 64 61 72 64 20 66 61 6c 73 65 7d 20 7d 20 7b 0d dard false} } {. 2fa0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2fb0: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 # NOTE: Returns 2fc0: 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f the full path fo 2fd0: 72 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 r the file conta 2fe0: 69 6e 69 6e 67 20 74 68 65 20 63 6f 72 65 20 53 ining the core S 2ff0: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20 20 QLite.. # 3000: 20 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f 64 library cod 3010: 65 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 e for this platf 3020: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 orm... #.. 3030: 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e if {[hasRun 3040: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 timeOption nativ 3050: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 3060: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 3070: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 NOTE: Return th 3080: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 3090: 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e embly file name. 30a0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 30b0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 30c0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a e nativename \.. 30d0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 30e0: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 e join [getBinar 30f0: 79 44 69 72 65 63 74 6f 72 79 5d 20 53 79 73 74 yDirectory] Syst 3100: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 3110: 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c ll]].. } el 3120: 73 65 69 66 20 7b 24 73 74 61 6e 64 61 72 64 7d seif {$standard}
3130: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
3140: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
3150: 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  TE: Return the n
3160: 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64  ative-only stand
3170: 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61  ard SQLite libra
3180: 72 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20  ry file name...
3190: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
31a0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e    return [file n
31b0: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
31c0: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a           [file j
31d0: 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69  oin [getBinaryDi
31e0: 72 65 63 74 6f 72 79 5d 20 73 71 6c 69 74 65 33  rectory] sqlite3
31f0: 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20  .dll]]..      }
3200: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
3210: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
3220: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  E: Return the na
3230: 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f  tive-only intero
3240: 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20  p assembly file
3250: 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  name...        #
3260: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3270: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
3280: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
3290: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
32a0: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d  BinaryDirectory]
32b0: 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e   SQLite.Interop.
32c0: 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  dll]]..      }..
32d0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
32e0: 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65  oc getCommonDire
32f0: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20  ctory {} {..
3300: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
3310: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  E: This procedur
3320: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69  e returns the di
3330: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68  rectory where th
3340: 65 20 74 65 73 74 20 73 63 72 69 70 74 73 0d 0a  e test scripts..
3350: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68        #       sh
3360: 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e  ould be located.
3370: 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68    By default, th
3380: 69 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73 20  is just returns
3390: 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20  the Eagle..
33a0: 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20   #       binary
33b0: 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20  directory...
33c0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
33d0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f  info exists ::co
33e0: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20  mmon_directory]
33f0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
3400: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $3410: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f ::common_directo 3420: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ry] > 0} then {. 3430: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 3440: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 3450: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 location of the 3460: 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79 common directory 3470: 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a has been set;.. 3480: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 3490: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 therefore, use i 34a0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 34b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
34c0: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72  :common_director
34d0: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69  y..      } elsei
34e0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
34f0: 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f  ::vendor_directo
3500: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ry] && \..
3510: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
3520: 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72  th $::vendor_dir 3530: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 ectory] > 0} the 3540: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 3550: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 3560: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 The location of 3570: 74 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 63 the vendor direc 3580: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 tory has been se 3590: 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 t;.. # 35a0: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 therefore, u 35b0: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 se it... 35c0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 35d0: 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 n$::vendor_dire
35e0: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65  ctory..      } e
35f0: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  lseif {[info exi
3600: 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72  sts ::tcl_librar
3610: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
3620: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
3630: 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79  h $::tcl_library 3640: 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 ] > 0 && \.. 3650: 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69 [file isdi 3660: 72 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c rectory$::tcl_l
3670: 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ibrary]} then {.
3680: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
3690: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
36a0: 76 61 72 69 61 62 6c 65 20 77 69 74 68 20 74 68  variable with th
36b0: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  e location of th
36c0: 65 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79  e script library
36d0: 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20   is..        #
36e0: 20 20 20 20 20 73 65 74 20 61 6e 64 20 61 70 70       set and app
36f0: 65 61 72 73 20 74 6f 20 62 65 20 61 20 72 65 61  ears to be a rea
3700: 6c 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65  l directory (i.e
3710: 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a  . not embedded..
3720: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
3730: 77 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b 20  within a file);
3740: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
3750: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
3760: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 3770: 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20 :tcl_library.. 3780: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 3790: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 37a0: 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 # NOTE: Fallbac 37b0: 6b 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f k to the directo 37c0: 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 ry containing th 37d0: 65 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20 e executable... 37e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 37f0: 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 return [info b 3800: 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d inary].. }. 3810: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 3820: 72 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 44 roc getDatabaseD 3830: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. 3840: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 3850: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 3860: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 dure returns the 3870: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where 3880: 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 the test databa 3890: 73 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ses.. # 38a0: 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 should be loc 38b0: 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c ated. By defaul 38c0: 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 t, this just use 38d0: 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d s the temporary. 38e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 38f0: 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 irectory configu 3900: 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 red for this sys 3910: 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 tem... #.. 3920: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 3930: 78 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 xists ::database 3940: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 3950: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 3960: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 ing length$::da
3970: 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79  tabase_directory
3980: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
3990: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
39a0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
39b0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  cation of the da
39c0: 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79  tabase directory
39d0: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
39e0: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23  dden;..        #
39f0: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65         therefore
3a00: 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20  , use it...
3a10: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
3a20: 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73 65  turn $::database 3a30: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 _directory.. 3a40: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 } elseif {[inf 3a50: 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 o exists ::scrat 3a60: 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 ch_directory] && 3a70: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 3a80: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
3a90: 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72  scratch_director
3aa0: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  y] > 0} then {..
3ab0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
3ac0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c     # NOTE: The l
3ad0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ocation of the s
3ae0: 63 72 61 74 63 68 20 64 69 72 65 63 74 6f 72 79  cratch directory
3af0: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
3b00: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23  dden;..        #
3b10: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65         therefore
3b20: 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20  , use it...
3b30: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
3b40: 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f  turn $::scratch_ 3b50: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 3b60: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 3b70: 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 return [getTe 3b80: 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 mporaryPath].. 3b90: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 3ba0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 6d . proc getTem 3bb0: 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 20 poraryDirectory 3bc0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 3bd0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 3be0: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 s procedure retu 3bf0: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 rns the director 3c00: 79 20 77 68 65 72 65 20 74 68 65 20 74 65 6d 70 y where the temp 3c10: 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 20 orary files.. 3c20: 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c # shoul 3c30: 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 d be located. B 3c40: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 y default, this 3c50: 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 65 just uses the te 3c60: 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 mporary.. # 3c70: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 directory 3c80: 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 configured for 3c90: 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 this system... 3ca0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 3cb0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 3cc0: 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 temporary_direct 3cd0: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ory] && \.. 3ce0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 3cf0: 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 gth$::temporary
3d00: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d  _directory] > 0}
3d10: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
3d20: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
3d30: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e  TE: The location
3d40: 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
3d50: 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20  y directory has
3d60: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
3d70: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
3d80: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
3d90: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
3da0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3db0: 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72  $::temporary_dir 3dc0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } 3dd0: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 elseif {[info ex 3de0: 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 ists ::scratch_d 3df0: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a irectory] && \.. 3e00: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 3e10: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 g length$::scra
3e20: 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e  tch_directory] >
3e30: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
3e40: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
3e50: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74   NOTE: The locat
3e60: 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74  ion of the scrat
3e70: 63 68 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  ch directory has
3e80: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
3e90: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ;..        #
3ea0: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73     therefore, us
3eb0: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  e it...        #
3ec0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3ed0: 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65   $::scratch_dire 3ee0: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 3ef0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 3f00: 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 eturn [getTempor 3f10: 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 aryPath].. 3f20: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 3f30: 20 70 72 6f 63 20 67 65 74 54 65 73 74 4f 76 65 proc getTestOve 3f40: 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20 7b rridesPreamble { 3f50: 20 7b 65 78 74 72 61 56 61 72 4e 61 6d 65 73 20 {extraVarNames 3f60: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 ""} } {.. s 3f70: 65 74 20 76 61 72 4e 61 6d 65 73 20 5b 6c 69 73 et varNames [lis 3f80: 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 t].... #.. 3f90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 3fa0: 61 76 61 69 6c 61 62 6c 65 2c 20 73 74 61 72 74 available, start 3fb0: 20 77 69 74 68 20 74 68 65 20 6d 61 73 74 65 72 with the master 3fc0: 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 6f 76 list of test ov 3fd0: 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 23 20 erride.. # 3fe0: 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 73 2e variables. 3ff0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4000: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 4010: 73 20 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 s ::test_overrid 4020: 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 es] && \.. 4030: 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a [llength$::
4040: 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20  test_overrides]
4050: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
4060: 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e       eval lappen
4070: 64 20 76 61 72 4e 61 6d 65 73 20 24 3a 3a 74 65  d varNames $::te 4080: 73 74 5f 6f 76 65 72 72 69 64 65 73 0d 0a 20 20 st_overrides.. 4090: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 40a0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 40b0: 49 66 20 72 65 71 75 65 73 74 65 64 20 62 79 20 If requested by 40c0: 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 64 64 20 our caller, add 40d0: 61 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 any additional v 40e0: 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 ariable.. # 40f0: 20 20 20 20 20 20 20 6e 61 6d 65 73 20 74 6f 20 names to 4100: 63 6f 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 copy now... 4110: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c #.. if {[l 4120: 6c 65 6e 67 74 68 20 24 65 78 74 72 61 56 61 72 length$extraVar
4130: 4e 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e  Names] > 0} then
4140: 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c   {..        eval
4150: 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65   lappend varName
4160: 73 20 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73  s $extraVarNames 4170: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 4180: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 4190: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 73 63 TE: Build the sc 41a0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f ript fragment to 41b0: 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 be returned by 41c0: 70 72 6f 63 65 73 73 69 6e 67 20 65 61 63 68 0d processing each. 41d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 . # v 41e0: 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 ariable name and 41f0: 20 61 64 64 69 6e 67 20 74 68 65 20 6e 65 63 65 adding the nece 4200: 63 65 73 73 61 72 79 20 73 63 72 69 70 74 20 66 cessary script f 4210: 72 61 67 6d 65 6e 74 73 20 66 6f 72 0d 0a 20 20 ragments for.. 4220: 20 20 20 20 23 20 20 20 20 20 20 20 65 61 63 68 # each 4230: 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a one... #.. 4240: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 set result 4250: 20 22 22 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 "".... for 4260: 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 76 61 each varName$va
4270: 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  rNames {..
4280: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
4290: 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 71  OTE: Build the q
42a0: 75 61 6c 69 66 69 65 64 20 67 6c 6f 62 61 6c 20  ualified global
42b0: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a  variable name...
42c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
42d0: 20 20 20 73 65 74 20 66 75 6c 6c 56 61 72 4e 61     set fullVarNa
42e0: 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 3a  me [appendArgs :
42f0: 3a 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20  : $varName].... 4300: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4310: 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 # NOTE: Does t 4320: 68 65 20 76 61 72 69 61 62 6c 65 20 65 78 69 73 he variable exis 4330: 74 20 69 6e 20 74 68 69 73 20 69 6e 74 65 72 70 t in this interp 4340: 72 65 74 65 72 20 63 6f 6e 74 65 78 74 3f 0d 0a reter context?.. 4350: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 4360: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 4370: 73 74 73 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 sts$fullVarName
4380: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
4390: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
43a0: 20 20 23 20 4e 4f 54 45 3a 20 41 70 70 65 6e 64    # NOTE: Append
43b0: 20 61 20 73 63 72 69 70 74 20 66 72 61 67 6d 65   a script fragme
43c0: 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  nt to the result
43d0: 20 74 68 61 74 20 77 69 6c 6c 20 63 6f 72 72 65   that will corre
43e0: 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ctly..
43f0: 23 20 20 20 20 20 20 20 63 6f 70 79 20 61 6e 79  #       copy any
4400: 20 63 6f 6e 74 61 69 6e 65 64 20 76 61 6c 75 65   contained value
4410: 20 74 6f 20 61 6e 6f 74 68 65 72 20 69 6e 74 65   to another inte
4420: 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78 74 2e  rpreter context.
4430: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
4440: 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20           append
4450: 72 65 73 75 6c 74 20 5c 6e 20 22 73 65 74 20 22  result \n "set "
4460: 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 20 22 20   $fullVarName " 4470: 5c 7b 22 20 5b 73 65 74 20 24 66 75 6c 6c 56 61 \{" [set$fullVa
4480: 72 4e 61 6d 65 5d 20 5c 7d 0d 0a 20 20 20 20 20  rName] \}..
4490: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
44a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
44b0: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 72  # NOTE: If the r
44c0: 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 6f  esult contains o
44d0: 6e 65 20 6f 72 20 6d 6f 72 65 20 73 63 72 69 70  ne or more scrip
44e0: 74 20 66 72 61 67 6d 65 6e 74 73 2c 20 61 70 70  t fragments, app
44f0: 65 6e 64 20 61 0d 0a 20 20 20 20 20 20 23 20 20  end a..      #
4500: 20 20 20 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20       newline...
4510: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
4520: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
4530: 20 24 72 65 73 75 6c 74 5d 20 3e 20 30 7d 20 74   $result] > 0} t 4540: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a 4550: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 0d ppend result \n. 4560: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 4570: 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
4580: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
4590: 70 72 6f 63 20 67 65 74 41 70 70 44 6f 6d 61 69  proc getAppDomai
45a0: 6e 50 72 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65  nPreamble { {pre
45b0: 66 69 78 20 22 22 7d 20 7b 73 75 66 66 69 78 20  fix ""} {suffix
45c0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ""} } {..      #
45d0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
45e0: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72  This procedure r
45f0: 65 74 75 72 6e 73 20 61 20 74 65 73 74 20 73 65  eturns a test se
4600: 74 75 70 20 73 63 72 69 70 74 20 66 72 61 67 6d  tup script fragm
4610: 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72  ent suitable for
4620: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4630: 65 76 61 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e  evaluation by an
4640: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65   interpreter cre
4650: 61 74 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61  ated in an isola
4660: 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d  ted application.
4670: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
4680: 6f 6d 61 69 6e 2e 20 20 54 68 65 20 73 63 72 69  omain.  The scri
4690: 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e  pt fragment bein
46a0: 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20  g returned will
46b0: 62 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79  be surrounded by
46c0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
46d0: 74 68 65 20 70 72 65 66 69 78 20 61 6e 64 20 73  the prefix and s
46e0: 75 66 66 69 78 20 22 73 63 72 69 70 74 20 66 72  uffix "script fr
46f0: 61 67 6d 65 6e 74 73 22 20 73 70 65 63 69 66 69  agments" specifi
4700: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
4710: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
4720: 20 69 66 20 61 6e 79 2e 20 20 54 68 65 20 65 6e   if any.  The en
4730: 74 69 72 65 20 73 63 72 69 70 74 20 62 65 69 6e  tire script bein
4740: 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20  g returned will
4750: 62 65 20 73 75 62 73 74 69 74 75 74 65 64 20 76  be substituted v
4760: 69 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ia..      #
4770: 20 20 5b 73 75 62 73 74 5d 2c 20 69 6e 20 74 68    [subst], in th
4780: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72  e context of our
4790: 20 63 61 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20   caller, before
47a0: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d  being returned..
47b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 54  .      #       T
47c0: 68 69 73 20 73 74 65 70 20 69 73 20 6e 65 63 65  his step is nece
47d0: 73 73 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f  ssary so that so
47e0: 6d 65 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65  me limited conte
47f0: 78 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d  xt information,.
4800: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70  .      #       p
4810: 72 69 6d 61 72 69 6c 79 20 72 65 6c 61 74 65 64  rimarily related
4820: 20 74 6f 20 74 68 65 20 74 65 73 74 69 6e 67 20   to the testing
4830: 64 69 72 65 63 74 6f 72 69 65 73 2c 20 63 61 6e  directories, can
4840: 20 62 65 20 74 72 61 6e 73 66 65 72 72 65 64 0d   be transferred.
4850: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
4860: 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65  o the interprete
4870: 72 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65  r in the isolate
4880: 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f  d application do
4890: 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d  main, making it.
48a0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
48b0: 62 6c 65 20 74 6f 20 73 75 63 63 65 73 73 66 75  ble to successfu
48c0: 6c 6c 79 20 72 75 6e 20 74 65 73 74 73 20 74 68  lly run tests th
48d0: 61 74 20 72 65 71 75 69 72 65 20 6f 6e 65 20 6f  at require one o
48e0: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20  r more of the..
48f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
4900: 65 73 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  es in one of the
4910: 20 74 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f   testing directo
4920: 72 69 65 73 2e 20 20 43 61 6c 6c 65 72 73 20 73  ries.  Callers s
4930: 68 6f 75 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20  hould keep in..
4940: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 6e       #       min
4950: 64 20 74 68 61 74 20 74 68 65 20 74 65 73 74 20  d that the test
4960: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20  script fragment
4970: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 63  being returned c
4980: 61 6e 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20  annot rely on..
4990: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 79       #       any
49a0: 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20   script library
49b0: 70 72 6f 63 65 64 75 72 65 73 20 74 68 61 74 20  procedures that
49c0: 61 72 65 20 6e 6f 74 20 70 72 6f 76 69 64 65 64  are not provided
49d0: 20 62 79 20 74 68 65 20 45 61 67 6c 65 0d 0a 20   by the Eagle..
49e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62       #       lib
49f0: 72 61 72 79 20 70 61 63 6b 61 67 65 20 28 69 2e  rary package (i.
4a00: 65 2e 20 22 69 6e 69 74 2e 65 61 67 6c 65 22 29  e. "init.eagle")
4a10: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73  , including thos
4a20: 65 20 70 72 6f 76 69 64 65 64 20 62 79 0d 0a 20  e provided by..
4a30: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
4a40: 20 45 61 67 6c 65 20 74 65 73 74 20 70 61 63 6b   Eagle test pack
4a50: 61 67 65 2c 20 75 6e 6c 65 73 73 20 74 68 65 20  age, unless the
4a60: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  file containing
4a70: 74 68 65 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a  them is loaded..
4a80: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61        #       ma
4a90: 6e 75 61 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20  nually via some
4aa0: 6f 74 68 65 72 20 6d 65 63 68 61 6e 69 73 6d 20  other mechanism
4ab0: 28 65 2e 67 2e 20 62 79 20 69 6e 63 6c 75 64 69  (e.g. by includi
4ac0: 6e 67 20 61 70 70 72 6f 70 72 69 61 74 65 0d 0a  ng appropriate..
4ad0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 70        #       [p
4ae0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 5d 20  ackage require]
4af0: 6f 72 20 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d  or [source] comm
4b00: 61 6e 64 73 20 69 6e 20 74 68 65 20 70 72 65 66  ands in the pref
4b10: 69 78 20 6f 72 20 73 75 66 66 69 78 0d 0a 20 20  ix or suffix..
4b20: 20 20 20 20 23 20 20 20 20 20 20 20 73 63 72 69      #       scri
4b30: 70 74 20 66 72 61 67 6d 65 6e 74 73 29 2e 20 20  pt fragments).
4b40: 41 6c 73 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62  Also, all variab
4b50: 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 61 6e  le references an
4b60: 64 20 61 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20  d all nested..
4b70: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d      #       comm
4b80: 61 6e 64 73 20 28 69 2e 65 2e 20 74 68 6f 73 65  ands (i.e. those
4b90: 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b   in square brack
4ba0: 65 74 73 29 20 63 6f 6e 74 61 69 6e 65 64 20 69  ets) contained i
4bb0: 6e 20 74 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20  n the final..
4bc0: 20 20 20 23 20 20 20 20 20 20 20 73 63 72 69 70     #       scrip
4bd0: 74 20 66 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20  t fragment will
4be0: 65 6e 64 20 75 70 20 62 65 69 6e 67 20 65 76 61  end up being eva
4bf0: 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20 63 6f  luated in the co
4c00: 6e 74 65 78 74 20 6f 66 20 74 68 65 0d 0a 20 20  ntext of the..
4c10: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c      #       call
4c20: 69 6e 67 20 69 6e 74 65 72 70 72 65 74 65 72 20  ing interpreter
4c30: 61 6e 64 20 6e 6f 74 20 74 68 65 20 74 61 72 67  and not the targ
4c40: 65 74 20 69 6e 74 65 72 70 72 65 74 65 72 20 63  et interpreter c
4c50: 72 65 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20  reated in the..
4c60: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 6f       #       iso
4c70: 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f  lated applicatio
4c80: 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20  n domain unless
4c90: 74 68 65 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73  the dollar signs
4ca0: 20 61 6e 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a   and/or square..
4cb0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 72        #       br
4cc0: 61 63 6b 65 74 73 20 61 72 65 20 73 70 65 63 69  ackets are speci
4cd0: 61 6c 6c 79 20 71 75 6f 74 65 64 20 77 69 74 68  ally quoted with
4ce0: 20 62 61 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20   backslashes...
4cf0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
4d00: 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20  turn [uplevel 1
4d10: 5b 6c 69 73 74 20 73 75 62 73 74 20 5b 61 70 70  [list subst [app
4d20: 65 6e 64 41 72 67 73 20 24 70 72 65 66 69 78 20  endArgs $prefix 4d30: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 4d40: 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e hasRuntimeOption 4d50: 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b native]} then { 4d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 4d70: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 ct invoke Interp 4d80: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 reter.GetActive 4d90: 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e AddRuntimeOption 4da0: 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 native.. 4db0: 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67 65 74 }.. } [get 4dc0: 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 TestOverridesPre 4dd0: 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61 74 68 amble [list path 4de0: 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d 5d 20 test_channel]] 4df0: 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 20 20$suffix]]]..
4e00: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
4e10: 72 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65  ryCopyBinaryFile
4e20: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 6e 65 77   { fileName {new
4e30: 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b  FileName ""} } {
4e40: 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72  ..      set sour
4e50: 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  ceFileName [getB
4e60: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f 4e70: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... 4e80: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi 4e90: 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e sts$sourceFileN
4ea0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
4eb0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 4ec0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 4ed0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 4ee0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski 4ef0: 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e pped copying bin 4f00: 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f ary file \""$so
4f10: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
4f30: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
4f40: 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  st\n"]....
4f50: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20    return..
4f60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
4f70: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e  string length $n 4f80: 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d ewFileName] > 0} 4f90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 4fa0: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e set targetFileN 4fb0: 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c ame [getBuildFil 4fc0: 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 eName$newFileNa
4fd0: 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  me]..      } els
4fe0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
4ff0: 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20   targetFileName
5000: 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
5010: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20  e $fileName].. 5020: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 5030: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 5040: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 file 5050: 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 copy -force$sou
5060: 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72  rceFileName $tar 5070: 67 65 74 46 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d getFileName}] == 5080: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 5090: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
50a0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
50b0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
50c0: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65       "---- copie
50d0: 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72  d binary file fr
50e0: 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69  om \"" $sourceFi 50f0: 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 leName "\" to \" 5100: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 5110: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
5120: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20   \"\n]..      }
5130: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
5140: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 5150: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 5160: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 5170: 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f "---- failed to 5180: 20 63 6f 70 79 20 62 69 6e 61 72 79 20 66 69 6c copy binary fil 5190: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 e from \""$sour
51a0: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20  ceFileName \..
51b0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f            "\" to
51c0: 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65   \"" $targetFile 51d0: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 Name \"\n].. 51e0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 51f0: 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 proc tryCopyB 5200: 75 69 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e uildFile { fileN 5210: 61 6d 65 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 ame {newFileName 5220: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ""} } {.. 5230: 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 set sourceFileNa 5240: 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 me [getBuildFile 5250: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d Name$fileName].
5260: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66  ...      if {![f
5270: 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 72  ile exists $sour 5280: 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 ceFileName]} the 5290: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu 52a0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
52b0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
52c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
52d0: 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79  --- skipped copy
52e0: 69 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c  ing build file \
52f0: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  "" $sourceFileNa 5300: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 5310: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e "\", it does n 5320: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a ot exist\n"].... 5330: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a return.. 5340: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 5350: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 5360: 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 gth$newFileName
5370: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
5380: 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65         set targe
5390: 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69  tFileName [getBi
53a0: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65  naryFileName $ne 53b0: 77 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 wFileName].. 53c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 53d0: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 set targetFi 53e0: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 leName [getBinar 53f0: 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e yFileName$fileN
5400: 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  ame]..      }...
5410: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
5420: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
5430: 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f     file copy -fo
5440: 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e  rce $sourceFileN 5450: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e ame$targetFileN
5460: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ame}] == 0} then
5470: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
5480: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 5490: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 54a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 54b0: 2d 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 -- copied build 54c0: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 file from \""$s
54d0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c  ourceFileName "\
54e0: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20  " to \"" \..
54f0: 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46          $targetF 5500: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 ileName \"\n].. 5510: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 5520: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
5530: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
5540: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
5550: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61          "---- fa
5560: 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69  iled to copy bui
5570: 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22  ld file from \""
5580: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName 5590: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 55a0: 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 "\" to \""$targ
55b0: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d  etFileName \"\n]
55c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
55d0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
55e0: 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c  yDeleteBinaryFil
55f0: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b  e { fileName } {
5600: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
5610: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46  Name [getBinaryF
5620: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam 5630: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b e].... if { 5640: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 ![file exists$f
5650: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
5660: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
5670: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 5680: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 5690: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 56a0: 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e skipped deletin 56b0: 67 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 g binary file \" 56c0: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 "$fileName \..
56d0: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
56e0: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
56f0: 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  t\n"]....
5700: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d   return..      }
5710: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
5720: 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74  atch {file delet
5730: 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d  e $fileName}] == 5740: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 5750: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
5760: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
5770: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
5780: 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74       "---- delet
5790: 65 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c  ed binary file \
57a0: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ 57b0: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 n].. } else 57c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 57d0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
57e0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
57f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
5800: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  -- failed to del
5810: 65 74 65 20 62 69 6e 61 72 79 20 66 69 6c 65 20  ete binary file
5820: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22  \"" $fileName \" 5830: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 \n].. }.. 5840: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 5850: 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 tryDeleteBuildF 5860: 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d ile { fileName } 5870: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 {.. set fi 5880: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 leName [getBuild 5890: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 FileName$fileNa
58a0: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  me]....      if
58b0: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $58c0: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 58d0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 58e0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
58f0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
5900: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
5910: 2d 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  - skipped deleti
5920: 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22  ng build file \"
5930: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  " $fileName \.. 5940: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 "\", 5950: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 5960: 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 t\n"].... 5970: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } 5980: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c 5990: 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 atch {file delet 59a0: 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d e$fileName}] ==
59b0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
59c0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 59d0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 59e0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 59f0: 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 "---- delet 5a00: 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 ed build file \" 5a10: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e "$fileName \"\n
5a20: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
5a30: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
5a40: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 5a50: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 5a60: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 5a70: 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 - failed to dele 5a80: 74 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 te build file \" 5a90: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e "$fileName \"\n
5aa0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
5ab0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
5ac0: 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b  ryCopyAssembly {
5ad0: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 64 62 20 74   fileName {pdb t
5ae0: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
5af0: 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65  tryCopyBuildFile
5b00: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName.... 5b10: 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 if {$pdb} th
5b20: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72  en {..        tr
5b30: 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 5b  yCopyBuildFile [
5b40: 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65  appendArgs [file
5b50: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e   rootname $fileN 5b60: 61 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20 20 ame] .pdb].. 5b70: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 5b80: 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 proc tryDelet 5b90: 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 eAssembly { file 5ba0: 4e 61 6d 65 20 7b 70 64 62 20 74 72 75 65 7d 20 Name {pdb true} 5bb0: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 } {.. tryDe 5bc0: 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 leteBinaryFile$
5bd0: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20  fileName....
5be0: 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e    if {$pdb} then 5bf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44 {.. tryD 5c00: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 5c10: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c [appendArgs [fil 5c20: 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 e rootname$file
5c30: 4e 61 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20  Name] .pdb]..
5c40: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
5c50: 20 20 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64      proc tryLoad
5c60: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e  Assembly { fileN
5c70: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  ame } {..      s
5c80: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74  et fileName [get
5c90: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $5ca0: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... 5cb0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 if {[catch {s 5cc0: 65 74 20 61 73 73 65 6d 62 6c 79 20 5c 0d 0a 20 et assembly \.. 5cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 [ob 5ce0: 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 ject load -loadt 5cf0: 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 ype File -alias 5d00: 24 66 69 6c 65 4e 61 6d 65 5d 7d 5d 20 3d 3d 20$fileName]}] ==
5d10: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
5d20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
5d30: 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 64 20 74  NOTE: Now, add t
5d40: 68 65 20 6e 65 63 65 73 73 61 72 79 20 74 65 73  he necessary tes
5d50: 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20  t constraint...
5d60: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
5d70: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
5d80: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b  [file rootname [
5d90: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN 5da0: 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ame]].... 5db0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 5dc0: 54 45 3a 20 47 72 61 62 20 74 68 65 20 69 6d 61 TE: Grab the ima 5dd0: 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 ge runtime versi 5de0: 6f 6e 20 66 72 6f 6d 20 74 68 65 20 61 73 73 65 on from the asse 5df0: 6d 62 6c 79 20 62 65 63 61 75 73 65 0d 0a 20 20 mbly because.. 5e00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se 5e10: 76 65 72 61 6c 20 74 65 73 74 73 20 72 65 6c 79 veral tests rely 5e20: 20 6f 6e 20 69 74 20 68 61 76 69 6e 67 20 61 20 on it having a 5e30: 63 65 72 74 61 69 6e 20 76 61 6c 75 65 2e 0d 0a certain value... 5e40: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 5e50: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 5e60: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 [appendArgs [fi 5e70: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
5e80: 65 5d 20 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  e] _ \..
5e90: 20 20 20 20 5b 24 61 73 73 65 6d 62 6c 79 20 49      [$assembly I 5ea0: 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 mageRuntimeVersi 5eb0: 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 on]].... 5ec0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 5ed0: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 66 75 E: Return the fu 5ee0: 6c 6c 20 70 61 74 68 20 6f 66 20 74 68 65 20 6c ll path of the l 5ef0: 6f 61 64 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 oaded file... 5f00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5f10: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 return$fileName
5f20: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
5f30: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
5f40: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
5f50: 20 69 73 53 51 4c 69 74 65 52 65 61 64 79 20 7b   isSQLiteReady {
5f60: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
5f70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
5f80: 20 70 72 6f 63 65 64 75 72 65 20 6d 75 73 74 20   procedure must
5f90: 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  return non-zero
5fa0: 6f 6e 6c 79 20 69 66 20 74 68 65 20 53 51 4c 69  only if the SQLi
5fb0: 74 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  te native..
5fc0: 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79   #       library
5fd0: 20 61 6e 64 20 74 68 65 20 53 79 73 74 65 6d 2e   and the System.
5fe0: 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61  Data.SQLite mana
5ff0: 67 65 64 20 61 73 73 65 6d 62 6c 79 20 61 72 65  ged assembly are
6000: 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23   loaded..      #
6010: 20 20 20 20 20 20 20 61 6e 64 20 72 65 61 64 79         and ready
6020: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the
6030: 74 65 73 74 20 73 75 69 74 65 2e 20 20 43 75 72  test suite.  Cur
6040: 72 65 6e 74 6c 79 2c 20 74 68 69 73 20 70 72 6f  rently, this pro
6050: 63 65 64 75 72 65 0d 0a 20 20 20 20 20 20 23 20  cedure..      #
6060: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be
6070: 63 61 6c 6c 65 64 20 6f 6e 6c 79 20 61 66 74 65  called only afte
6080: 72 20 74 68 65 20 5b 74 72 79 4c 6f 61 64 41 73  r the [tryLoadAs
6090: 73 65 6d 62 6c 79 5d 20 70 72 6f 63 65 64 75 72  sembly] procedur
60a0: 65 20 68 61 73 0d 0a 20 20 20 20 20 20 23 20 20  e has..      #
60b0: 20 20 20 20 20 62 65 65 6e 20 63 61 6c 6c 65 64       been called
60c0: 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 20 74 68   to probe for th
60d0: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
60e0: 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73  Lite managed ass
60f0: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20  embly..      #
6100: 20 20 20 20 20 61 6e 64 20 74 68 65 20 5b 63 68       and the [ch
6110: 65 63 6b 46 6f 72 53 51 4c 69 74 65 5d 20 70 72  eckForSQLite] pr
6120: 6f 63 65 64 75 72 65 20 68 61 73 20 62 65 65 6e  ocedure has been
6130: 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65   called to probe
6140: 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20   for..      #
6150: 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 6e      the SQLite n
6160: 61 74 69 76 65 20 6c 69 62 72 61 72 79 3b 20 6f  ative library; o
6170: 74 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 70  therwise, this p
6180: 72 6f 63 65 64 75 72 65 20 77 69 6c 6c 20 73 69  rocedure will si
6190: 6d 70 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  mply..      #
61a0: 20 20 20 20 61 6c 77 61 79 73 20 72 65 74 75 72      always retur
61b0: 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 23  n zero...      #
61c0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
61d0: 65 78 70 72 20 7b 5b 68 61 76 65 43 6f 6e 73 74  expr {[haveConst
61e0: 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74  raint System.Dat
61f0: 61 2e 53 51 4c 69 74 65 5d 20 26 26 20 5c 0d 0a  a.SQLite] && \..
6200: 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 43            [haveC
6210: 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65  onstraint SQLite
6220: 5d 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ]}]..    }.....
6230: 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72     proc checkFor
6240: 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c  SQLite { channel
6250: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74   } {..      tput
6260: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- 6270: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 63 6f checking for co 6280: 72 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 re SQLite librar 6290: 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 y... ".... 62a0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 62b0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 62c0: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 62d0: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 +NonPublic Syst 62e0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S 62f0: 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 20 QLite3 \.. 6300: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 65 SQLiteVe 6310: 72 73 69 6f 6e 7d 20 76 65 72 73 69 6f 6e 5d 20 rsion} version] 6320: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 6330: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 6340: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 6350: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo 6360: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden 6370: 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 tifier for the S 6380: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 QLite.. # 6390: 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 core libr 63a0: 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ary... #. 63b0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 63c0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 63d0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 63e0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 63f0: 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 Public System.Da 6400: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 6410: 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 3 \.. 6420: 20 20 20 20 20 53 51 4c 69 74 65 53 6f 75 72 63 SQLiteSourc 6430: 65 49 64 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 eId} sourceId]} 6440: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 6450: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 6460: 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 NOTE: We failed 6470: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo 6480: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden 6490: 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 tifier... 64a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 64b0: 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b set sourceId unk 64c0: 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d nown.. }. 64d0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 64e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 # NOTE: Ye 64f0: 73 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f s, the SQLite co 6500: 72 65 20 6c 69 62 72 61 72 79 20 61 70 70 65 61 re library appea 6510: 72 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 rs to be availab 6520: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 6530: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 6540: 72 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a raint SQLite.... 6550: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
6560: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
6570: 67 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73  gs "yes (" $vers 6580: 69 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 ion " "$sourceI
6590: 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  d ")\n"]..
65a0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
65b0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 65c0: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a no\n.. }.. 65d0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 65e0: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 oc checkForSQLit 65f0: 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 eDefineConstant 6600: 7b 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d { channel name } 6610: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 {.. tputs 6620: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
6630: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
6640: 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67    "---- checking
6650: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61   for System.Data
6660: 2e 53 51 4c 69 74 65 20 64 65 66 69 6e 65 20 63  .SQLite define c
6670: 6f 6e 73 74 61 6e 74 20 5c 22 22 20 24 6e 61 6d  onstant \"" $nam 6680: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 e \.. " 6690: 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 \"... "].... 66a0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 66b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob 66c0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 66d0: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 gs +NonPublic Sy 66e0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 66f0: 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 .SQLite3 \.. 6700: 20 20 20 20 20 20 20 20 20 20 44 65 66 69 6e 65 Define 6710: 43 6f 6e 73 74 61 6e 74 73 7d 20 64 65 66 69 6e Constants} defin 6720: 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 eConstants] == 0 6730: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 6740: 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d if {[lsearch - 6750: 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 24 64 exact -nocase$d
6760: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 20 24  efineConstants $6770: 6e 61 6d 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65 name] != -1} the 6780: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 6790: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 67a0: 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20 64 65 TE: Yes, this de 67b0: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 77 61 fine constant wa 67c0: 73 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 20 74 s enabled when t 67d0: 68 65 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 he managed.. 67e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 # as 67f0: 73 65 6d 62 6c 79 20 77 61 73 20 63 6f 6d 70 69 sembly was compi 6800: 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 led... 6810: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 #.. add 6820: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 6830: 6e 64 41 72 67 73 20 64 65 66 69 6e 65 43 6f 6e ndArgs defineCon 6840: 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 stant.System.Dat 6850: 61 2e 53 51 4c 69 74 65 2e 20 24 6e 61 6d 65 5d a.SQLite.$name]
6860: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70  ....          tp
6870: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73  uts $channel yes 6880: 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c \n.. } el 6890: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 68a0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e tputs$channel n
68b0: 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  o\n..        }..
68c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
68d0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 68e0: 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e 0d 0a hannel error\n.. 68f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 6900: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 ... proc getD 6910: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 7b 7d ateTimeFormat {} 6920: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 6930: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 6940: 70 72 6f 63 65 64 75 72 65 20 73 69 6d 70 6c 79 procedure simply 6950: 20 72 65 74 75 72 6e 73 20 74 68 65 20 22 64 65 returns the "de 6960: 66 61 75 6c 74 22 20 44 61 74 65 54 69 6d 65 20 fault" DateTime 6970: 66 6f 72 6d 61 74 20 75 73 65 64 0d 0a 20 20 20 format used.. 6980: 20 20 20 23 20 20 20 20 20 20 20 62 79 20 74 68 # by th 6990: 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 e test suite... 69a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 69b0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 69c0: 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 :datetime_format 69d0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 69e0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 69f0: 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72$::datetime_for
6a00: 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  mat] > 0} then {
6a10: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6a20: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
6a30: 75 72 6e 20 74 68 65 20 6d 61 6e 75 61 6c 6c 79  urn the manually
6a40: 20 6f 76 65 72 72 69 64 64 65 6e 20 76 61 6c 75   overridden valu
6a50: 65 20 66 6f 72 20 74 68 65 20 44 61 74 65 54 69  e for the DateTi
6a60: 6d 65 20 66 6f 72 6d 61 74 2e 0d 0a 20 20 20 20  me format...
6a70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
6a80: 65 74 75 72 6e 20 24 3a 3a 64 61 74 65 74 69 6d  eturn $::datetim 6a90: 65 5f 66 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 e_format.. 6aa0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 6ab0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 6ac0: 4f 54 45 3a 20 52 65 74 75 72 6e 20 61 6e 20 49 OTE: Return an I 6ad0: 53 4f 38 36 30 31 20 44 61 74 65 54 69 6d 65 20 SO8601 DateTime 6ae0: 66 6f 72 6d 61 74 20 63 6f 6d 70 61 74 69 62 6c format compatibl 6af0: 65 20 77 69 74 68 20 53 51 4c 69 74 65 2c 0d 0a e with SQLite,.. 6b00: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 6b10: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 6b20: 74 65 2c 20 61 6e 64 20 73 75 69 74 61 62 6c 65 te, and suitable 6b30: 20 66 6f 72 20 72 6f 75 6e 64 2d 74 72 69 70 70 for round-tripp 6b40: 69 6e 67 20 77 69 74 68 20 74 68 65 0d 0a 20 20 ing with the.. 6b50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 44 61 # Da 6b60: 74 65 54 69 6d 65 20 63 6c 61 73 73 20 6f 66 20 teTime class of 6b70: 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 2e 20 20 the framework. 6b80: 49 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 If this value is 6b90: 20 63 68 61 6e 67 65 64 2c 0d 0a 20 20 20 20 20 changed,.. 6ba0: 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 6f # vario 6bb0: 75 73 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 us tests may fai 6bc0: 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 l... #.. 6bd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 79 return "y 6be0: 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a yyy-MM-dd HH:mm: 6bf0: 73 73 2e 46 46 46 46 46 46 46 4b 22 0d 0a 20 20 ss.FFFFFFFK".. 6c00: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 6c10: 0a 20 20 20 20 70 72 6f 63 20 65 6e 75 6d 65 72 . proc enumer 6c20: 61 62 6c 65 54 6f 4c 69 73 74 20 7b 20 65 6e 75 ableToList { enu 6c30: 6d 65 72 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 merable } {.. 6c40: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c set result [l 6c50: 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ist].... if 6c60: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 6c70: 20 24 65 6e 75 6d 65 72 61 62 6c 65 5d 20 3d 3d$enumerable] ==
6c80: 20 30 20 7c 7c 20 24 65 6e 75 6d 65 72 61 62 6c   0 || $enumerabl 6c90: 65 20 65 71 20 22 6e 75 6c 6c 22 7d 20 74 68 65 e eq "null"} the 6ca0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret 6cb0: 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 urn$result..
6cc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62     }....      ob
6cd0: 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c  ject foreach -al
6ce0: 69 61 73 20 69 74 65 6d 20 24 65 6e 75 6d 65 72  ias item $enumer 6cf0: 61 62 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 able {.. 6d00: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 6d10: 74 68 20 24 69 74 65 6d 5d 20 3e 20 30 7d 20 74 th$item] > 0} t
6d20: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
6d30: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result
6d40: 5b 24 69 74 65 6d 20 54 6f 53 74 72 69 6e 67 5d  [$item ToString] 6d50: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 6d60: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 6d70: 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 turn$result..
6d80: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
6d90: 20 63 61 74 63 68 41 6e 64 52 65 74 75 72 6e 20   catchAndReturn
6da0: 7b 20 73 63 72 69 70 74 20 7b 73 74 61 63 6b 54  { script {stackT
6db0: 72 61 63 65 20 66 61 6c 73 65 7d 20 7b 73 74 72  race false} {str
6dc0: 69 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  ict true} } {..
6dd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
6de0: 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74  NOTE: Evaluate t
6df0: 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64  he script provid
6e00: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
6e10: 20 69 6e 20 74 68 65 69 72 20 63 6f 6e 74 65 78   in their contex
6e20: 74 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  t,..      #
6e30: 20 20 63 61 70 74 75 72 69 6e 67 20 62 6f 74 68    capturing both
6e40: 20 74 68 65 20 72 65 73 75 6c 74 20 61 6e 64 20   the result and
6e50: 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  the return code.
6e60: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
6e70: 20 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68   set code [catch
6e80: 20 7b 75 70 6c 65 76 65 6c 20 31 20 24 73 63 72   {uplevel 1 $scr 6e90: 69 70 74 7d 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a ipt} result].... 6ea0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 6eb0: 20 4e 4f 54 45 3a 20 44 69 64 20 74 68 65 20 73 NOTE: Did the s 6ec0: 63 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 cript provided b 6ed0: 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 4e 4f 54 y our caller NOT 6ee0: 20 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72 3f raise an error? 6ef0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6f00: 20 69 66 20 7b 24 73 74 72 69 63 74 20 26 26 20 if {$strict &&
6f10: 24 63 6f 64 65 20 3d 3d 20 30 20 7c 7c 20 21 24  $code == 0 || !$
6f20: 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 65 20  strict && $code 6f30: 21 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 != 1} then {.. 6f40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 6f50: 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 # NOTE: Success 6f60: 2e 20 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 . Return a list 6f70: 20 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e with the return 6f80: 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 code and the re 6f90: 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 sult... # 6fa0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 6fb0: 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 [list$code $re 6fc0: 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 sult].. } e 6fd0: 6c 73 65 69 66 20 7b 24 73 74 61 63 6b 54 72 61 lseif {$stackTra
6fe0: 63 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ce} then {..
6ff0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
7000: 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20   NOTE: Failure.
7010: 20 4f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74   Our caller want
7020: 73 20 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74  s a full stack t
7030: 72 61 63 65 20 28 69 66 20 61 70 70 6c 69 63 61  race (if applica
7040: 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23  ble),..        #
7050: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 20         return a
7060: 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65  list with the re
7070: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68  turn code and th
7080: 65 20 72 65 73 75 6c 74 20 76 65 72 62 61 74 69  e result verbati
7090: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  m...        #..
70a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
70b0: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code$resul
70c0: 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  t]..      } else
70d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
70e0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46         # NOTE: F
70f0: 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c  ailure.  Our cal
7100: 6c 65 72 20 64 6f 65 73 20 6e 6f 74 20 77 61 6e  ler does not wan
7110: 74 20 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74  t a full stack t
7120: 72 61 63 65 20 28 69 66 0d 0a 20 20 20 20 20 20  race (if..
7130: 20 20 23 20 20 20 20 20 20 20 61 70 70 6c 69 63    #       applic
7140: 61 62 6c 65 29 2c 20 72 65 74 75 72 6e 20 61 20  able), return a
7150: 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65  list with the re
7160: 74 75 72 6e 20 63 6f 64 65 2c 20 74 68 65 20 65  turn code, the e
7170: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20  rror..        #
7180: 20 20 20 20 20 20 63 6f 64 65 20 66 6f 72 20 74        code for t
7190: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20  he interpreter,
71a0: 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65  and the error me
71b0: 73 73 61 67 65 20 75 70 20 74 6f 20 74 68 65 0d  ssage up to the.
71c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
71d0: 20 70 6f 69 6e 74 20 77 68 65 72 65 20 74 68 65   point where the
71e0: 20 73 74 61 63 6b 20 74 72 61 63 65 20 73 68 6f   stack trace sho
71f0: 75 6c 64 20 73 74 61 72 74 2e 0d 0a 20 20 20 20  uld start...
7200: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
7210: 65 74 20 69 6e 64 65 78 20 5b 73 74 72 69 6e 67  et index [string
7220: 20 66 69 72 73 74 20 22 20 20 20 61 74 20 22 20   first "   at "
7230: 24 72 65 73 75 6c 74 5d 3b 20 23 20 48 41 43 4b  $result]; # HACK 7240: 3a 20 52 65 6c 69 61 62 6c 65 3f 0d 0a 0d 0a 20 : Reliable?.... 7250: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l 7260: 69 73 74 20 24 63 6f 64 65 20 24 3a 3a 65 72 72 ist$code $::err 7270: 6f 72 43 6f 64 65 20 5b 65 78 70 72 20 7b 24 69 orCode [expr {$i
7280: 6e 64 65 78 20 21 3d 20 2d 31 20 3f 20 5c 0d 0a  ndex != -1 ? \..
7290: 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
72a0: 69 6e 67 20 74 72 69 6d 20 5b 73 74 72 69 6e 67  ing trim [string
72b0: 20 72 61 6e 67 65 20 24 72 65 73 75 6c 74 20 30   range $result 0 72c0: 20 24 69 6e 64 65 78 5d 5d 20 3a 20 24 72 65 73$index]] : $res 72d0: 75 6c 74 7d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d ult}]].. }. 72e0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 72f0: 72 6f 63 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 roc compileCShar 7300: 70 57 69 74 68 20 7b 0d 0a 20 20 20 20 20 20 20 pWith {.. 7310: 20 20 20 20 20 74 65 78 74 20 6d 65 6d 6f 72 79 text memory 7320: 20 73 79 6d 62 6f 6c 73 20 73 74 72 69 63 74 20 symbols strict 7330: 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 65 resultsVarName e 7340: 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 66 69 6c rrorsVarName fil 7350: 65 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 eNames.. 7360: 20 20 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20 20 args } {.. 7370: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 7380: 4f 54 45 3a 20 53 69 6e 63 65 20 77 65 20 61 72 OTE: Since we ar 7390: 65 20 67 6f 69 6e 67 20 74 6f 20 75 73 65 20 74 e going to use t 73a0: 68 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20 his method name 73b0: 61 20 6c 6f 74 2c 20 61 73 73 69 67 6e 20 69 74 a lot, assign it 73c0: 20 74 6f 20 61 0d 0a 20 20 20 20 20 20 23 20 20 to a.. # 73d0: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 66 69 variable fi 73e0: 72 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 rst... #.. 73f0: 20 20 20 20 20 73 65 74 20 61 64 64 20 52 65 66 set add Ref 7400: 65 72 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 erencedAssemblie 7410: 73 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 20 20 23 s.Add.... # 7420: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 7430: 43 72 65 61 74 65 20 74 68 65 20 62 61 73 65 20 Create the base 7440: 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 command to evalu 7450: 61 74 65 20 61 6e 64 20 61 64 64 20 74 68 65 20 ate and add the 7460: 70 72 6f 70 65 72 74 79 20 73 65 74 74 69 6e 67 property setting 7470: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 7480: 20 74 68 61 74 20 61 72 65 20 61 6c 6d 6f 73 74 that are almost 7490: 20 61 6c 77 61 79 73 20 6e 65 65 64 65 64 20 62 always needed b 74a0: 79 20 6f 75 72 20 75 6e 69 74 20 74 65 73 74 73 y our unit tests 74b0: 20 28 69 2e 65 2e 20 74 68 65 20 53 79 73 74 65 (i.e. the Syste 74c0: 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 m.. # 74d0: 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 and System.Data 74e0: 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65 assembly refere 74f0: 6e 63 65 73 29 2e 0d 0a 20 20 20 20 20 20 23 0d nces)... #. 7500: 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 . set comma 7510: 6e 64 20 5b 6c 69 73 74 20 63 6f 6d 70 69 6c 65 nd [list compile 7520: 43 53 68 61 72 70 20 24 74 65 78 74 20 24 6d 65 CSharp$text $me 7530: 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73 mory$symbols $s 7540: 74 72 69 63 74 20 72 65 73 75 6c 74 73 20 5c 0d trict results \. 7550: 0a 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 . error 7560: 73 20 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c s$add System.dl
7570: 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61  l $add System.Da 7580: 74 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 ta.dll$add Syst
7590: 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20  em.Xml.dll]....
75a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
75b0: 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 68  NOTE: Add all th
75c0: 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c 65 20  e provided file
75d0: 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d 62 6c  names as assembl
75e0: 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20  y references...
75f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f       #..      fo
7600: 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $7610: 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 fileNames {.. 7620: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d lappend com 7630: 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74 42 69 mand$add [getBi
7640: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69  naryFileName $fi 7650: 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d leName].. } 7660: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 7670: 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 # NOTE: Add t 7680: 68 65 20 65 78 74 72 61 20 61 72 67 75 6d 65 6e he extra argumen 7690: 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 ts, if any, to t 76a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 he command to ev 76b0: 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 aluate... # 76c0: 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 .. eval lap 76d0: 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72 pend command$ar
76e0: 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  gs....      #..
76f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69       # NOTE: Ali
7700: 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  as the compiler
7710: 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 61 6e  local results an
7720: 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 62 6c  d errors variabl
7730: 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  es to the..
7740: 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c   #       variabl
7750: 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 65 64  e names provided
7760: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   by our caller..
7770: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
7780: 75 70 76 61 72 20 31 20 24 72 65 73 75 6c 74 73  upvar 1 $results 7790: 56 61 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 0d VarName results. 77a0: 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
77b0: 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 65 72  errorsVarName er
77c0: 72 6f 72 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  rors....      #.
77d0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45  .      # NOTE: E
77e0: 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e 73  valuate the cons
77f0: 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65  tructed [compile
7800: 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20  CSharp] command
7810: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d 0a  and return the..
7820: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
7830: 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  sult...      #..
7840: 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d        eval $comm 7850: 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 and.. }..... 7860: 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79 proc isMemory 7870: 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 Db { fileName } 7880: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 7890: 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 # NOTE: Is the 78a0: 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 specified datab 78b0: 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 65 ase file name re 78c0: 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 ally an in-memor 78d0: 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 20 y database?.. 78e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 78f0: 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e rn [expr {$fileN
7900: 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a  ame eq ":memory:
7910: 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  " || \..
7920: 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20    [string range
7930: 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20  $fileName 0 12] 7940: 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 eq "file::memory 7950: 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a :"}].. }..... 7960: 20 20 20 20 70 72 6f 63 20 65 78 65 63 75 74 65 proc execute 7970: 53 71 6c 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 Sql { sql {execu 7980: 74 65 20 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 te none} {fileNa 7990: 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 me ""} } {.. 79a0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 79b0: 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 ngth$fileName]
79c0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 73 65 74 20  == 0} then {set
79d0: 66 69 6c 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79  fileName :memory
79e0: 3a 7d 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44  :}..      setupD
79f0: 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22  b $fileName "" " 7a00: 22 20 22 22 20 22 22 20 22 22 20 66 61 6c 73 65 " "" "" "" false 7a10: 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c false false fal 7a20: 73 65 20 6d 65 6d 44 62 0d 0a 0d 0a 20 20 20 20 se memDb.... 7a30: 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 try {.. 7a40: 20 72 65 74 75 72 6e 20 5b 73 71 6c 20 65 78 65 return [sql exe 7a50: 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 24 65 cute -execute$e
7a60: 78 65 63 75 74 65 20 24 6d 65 6d 44 62 20 24 73  xecute $memDb$s
7a70: 71 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 66 69 6e  ql]..      } fin
7a80: 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20  ally {..
7a90: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN 7aa0: 61 6d 65 20 6d 65 6d 44 62 20 66 61 6c 73 65 20 ame memDb false 7ab0: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a false.. }.. 7ac0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7ad0: 6f 63 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 oc setupDb {.. 7ae0: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 fileNa 7af0: 6d 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 me {mode ""} {da 7b00: 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d teTimeFormat ""} 7b10: 20 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 {dateTimeKind " 7b20: 22 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 "} {flags ""}.. 7b30: 20 20 20 20 20 20 20 20 20 20 20 7b 65 78 74 72 {extr 7b40: 61 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 a ""} {qualify t 7b50: 72 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 rue} {delete tru 7b60: 65 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a e} {uri false}.. 7b70: 20 20 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d {tem 7b80: 70 6f 72 61 72 79 20 74 72 75 65 7d 20 7b 76 61 porary true} {va 7b90: 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 rName db} } {.. 7ba0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 7bb0: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 NOTE: First, see 7bc0: 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 if our caller h 7bd0: 61 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 as requested an 7be0: 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 in-memory databa 7bf0: 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 se... #.. 7c00: 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 set isMemory 7c10: 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 [isMemoryDb$fi
7c20: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20  leName]....
7c30: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
7c40: 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74  : For now, all t
7c50: 65 73 74 20 64 61 74 61 62 61 73 65 73 20 75 73  est databases us
7c60: 65 64 20 62 79 20 74 68 65 20 74 65 73 74 20 73  ed by the test s
7c70: 75 69 74 65 20 61 72 65 20 70 6c 61 63 65 64 20  uite are placed
7c80: 69 6e 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  into..      #
7c90: 20 20 20 20 74 68 65 20 74 65 6d 70 6f 72 61 72      the temporar
7ca0: 79 20 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61  y directory.  Ea
7cb0: 63 68 20 64 61 74 61 62 61 73 65 20 75 73 65 64  ch database used
7cc0: 20 62 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c   by a test shoul
7cd0: 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20  d be..      #
7ce0: 20 20 20 20 63 6c 65 61 6e 65 64 20 75 70 20 62      cleaned up b
7cf0: 79 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e  y that test usin
7d00: 67 20 74 68 65 20 22 63 6c 65 61 6e 75 70 44 62  g the "cleanupDb
7d10: 22 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c  " procedure, bel
7d20: 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ow...      #..
7d30: 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f      if {!$isMemo 7d40: 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 ry &&$qualify}
7d50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
7d60: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
7d70: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
7d80: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b  baseDirectory] [
7d90: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN 7da0: 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ame]].. }.. 7db0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 7dc0: 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 # NOTE: By defa 7dd0: 75 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 ult, delete any 7de0: 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 pre-existing dat 7df0: 61 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 abase with the s 7e00: 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 ame file.. 7e10: 23 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 # name if 7e20: 69 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 it currently exi 7e30: 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 sts... #.. 7e40: 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d if {!$isMem
7e50: 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26  ory && $delete & 7e60: 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 & [file exists$
7e70: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
7e80: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
7e90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
7ea0: 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20  tempt to delete
7eb0: 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67  any pre-existing
7ec0: 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74   database with t
7ed0: 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20  he same file..
7ee0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
7ef0: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  me...        #..
7f00: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
7f10: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20  ch {file delete
7f20: 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72  $fileName} error 7f30: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 7f40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 7f50: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d # NOTE: We som 7f60: 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 ehow failed to d 7f70: 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 elete the file, 7f80: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 report why... 7f90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 7fa0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
7fb0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
7fc0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
7fd0: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
7fe0: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
7ff0: 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20  delete database
8000: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa 8010: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 8020: 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73 "\" during s 8030: 65 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c etup, error: " \ 8040: 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
8050: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
8060: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
8070: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66       # NOTE: Ref
8080: 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  er to the specif
8090: 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e  ied variable (e.
80a0: 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20  g. "db") in the
80b0: 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a  context of our..
80c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
80d0: 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c  ller.  The handl
80e0: 65 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20  e to the opened
80f0: 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65  database will be
8100: 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a   stored there...
8110: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
8120: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 8130: 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 db.... #.. 8140: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 # NOTE: Sta 8150: 72 74 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 rt building the 8160: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 8170: 67 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 g. The only req 8180: 75 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 uired portion.. 8190: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 # of 81a0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 the connection s 81b0: 74 72 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 tring is the dat 81c0: 61 20 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 a source, which 81d0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 contains the.. 81e0: 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 # data 81f0: 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 base file name i 8200: 74 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 tself. If our c 8210: 61 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 aller wants to u 8220: 73 65 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 se a URI as.. 8230: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 # the d 8240: 61 74 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 ata source, use 8250: 74 68 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e the FullUri conn 8260: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 ection string pr 8270: 6f 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 operty to.. 8280: 20 23 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 # prevent 8290: 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 the data source 82a0: 20 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 string from bei 82b0: 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 ng mangled... 82c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 82d0: 24 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20$uri} then {..
82e0: 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63        set connec
82f0: 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b  tion {FullUri=${ 8300: 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 fileName}}.. 8310: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 8320: 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 set connecti 8330: 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d on {Data Source= 8340: 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20${fileName}}..
8350: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
8360: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
8370: 53 69 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65  Since this proce
8380: 64 75 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63  dure has no spec
8390: 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66  ial knowledge of
83a0: 20 77 68 61 74 20 74 68 65 20 64 65 66 61 75 6c   what the defaul
83b0: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
83c0: 20 73 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20   setting is for
83d0: 74 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63  the ToFullPath c
83e0: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
83f0: 20 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73   propery, always
8400: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
8410: 61 64 64 20 74 68 65 20 76 61 6c 75 65 20 77 65  add the value we
8420: 20 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74   know about to t
8430: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
8440: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ring...      #..
8450: 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e        append con
8460: 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c  nection {;ToFull
8470: 50 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d  Path=${qualify}} 8480: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 8490: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 # NOTE: If ou 84a0: 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 r caller specifi 84b0: 65 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 ed a journal mod 84c0: 65 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 e, add the neces 84d0: 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 sary portion.. 84e0: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t 84f0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st 8500: 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ring now... 8510: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 8520: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f tring length$mo
8530: 64 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  de] > 0} then {.
8540: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20  .        append
8550: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75  connection {;Jou
8560: 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65  rnal Mode=${mode 8570: 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }}.. }.... 8580: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 8590: 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c NOTE: If our cal 85a0: 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 ler specified a 85b0: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c DateTime format, 85c0: 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 add the necessa 85d0: 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ry.. # 85e0: 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 portion of the 85f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 8600: 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # 8610: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 8620: 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 ing length$date
8630: 54 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d  TimeFormat] > 0}
8640: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
8650: 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69   append connecti
8660: 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72  on {;DateTimeFor
8670: 6d 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f  mat=${dateTimeFo 8680: 72 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d rmat}}.. }. 8690: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 86a0: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 # NOTE: If our 86b0: 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 caller specifie 86c0: 64 20 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 d a DateTimeKind 86d0: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 , add the necess 86e0: 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 ary portion.. 86f0: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th 8700: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str 8710: 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ing now... 8720: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st 8730: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 ring length$dat
8740: 65 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20  eTimeKind] > 0}
8750: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
8760: 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  append connectio
8770: 6e 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64  n {;DateTimeKind
8780: 3d 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d  =${dateTimeKind} 8790: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 87a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 87b0: 4f 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 OTE: If there ar 87c0: 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 e any global (pe 87d0: 72 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e r test run) conn 87e0: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 ection flags cur 87f0: 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 rently.. # 8800: 20 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 set, use t 8810: 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 hem now (i.e. by 8820: 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 combining them 8830: 77 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f with the ones fo 8840: 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 r this.. # 8850: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e connection 8860: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 )... #.. 8870: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 8880: 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e sts ::connection 8890: 5f 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 _flags] && \.. 88a0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 88b0: 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 length$::connec
88c0: 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d  tion_flags] > 0}
88d0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
88e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
88f0: 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f  TE: Show (and lo
8900: 67 29 20 74 68 61 74 20 77 65 20 64 65 74 65 63  g) that we detec
8910: 74 65 64 20 73 6f 6d 65 20 67 6c 6f 62 61 6c 20  ted some global
8920: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
8930: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
8940: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 8950: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 8960: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 8970: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f "---- glo 8980: 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 bal connection f 8990: 6c 61 67 73 20 64 65 74 65 63 74 65 64 3a 20 22 lags detected: " 89a0: 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66$::connection_f
89b0: 6c 61 67 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  lags \n]....
89c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
89d0: 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61   NOTE: Combine a
89e0: 6e 64 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68  nd/or replace th
89f0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  e connection fla
8a00: 67 73 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77  gs and then show
8a10: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
8a20: 20 20 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e        new value.
8a30: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
8a40: 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b       set flags [
8a50: 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c  combineFlags $fl 8a60: 61 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f ags$::connectio
8a70: 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20  n_flags]....
8a80: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 8a90: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 8aa0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 8ab0: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 "---- combi 8ac0: 6e 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 ned connection f 8ad0: 6c 61 67 73 20 61 72 65 3a 20 22 20 24 66 6c 61 lags are: "$fla
8ae0: 67 73 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  gs \n]..      }.
8af0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
8b00: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72    # NOTE: If our
8b10: 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65   caller specifie
8b20: 64 20 61 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  d a SQLiteConnec
8b30: 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 74  tionFlags, add t
8b40: 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20  he necessary..
8b50: 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74      #       port
8b60: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65  ion of the conne
8b70: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77  ction string now
8b80: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
8b90: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
8ba0: 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30  ngth $flags] > 0 8bb0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 8bc0: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect 8bd0: 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c ion {;Flags=${fl
8be0: 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ags}}..      }..
8bf0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8c00: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20   # NOTE: If our
8c10: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64  caller specified
8c20: 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f 61   an extra payloa
8c30: 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74  d to the connect
8c40: 69 6f 6e 20 73 74 72 69 6e 67 2c 0d 0a 20 20 20  ion string,..
8c50: 20 20 20 23 20 20 20 20 20 20 20 61 70 70 65 6e     #       appen
8c60: 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  d it now...
8c70: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
8c80: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78  tring length $ex 8c90: 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b tra] > 0} then { 8ca0: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append 8cb0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 connection \;$
8cc0: 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a  extra..      }..
8cd0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8ce0: 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68   # NOTE: Open th
8cf0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
8d00: 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69  ction now, placi
8d10: 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61  ng the opaque ha
8d20: 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20  ndle value..
8d30: 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74    #       into t
8d40: 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63  he variable spec
8d50: 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c  ified by our cal
8d60: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ler...      #..
8d70: 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c       set db [sql
8d80: 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69   open -type SQLi
8d90: 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65  te [subst $conne 8da0: 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 ction]].... 8db0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 8dc0: 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20 : Configure the 8dd0: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 8de0: 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 6c ory for the newl 8df0: 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 y opened databas 8e00: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 8e10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 connection now 8e20: 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 unless our calle 8e30: 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 r forbids it... 8e40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 8e50: 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 20 {$temporary &&
8e60: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
8e70: 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 44  no(setTemporaryD
8e80: 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e  irectory)]} then
8e90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20   {..        sql
8ea0: 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70  execute $db [app 8eb0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 8ec0: 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 74 "PRAGMA t 8ed0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 emp_store_direct 8ee0: 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 65 ory = \"" [getTe 8ef0: 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 mporaryDirectory 8f00: 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d ] \"\;].. } 8f10: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 8f20: 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79 # NOTE: Alway 8f30: 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f 6e s return the con 8f40: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75 nection handle u 8f50: 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 pon success... 8f60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret 8f70: 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a urn$db..    }..
8f80: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44  ...    proc getD
8f90: 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76  bConnection { {v
8fa0: 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a  arName db} } {..
8fb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
8fc0: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
8fd0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
8fe0: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
8ff0: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
9000: 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
9010: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20  #       caller.
9020: 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74   The handle to t
9030: 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76  he database prev
9040: 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 62 79  iously opened by
9050: 20 5b 73 65 74 75 70 44 62 5d 0d 0a 20 20 20 20   [setupDb]..
9060: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64    #       should
9070: 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65   be stored there
9080: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
9090: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 90a0: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # 90b0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 90c0: 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 This returns the 90d0: 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e ADO.NET IDbConn 90e0: 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e ection object in 90f0: 73 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a stance for the.. 9100: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 70 # sp 9110: 65 63 69 66 69 65 64 20 64 61 74 61 62 73 65 20 ecified databse 9120: 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 handle. Since g 9130: 65 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 etting this obje 9140: 63 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a ct relies upon.. 9150: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea 9160: 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 gle internals, g 9170: 72 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 reat care should 9180: 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f be taken to avo 9190: 69 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d id disposing of. 91a0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 91b0: 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 his object or ot 91c0: 68 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 herwise putting 91d0: 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c it into an inval 91e0: 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 id state... 91f0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 9200: 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 nfo exists db]} 9210: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 9220: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 9230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob 9240: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 9250: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f gs +NonPublic -o 9260: 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 bjectflags +NoDi 9270: 73 70 6f 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 spose \.. 9280: 20 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20 -alias 9290: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 92a0: 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e ctive.connection 92b0: 73 20 49 74 65 6d 20 24 64 62 7d 20 5c 0d 0a 20 s Item$db} \..
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
92d0: 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
92e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
92f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
9300: 54 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74  TE: Success, ret
9310: 75 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f  urn the opaque o
9320: 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20  bject handle...
9330: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
9340: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 9350: 73 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 sult.. } 9360: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 9370: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 9380: 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 NOTE: Failure, 9390: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 report why... 93a0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 93b0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
93c0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
93d0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
93e0: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
93f0: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
9400: 67 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  get connection h
9410: 61 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61  andle for databa
9420: 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  se \"" \..
9430: 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c          $db "\", 9440: 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
9450: 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
9460: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
9470: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
9480: 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  oc freeDbConnect
9490: 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63  ion { {varName c
94a0: 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a  onnection} } {..
94b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
94c0: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
94d0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
94e0: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f  riable (e.g. "co
94f0: 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68  nnection") in th
9500: 65 20 63 6f 6e 74 65 78 74 0d 0a 20 20 20 20 20  e context..
9510: 20 23 20 20 20 20 20 20 20 6f 66 20 6f 75 72 20   #       of our
9520: 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61  caller.  The opa
9530: 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c  que object handl
9540: 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54  e for an ADO.NET
9550: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20   connection..
9560: 20 20 20 23 20 20 20 20 20 20 20 70 72 65 76 69     #       previ
9570: 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62  ously returned b
9580: 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69  y [getDbConnecti
9590: 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65 20 73 74  on] should be st
95a0: 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20  ored there...
95b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61     #..      upva
95c0: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e  r 1 $varName con 95d0: 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 nection.... 95e0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 95f0: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6d : Attempt to rem 9600: 6f 76 65 20 74 68 65 20 6f 70 61 71 75 65 20 6f ove the opaque o 9610: 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 72 6f bject handle fro 9620: 6d 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 m the interprete 9630: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # 9640: 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a now. This [obj 9650: 65 63 74 20 64 69 73 70 6f 73 65 5d 20 63 61 6c ect dispose] cal 9660: 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 l will not actua 9670: 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 20 74 lly dispose of t 9680: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 9690: 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a underlying obj 96a0: 65 63 74 20 62 65 63 61 75 73 65 20 74 68 65 20 ect because the 96b0: 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 20 +NoDispose flag 96c0: 77 61 73 20 73 65 74 20 6f 6e 20 69 74 20 64 75 was set on it du 96d0: 72 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20 ring.. # 96e0: 20 20 20 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 creation of 96f0: 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 the opaque objec 9700: 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 t handle... 9710: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 9720: 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 nfo exists conne 9730: 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 ction] && \.. 9740: 20 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 6f [catch {o 9750: 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 24 63 bject dispose$c
9760: 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72  onnection} error
9770: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
9780: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
9790: 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
97a0: 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76   failed to remov
97b0: 65 20 74 68 65 20 68 61 6e 64 6c 65 2c 20 72 65  e the handle, re
97c0: 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20  port why...
97d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
97e0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 97f0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 9800: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 9810: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 9820: 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 iled to remove c 9830: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 onnection handle 9840: 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e \""$connection
9850: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
9860: 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  "\", error: " \n
9870: 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. 9880: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 9890: 0d 0a 20 20 20 20 70 72 6f 63 20 61 64 64 44 62 .. proc addDb 98a0: 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e Connection { con 98b0: 6e 65 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 nection {varName 98c0: 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 db} } {.. 98d0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 98e0: 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 Refer to the sp 98f0: 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 ecified variable 9900: 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 (e.g. "db") in 9910: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f the context of o 9920: 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ur.. # 9930: 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 caller... 9940: 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar 9950: 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
9960: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
9970: 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 61  # NOTE: Create a
9980: 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d 61   correctly forma
9990: 74 74 65 64 20 6e 61 6d 65 20 66 6f 72 20 74 68  tted name for th
99a0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
99b0: 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20  ction to..
99c0: 23 20 20 20 20 20 20 20 62 65 20 61 64 64 65 64  #       be added
99d0: 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6d 61 6e   to the list man
99e0: 61 67 65 64 20 62 79 20 74 68 65 20 45 61 67 6c  aged by the Eagl
99f0: 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  e interpreter...
9a00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
9a10: 65 74 20 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e  et db [object in
9a20: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
9a30: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
9a40: 20 20 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f      Eagle._Compo
9a50: 6e 65 6e 74 73 2e 50 72 69 76 61 74 65 2e 46 6f  nents.Private.Fo
9a60: 72 6d 61 74 4f 70 73 20 44 61 74 61 62 61 73 65  rmatOps Database
9a70: 4f 62 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e  ObjectName $conn 9a80: 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 ection \.. 9a90: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 SQLiteConnec 9aa0: 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 tion [object inv 9ab0: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e oke Interpreter. 9ac0: 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 GetActive NextId 9ad0: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ]].... #.. 9ae0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 # NOTE: Add 9af0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f the database co 9b00: 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 nnection provide 9b10: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 d by our caller 9b20: 74 6f 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 to the list.. 9b30: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th 9b40: 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 ose known to the 9b50: 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 Eagle interpret 9b60: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 er... #.. 9b70: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 9b80: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 9b90: 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65 72 2e lic Interpreter. 9ba0: 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 GetActive.connec 9bb0: 74 69 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 tions Add \.. 9bc0: 20 20 20 20 20 20 20 24 64 62 20 24 63 6f 6e 6e$db $conn 9bd0: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c ection.. }... 9be0: 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e .. proc clean 9bf0: 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 upDb { fileName 9c00: 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f {varName db} {co 9c10: 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 llect true} {qua 9c20: 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 lify true}.. 9c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9c40: 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d {delete true} } 9c50: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 9c60: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 9c70: 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 pt to force all 9c80: 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 pending "garbage 9c90: 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 " objects to be 9ca0: 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 collected,.. 9cb0: 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 # includ 9cc0: 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 ing SQLite state 9cd0: 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 ments and backup 9ce0: 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 objects; this s 9cf0: 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 hould allow.. 9d00: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 # the u 9d10: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 nderlying databa 9d20: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 se file to be de 9d30: 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d leted... #. 9d40: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c . if {$coll
9d50: 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ect} then {..
9d60: 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62       collectGarb
9d70: 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  age $::test_chan 9d80: 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a nel.. }.... 9d90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 9da0: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 NOTE: Refer to 9db0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 the specified va 9dc0: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 riable (e.g. "db 9dd0: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 ") in the contex 9de0: 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 t of our.. 9df0: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 # caller. 9e00: 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 The handle to t 9e10: 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 he database prev 9e20: 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 62 79 iously opened by 9e30: 20 5b 73 65 74 75 70 44 62 5d 0d 0a 20 20 20 20 [setupDb].. 9e40: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 9e50: 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 be stored there 9e60: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 9e70: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
9e80: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23  me db....      #
9e90: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
9ea0: 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65 63  Close the connec
9eb0: 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61  tion to the data
9ec0: 62 61 73 65 20 6e 6f 77 2e 20 20 54 68 69 73 20  base now.  This
9ed0: 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73 20  should allow us
9ee0: 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  to..      #
9ef0: 20 20 64 65 6c 65 74 65 20 74 68 65 20 75 6e 64    delete the und
9f00: 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65  erlying database
9f10: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d   file...      #.
9f20: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
9f30: 20 65 78 69 73 74 73 20 64 62 5d 20 26 26 20 5b   exists db] && [
9f40: 63 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65  catch {sql close
9f50: 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68   $db} error]} th 9f60: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 9f70: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 9f80: 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c We somehow fail 9f90: 65 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 ed to close the 9fa0: 64 61 74 61 62 61 73 65 2c 20 72 65 70 6f 72 74 database, report 9fb0: 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 why... # 9fc0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 9fd0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
9fe0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
9ff0: 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
a000: 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
a010: 20 74 6f 20 63 6c 6f 73 65 20 64 61 74 61 62 61   to close databa
a020: 73 65 20 5c 22 22 20 24 64 62 20 22 5c 22 2c 20  se \"" $db "\", a030: 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 error: " \.. a040: 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 \n\t$er
a050: 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  ror \n]..      }
a060: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
a070: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74     # NOTE: First
a080: 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c  , see if our cal
a090: 6c 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65  ler has requeste
a0a0: 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64  d an in-memory d
a0b0: 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20  atabase...
a0c0: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d  #..      set isM
a0d0: 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44  emory [isMemoryD
a0e0: 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  b $fileName].... a0f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # a100: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 NOTE: Build the a110: 20 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 full path to th a120: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 e database file a130: 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 name. For now, a140: 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 20 all test.. a150: 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 # database a160: 20 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 files are store a170: 64 20 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 d in the tempora a180: 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 ry directory... a190: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if a1a0: 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 {!$isMemory &&
a1b0: 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b  $qualify} then { a1c0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 .. set fi a1d0: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 leName [file joi a1e0: 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 n [getDatabaseDi a1f0: 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 rectory] [file t a200: 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d ail$fileName]].
a210: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
a220: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
a230: 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
a240: 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74  file still exist
a250: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
a260: 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72     if {!$isMemor a270: 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 y &&$delete &&
a280: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi a290: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. a2a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. a2b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip a2c0: 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 deleting databa a2d0: 73 65 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 se files if some a2e0: 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c body sets the gl a2f0: 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 obal.. # a300: 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 74 variable t a310: 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 o prevent it... a320: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. a330: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi a340: 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 sts ::no(cleanup a350: 44 62 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b DbFile)]} then { a360: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. a370: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: a380: 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 Attempt to dele a390: 74 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 te the test data a3a0: 62 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a base file now... a3b0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. a3c0: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 if {[set a3d0: 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c code [catch {fil a3e0: 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 e delete$fileNa
a3f0: 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65  me} error]]} the
a400: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
a410: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
a420: 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68  # NOTE: We someh
a430: 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  ow failed to del
a440: 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65  ete the file, re
a450: 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20  port why...
a460: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
a470: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a480: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a490: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a4a0: 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== a4b0: 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed a4c0: 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 to delete datab a4d0: 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ase file \""$fi
a4e0: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
a4f0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75            "\" du
a500: 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72  ring cleanup, er
a510: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err a520: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. a530: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e a540: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. a550: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # a560: 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 NOTE: Show that a570: 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 we skipped delet a580: 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 ing the file... a590: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. a5a0: 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 set code 0 a5b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 .... tp a5c0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
a5d0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
a5e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
a5f0: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
a600: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67  skipped deleting
a610: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c   database file \
a620: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a  "" $fileName \.. a630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ a640: 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 " during cleanup a650: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. a660: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. a670: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. a680: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The a690: 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 file does not ex a6a0: 69 73 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 ist, success!.. a6b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. a6c0: 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 set code 0.. a6d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r a6e0: 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 eturn$code..
a6f0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
a700: 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74  setupDbInterrupt
a710: 43 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e  Callback { chann
a720: 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20  el log } {..
a730: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel a740: 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 "---- setting u a750: 70 20 64 65 62 75 67 67 65 72 20 69 6e 74 65 72 p debugger inter a760: 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e rupt callback... a770: 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b ".... if { a780: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. a790: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N a7a0: 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 OTE: Make sure t a7b0: 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67 67 he script debugg a7c0: 65 72 20 61 6e 64 20 74 68 65 20 69 73 6f 6c 61 er and the isola a7d0: 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 20 ted interpreter a7e0: 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 are.. # a7f0: 20 20 20 20 20 73 65 74 75 70 20 61 6e 64 20 72 setup and r a800: 65 61 64 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 eady for use... a810: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. a820: 20 20 64 65 62 75 67 20 73 65 74 75 70 20 74 72 debug setup tr a830: 75 65 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 ue true.... a840: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # a850: 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e NOTE: Load the n a860: 65 63 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 ecessary package a870: 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 s into the isola a880: 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e ted interpreter. a890: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. a8a0: 20 20 20 20 20 64 65 62 75 67 20 65 76 61 6c 20 debug eval a8b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 {.. pac a8c0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 kage require Eag a8d0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 le.. pa a8e0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 ckage require Ea a8f0: 67 6c 65 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 gle.Library.. a900: 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 package r a910: 65 71 75 69 72 65 20 45 61 67 6c 65 2e 54 65 73 equire Eagle.Tes a920: 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a t.. }.... a930: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. a940: 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 # NOTE: Copy a950: 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 the necessary va a960: 72 69 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 riables into the a970: 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 isolated interp a980: 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 reter... a990: 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 #.. debug a9a0: 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a invoke 0 set :: a9b0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 test_channel$ch
a9c0: 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46  annel; # NOTE: F
a9d0: 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20  or [tputs]...
a9e0: 20 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b       debug invok
a9f0: 65 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c  e 0 set ::test_l
aa00: 6f 67 20 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a  og $log; # NOTE: aa10: 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a For [tlog]..... aa20: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. aa30: 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 # NOTE: Insta aa40: 6c 6c 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 ll the callback aa50: 73 63 72 69 70 74 20 74 6f 20 62 65 20 65 76 61 script to be eva aa60: 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20 69 73 luated in the is aa70: 6f 6c 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 olated.. aa80: 23 20 20 20 20 20 20 20 69 6e 74 65 72 70 72 65 # interpre aa90: 74 65 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e ter when this in aaa0: 74 65 72 70 72 65 74 65 72 20 69 73 20 69 6e 74 terpreter is int aab0: 65 72 72 75 70 74 65 64 20 62 79 20 73 63 72 69 errupted by scri aac0: 70 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 pt.. # aad0: 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e cancellation aae0: 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 , etc... aaf0: 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 #.. debug ab00: 20 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 callback apply ab10: 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 {{sender e} {.. ab20: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. ab30: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch ab40: 65 63 6b 20 69 66 20 74 68 69 73 20 63 61 6c 6c eck if this call ab50: 62 61 63 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 back is one that ab60: 20 77 65 20 63 61 72 65 20 61 62 6f 75 74 2e 0d we care about.. ab70: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. ab80: 20 20 20 20 20 20 20 20 69 66 20 7b 22 43 61 6e if {"Can ab90: 63 65 6c 65 64 22 20 69 6e 20 5b 73 70 6c 69 74 celed" in [split aba0: 20 5b 24 65 20 49 6e 74 65 72 72 75 70 74 54 79 [$e InterruptTy
abb0: 70 65 5d 20 22 2c 20 22 5d 7d 20 74 68 65 6e 20  pe] ", "]} then
abc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
abd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
abe0: 4e 4f 54 45 3a 20 49 74 65 72 61 74 65 20 74 68  NOTE: Iterate th
abf0: 72 6f 75 67 68 20 61 6c 6c 20 64 61 74 61 62 61  rough all databa
ac00: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b  se connections k
ac10: 6e 6f 77 6e 20 74 6f 20 74 68 65 0d 0a 20 20 20  nown to the..
ac20: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
ac30: 20 70 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65   parent interpre
ac40: 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ter...
ac50: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
ac60: 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
ac70: 2d 61 6c 69 61 73 20 70 61 69 72 20 5c 0d 0a 20  -alias pair \..
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
ac90: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
aca0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
acb0: 24 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 63  $e Interpreter.c acc0: 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 onnections] {.. acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. ace0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # acf0: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to ad00: 20 63 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 cancel any SQL ad10: 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 queries in progr ad20: 65 73 73 20 6f 6e 20 74 68 69 73 0d 0a 20 20 20 ess on this.. ad30: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # ad40: 20 20 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e database conn ad50: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 ection... ad60: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. ad70: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat ad80: 63 68 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e ch {$pair Value.
ad90: 43 61 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 20 21  Cancel} error] !
ada0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
adc0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann add0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ ade0: 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. adf0: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W ae00: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t ae10: 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79 20 66 o cancel query f ae20: 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22 or connection \" ae30: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. ae40: 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 [$pair
ae50: 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f 72 3a  Key] "\", error:
ae60: 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ ae70: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. ae80: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. ae90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. aea0: 0a 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 . }}.. aeb0: 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 } error] == 0 aec0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. aed0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint aee0: 69 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 interruptCallbac aef0: 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20 k.sqlite3.... af00: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
af10: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20  nel yes\n..
af20: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
af30: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe af40: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e l [appendArgs "n af50: 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 o, error: " \n\t af60: 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
af70: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
af80: 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70      proc cleanup
af90: 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20  File { fileName
afa0: 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b  {collect true} {
afb0: 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b  force false} } {
afc0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
afd0: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
afe0: 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65   to force all pe
aff0: 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20  nding "garbage"
b000: 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f  objects to be co
b010: 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20  llected,..
b020: 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e  #       includin
b030: 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65  g SQLite stateme
b040: 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f  nts and backup o
b050: 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f  bjects; this sho
b060: 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20  uld allow..
b070: 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64   #       the und
b080: 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65  erlying database
b090: 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65   file to be dele
b0a0: 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ted...      #..
b0b0: 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63       if {$collec b0c0: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. b0d0: 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 collectGarbag b0e0: 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 e$::test_channe
b0f0: 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  l..      }....
b100: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
b110: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
b120: 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69  e file still exi
b130: 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  sts...      #..
b140: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
b150: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] b160: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. b170: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N b180: 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 OTE: Skip deleti b190: 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20 69 66 ng test files if b1a0: 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 somebody sets t b1b0: 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 he global variab b1c0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 le.. # b1d0: 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69 to prevent i b1e0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. b1f0: 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 if {$forc
b200: 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73  e || ![info exis
b210: 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46  ts ::no(cleanupF
b220: 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ile)]} then {..
b230: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
b240: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
b250: 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20  tempt to delete
b260: 74 68 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f  the test file no
b270: 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  w...          #.
b280: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
b290: 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20  set code [catch
b2a0: 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69  {file delete $fi b2b0: 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d leName} error]]} b2c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. b2d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. b2e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 # NOTE: We s b2f0: 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f omehow failed to b300: 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 delete the file b310: 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... b320: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. b330: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs b340: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
b350: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
b370: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
b380: 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74  iled to delete t
b390: 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69  est file \"" $fi b3a0: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. b3b0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 "\" du b3c0: 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 ring cleanup, er b3d0: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
b3e0: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
b3f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
b400: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
b410: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
b420: 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20  NOTE: Show that
b430: 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74  we skipped delet
b440: 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20  ing the file...
b450: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
b460: 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30        set code 0
b470: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70  ....          tp
b480: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan b490: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs b4a0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. b4b0: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: b4c0: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting b4d0: 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 test file \""$
b4e0: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
b4f0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75            "\" du
b500: 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d  ring cleanup\n"]
b510: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
b520: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
b530: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b540: 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65  # NOTE: The file
b550: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
b560: 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20   success!..
b570: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
b580: 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20  t code 0..
b590: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
b5a0: 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a  n $code.. }.. b5b0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c 6c ... proc coll b5c0: 65 63 74 47 61 72 62 61 67 65 20 7b 20 63 68 61 ectGarbage { cha b5d0: 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e nnel {millisecon b5e0: 64 73 20 31 30 30 30 7d 20 7b 71 75 69 65 74 20 ds 1000} {quiet b5f0: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 true} } {.. b600: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a if {[catch {obj b610: 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 ect invoke GC Ge b620: 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c tTotalMemory fal b630: 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 se} result] == 0 b640: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. b650: 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
b660: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
b670: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel b680: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. b690: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- b6a0: 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 -- memory in use b6b0: 20 62 79 20 74 68 65 20 43 4c 52 20 62 65 66 6f by the CLR befo b6c0: 72 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e re collection... b6d0: 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. b6e0: 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79$result " by
b6f0: 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  tes\n"]..
b700: 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
b710: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
b720: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe b730: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. b740: 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN b750: 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 ING: failed to g b760: 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 et CLR memory us b770: 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d age, error: " \. b780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c . \n\ b790: 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
b7a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
b7b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7f0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20  #########....
b800: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
b810: 54 45 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61  TE: Repeatedly a
b820: 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63  ttempt to collec
b830: 74 20 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20  t garbage until
b840: 74 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d  the allotted num
b850: 62 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ber..      #
b860: 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e     of millisecon
b870: 64 73 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20  ds has elapsed.
b880: 20 41 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20   Always attempt
b890: 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61  to collect garba
b8a0: 67 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ge..      #
b8b0: 20 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e    at least once.
b8c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
b8d0: 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c 6f 63   set start [cloc
b8e0: 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20  k seconds]..
b8f0: 20 20 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72    set stop [expr
b900: 20 7b 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c   {$start + ($mil
b910: 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30  liseconds / 1000
b920: 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 64 6f 20  )}]....      do
b930: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
b940: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
b950: 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61  tempt to force a
b960: 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f   full garbage co
b970: 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52  llection now.  R
b980: 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20 20 20 20  eport any..
b990: 20 20 20 23 20 20 20 20 20 20 20 65 72 72 6f 72     #       error
b9a0: 20 74 68 61 74 20 69 73 20 65 6e 63 6f 75 6e 74   that is encount
b9b0: 65 72 65 64 20 69 66 20 77 65 20 66 61 69 6c 2e  ered if we fail.
b9c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
b9d0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
b9e0: 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47  {object invoke G
b9f0: 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79  C GetTotalMemory
ba00: 20 74 72 75 65 7d 20 65 72 72 6f 72 5d 7d 20 74   true} error]} t
ba10: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
ba20: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel ba30: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. ba40: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== ba50: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail ba60: 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 ed full garbage ba70: 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f collection, erro ba80: 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 r: " \.. ba90: 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f \n\t$erro
baa0: 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  r \n]..        }
bab0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
bac0: 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e  now [clock secon
bad0: 64 73 5d 0d 0a 20 20 20 20 20 20 7d 20 77 68 69  ds]..      } whi
bae0: 6c 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e  le {$start <=$n
baf0: 6f 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74  ow && $now <$st
bb00: 6f 70 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23  op}....      ###
bb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
bb50: 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20  ######....
bb60: 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65  if {[catch {obje
bb70: 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74  ct invoke GC Get
bb80: 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73  TotalMemory fals
bb90: 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d  e} result] == 0}
bba0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
bbb0: 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th bbc0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. bbd0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
bbe0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
bc00: 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  - memory in use
bc10: 62 79 20 74 68 65 20 43 4c 52 20 61 66 74 65 72  by the CLR after
bc20: 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22   collection... "
bc30: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
bc40: 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65    $result " byte bc50: 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d s\n"].. } bc60: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { bc70: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs bc80: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
bc90: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
bca0: 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
bcb0: 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74  G: failed to get
bcc0: 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67   CLR memory usag
bcd0: 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20  e, error: " \..
bce0: 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
bcf0: 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. bd00: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... bd10: 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 proc getSQLi bd20: 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 7b teHandleCounts { bd30: 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 channel {quiet bd40: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. bd50: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 set result [li bd60: 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 st].... if bd70: 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 {[haveConstraint bd80: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. bd90: 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 defineConstant bda0: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c .System.Data.SQL bdb0: 69 74 65 2e 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 ite.COUNT_HANDLE bdc0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. bdd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # bde0: 4e 4f 54 45 3a 20 41 64 64 20 65 61 63 68 20 63 NOTE: Add each c bdf0: 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 ritical handle c be00: 6f 75 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75 ount to the resu be10: 6c 74 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20 lting list... be20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. be30: 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69 foreach name [li be40: 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75 st connectionCou be50: 6e 74 20 73 74 61 74 65 6d 65 6e 74 43 6f 75 6e nt statementCoun be60: 74 20 62 61 63 6b 75 70 43 6f 75 6e 74 5d 20 7b t backupCount] { be70: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set be80: 76 61 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e value [object in be90: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non bea0: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. beb0: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D bec0: 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 ata.SQLite.Unsaf bed0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 24 eNativeMethods$
bee0: 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  name]....
bef0: 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} bf00: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. bf10: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
bf20: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
bf30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
bf40: 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c    "---- critical
bf50: 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22   handle count \"
bf60: 22 20 24 6e 61 6d 65 20 22 5c 22 20 69 73 20 22  " $name "\" is " bf70: 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20$value \n]..
bf80: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
bf90: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
bfa0: 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 20  sult $value.. bfb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } bfc0: 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65 74 7d elseif {!$quiet}
bfd0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
bfe0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
bff0: 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c 20 68  TE: The actual h
c000: 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 65  andle counts are
c010: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b 20   not available;
c020: 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d  therefore, just.
c030: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
c040: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
c050: 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20   list...
c060: 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  #..        tputs
c070: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- c080: 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 critical handle c090: 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 counts unavailab c0a0: 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a le\n".. }.. c0b0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
c0c0: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
c0d0: 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75 74 64  ..    proc shutd
c0e0: 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 6e  ownSQLite { chan
c0f0: 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 65  nel {force false
c100: 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20  } {quiet false}
c110: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
c120: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65      # NOTE: Make
c130: 20 73 75 72 65 20 74 68 61 74 20 53 51 4c 69 74   sure that SQLit
c140: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
c150: 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75  s completely shu
c160: 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20  tdown.  This..
c170: 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 75      #       is u
c180: 73 65 64 20 62 79 20 74 65 73 74 73 20 74 68 61  sed by tests tha
c190: 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 75  t change configu
c1a0: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61  ration options a
c1b0: 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20  nd/or those..
c1c0: 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20     #       that
c1d0: 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  need to make sur
c1e0: 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e 69  e logging is ini
c1f0: 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a  tialized (i.e. j
c200: 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 20  ust in case..
c210: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53     #       the S
c220: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
c230: 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c 69 7a  ry was initializ
c240: 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63 65 73  ed in the proces
c250: 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20  s prior to..
c260: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51    #       the SQ
c270: 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 65  LiteLog class be
c280: 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 74 75  ing able to setu
c290: 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 61  p its logging ca
c2a0: 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20  llback)...
c2b0: 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79  #       Normally
c2c0: 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e  , this should on
c2d0: 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20  ly be performed
c2e0: 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61  if SQLite is loa
c2f0: 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 23  ded and..      #
c300: 20 20 20 20 20 20 20 72 65 61 64 79 20 66 6f 72         ready for
c310: 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74   use by the test
c320: 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23   suite...      #
c330: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72  ..      if {$for c340: 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 ce || [isSQLiteR c350: 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 eady]} then {.. c360: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. c370: 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f # BUGFIX: Befo c380: 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e re calling the n c390: 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66 ative shutdown f c3a0: 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75 unction, make su c3b0: 72 65 20 62 6f 74 68 0d 0a 20 20 20 20 20 20 20 re both.. c3c0: 20 23 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 # of th c3d0: 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 e PRAGMA related c3e0: 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 directory names c3f0: 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 are freed... c400: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. c410: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 checkForSQLiteDi c420: 72 65 63 74 6f 72 69 65 73 20 24 63 68 61 6e 6e rectories$chann
c430: 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20  el true....
c440: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
c450: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
c460: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
c470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
c480: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
c490: 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
c4a0: 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20  eMethods \..
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
c4c0: 74 65 33 5f 73 68 75 74 64 6f 77 6e 7d 20 72 65  te3_shutdown} re
c4d0: 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sult] == 0} then
c4e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
c4f0: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then c500: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t c510: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
c520: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
c530: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
c540: 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  -- call sqlite3_
c550: 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b  shutdown()... ok
c560: 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  : " $result \n]. c570: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. c580: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. c590: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
c5a0: 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
c5b0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
c5c0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen c5d0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. c5e0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c c5f0: 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 all sqlite3_shut c600: 64 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a down()... error: c610: 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 " \n\t$result
c620: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
c630: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
c640: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
c650: 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53      proc reportS
c660: 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b  QLiteResources {
c670: 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20   channel {quiet
c680: 66 61 6c 73 65 7d 20 7b 63 6f 6c 6c 65 63 74 20  false} {collect
c690: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
c6a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
c6b0: 3a 20 53 6b 69 70 20 61 6c 6c 20 6f 75 74 70 75  : Skip all outpu
c6c0: 74 20 69 66 20 77 65 20 61 72 65 20 72 75 6e 6e  t if we are runn
c6d0: 69 6e 67 20 69 6e 20 22 71 75 69 65 74 22 20 6d  ing in "quiet" m
c6e0: 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ode...      #..
c6f0: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet c700: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. c710: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
c720: 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d   "---- current m
c730: 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20  emory in use by
c740: 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20  SQLite... "..
c750: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
c760: 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74   {[catch {object
c770: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
c780: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
c790: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
c7a0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
c7b0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c7c0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
c7d0: 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72     sqlite3_memor
c7e0: 79 5f 75 73 65 64 7d 20 6d 65 6d 6f 72 79 5d 20  y_used} memory]
c7f0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
c800: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie c810: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. c820: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
c830: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
c840: 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c  $memory " bytes\ c850: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. c860: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. c870: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. c880: 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 # NOTE: Maybe c890: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 the SQLite core c8a0: 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 library is unav c8b0: 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 ailable?.. c8c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set c8d0: 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d memory unknown. c8e0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! c8f0: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
c900: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
c910: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append c920: 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
c930: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
c940: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65     }....      se
c950: 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79  t result $memory c960: 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e ; # NOTE: Return c970: 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74 memory in-use t c980: 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d o our caller.... c990: 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 . if {!$qui
c9a0: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
c9b0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann c9c0: 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d el "---- maximum c9d0: 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 memory in use b c9e0: 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 y SQLite... ".. c9f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... ca00: 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 if {[catch {obje ca10: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags ca20: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys ca40: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. ca50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 UnsafeNativeMeth ca60: 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ods \.. ca70: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d sqlite3_mem ca80: 6f 72 79 5f 68 69 67 68 77 61 74 65 72 20 30 7d ory_highwater 0} ca90: 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 memory] == 0} t caa0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i cab0: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
cac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
cad0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap cae0: 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
caf0: 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20   " bytes\n"]..
cb00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
cb10: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
cb20: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
cb30: 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51  TE: Maybe the SQ
cb40: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
cb50: 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  y is unavailable
cb60: 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ?..        #..
cb70: 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79        set memory
cb80: 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20   unknown....
cb90: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} cba0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. cbb0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
cbc0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m cbd0: 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 emory \n].. cbe0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... cbf0: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c . if {$coll
cc00: 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ect} then {..
cc10: 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62       collectGarb
cc20: 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20  age $channel.. cc30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i cc40: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
cc50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
cc60: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- cc70: 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 current memory cc80: 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c in use by the CL cc90: 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d R... ".. }. cca0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca ccb0: 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f tch {object invo ccc0: 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 ke GC GetTotalMe ccd0: 6d 6f 72 79 20 66 61 6c 73 65 7d 20 6d 65 6d 6f mory false} memo cce0: 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ry] == 0} then { ccf0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s cd00: 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 tring is integer cd10: 20 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 -strict$memory
cd20: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
cd30: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet cd40: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. cd50: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
cd60: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
cd70: 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73   $memory " bytes cd80: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. cd90: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els cda0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 e {.. s cdb0: 65 74 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 et memory invali cdc0: 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 d.... i cdd0: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
cde0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
cdf0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ ce00: 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
ce10: 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
ce20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
ce30: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
ce40: 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f          set memo
ce50: 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20  ry unknown....
ce60: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie ce70: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. ce80: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
ce90: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
cea0: 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20  $memory \n].. ceb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. cec0: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return ced0: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a$result..    }..
cee0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63  ...    proc chec
cef0: 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74  kForSQLiteDirect
cf00: 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20  ories { channel
cf10: 7b 72 65 73 65 74 20 66 61 6c 73 65 7d 20 7d 20  {reset false} }
cf20: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
cf30: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
cf40: 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77  if the sqlite3_w
cf50: 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
cf60: 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  ry function is a
cf70: 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20  vailable...
cf80: 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20   #..      tputs
cf90: 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  $channel \.. cfa0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec cfb0: 6b 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f king for functio cfc0: 6e 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f n sqlite3_win32_ cfd0: 73 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e set_directory... cfe0: 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ".... #.. cff0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi d000: 73 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 s call to the sq d010: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ d020: 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 directory functi d030: 6f 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 20 20 on uses the.. d040: 20 20 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c # inval d050: 69 64 20 76 61 6c 75 65 20 30 20 66 6f 72 20 74 id value 0 for t d060: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e he first argumen d070: 74 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 t. This code is d080: 20 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 designed.. d090: 20 23 20 20 20 20 20 20 20 74 6f 20 63 68 65 63 # to chec d0a0: 6b 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 k if calling the d0b0: 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 function will r d0c0: 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f aise an exceptio d0d0: 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 n (i.e... # d0e0: 20 20 20 20 20 20 20 74 68 65 20 61 63 74 75 61 the actua d0f0: 6c 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 l result of the d100: 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f function does no d110: 74 20 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 t matter as long d120: 20 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 as no.. # d130: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 directory d140: 69 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 is changed)... d150: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if d160: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. d170: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object d180: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N d190: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. d1a0: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System d1b0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 .Data.SQLite.Uns d1c0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 afeNativeMethods d1d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. d1e0: 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f sqlite3_win32_ d1f0: 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20 set_directory 0 d200: 6e 75 6c 6c 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 null}] == 0} the d210: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. d220: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: d230: 43 61 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c 69 Calling the sqli d240: 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di d250: 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e rectory function d260: 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 does not.. d270: 20 20 20 23 20 20 20 20 20 20 20 63 61 75 73 65 # cause d280: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20 74 an exception; t d290: 68 65 72 65 66 6f 72 65 2c 20 69 74 20 6d 75 73 herefore, it mus d2a0: 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 28 t be available ( d2b0: 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 i.e... # d2c0: 20 20 20 20 20 20 65 76 65 6e 20 74 68 6f 75 67 even thoug d2d0: 68 20 69 74 20 73 68 6f 75 6c 64 20 72 65 74 75 h it should retu d2e0: 72 6e 20 61 20 66 61 69 6c 75 72 65 20 72 65 74 rn a failure ret d2f0: 75 72 6e 20 63 6f 64 65 20 69 6e 20 74 68 69 73 urn code in this d300: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # d310: 20 20 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 case)... d320: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 #.. add d330: 43 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 74 Constraint sqlit d340: 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir d350: 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 ectory.... d360: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
d370: 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20   yes\n....
d380: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
d390: 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61  OTE: Does our ca
d3a0: 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73  ller want to res
d3b0: 65 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69  et the directori
d3c0: 65 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  es?..        #..
d3d0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73          if {$res d3e0: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. d3f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. d400: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d # NOTE: Now m d410: 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74 ake sure the dat d420: 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 abase and tempor d430: 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 ary directories d440: 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 are.. # d450: 20 20 20 20 20 20 20 72 65 73 65 74 20 74 68 65 reset the d460: 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 ir default value d470: 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 s, which should d480: 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 be null for both d490: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 ... # d4a0: 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 Since the s d4b0: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set d4c0: 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 _directory funct d4d0: 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 ion is available d4e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 ,.. # d4f0: 20 20 20 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 use it... d500: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d510: 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e for {set in d520: 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c dex 1} {$index <
d530: 20 33 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d   3} {incr index}
d540: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
d550: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
d560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d570: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
d580: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
d590: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
d5a0: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
d5b0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
d5c0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
d5d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
d5e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77         sqlite3_w
d5f0: 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
d600: 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 7d 20  ry $index null} d610: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. d620: 20 20 20 20 20 20 20 72 65 73 75 6c 74 5d 20 3d result] = d630: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. d640: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs d650: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
d660: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
d670: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
d680: 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69   call sqlite3_wi
d690: 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
d6a0: 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20  y(" $index \.. d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 d6c0: 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 ", null)... ok: d6d0: 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 "$result \n]..
d6e0: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
d6f0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
d700: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe d710: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. d720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . d730: 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 "---- call sq d740: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ d750: 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 directory("$ind
d760: 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ex \..
d770: 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29          ", null)
d780: 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  ... error: " \n\
d790: 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  t $result \n].. d7a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. d7b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. d7c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el d7d0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp d7e0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c uts$channel no\
d7f0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n....        #..
d800: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
d810: 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20  Does our caller
d820: 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68  want to reset th
d830: 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20 20  e directories?
d840: 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20  This can only..
d850: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62         #       b
d860: 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53  e performed if S
d870: 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20  QLite is loaded
d880: 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73  and ready for us
d890: 65 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20  e by the test..
d8a0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
d8b0: 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  uite...        #
d8c0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72  ..        if {$r d8d0: 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69 74 eset && [isSQLit d8e0: 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d eReady]} then {. d8f0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. d900: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: d910: 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 Now make sure th d920: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 e database and t d930: 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f emporary directo d940: 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 ries are.. d950: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 # rese d960: 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 t their default d970: 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 values, which sh d980: 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 ould be null for d990: 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 both... d9a0: 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 # Since d9b0: 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 d9c0: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory d9d0: 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f function does no d9e0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 t.. # d9f0: 20 20 20 20 20 61 70 70 65 61 72 20 74 6f 20 62 appear to b da00: 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 65 e available, use da10: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 the associated da20: 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d PRAGMA commands. da30: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # da40: 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 instead... da50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. da60: 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 foreach dire da70: 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 ctory [list data da80: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 _store_directory da90: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 temp_store_dire daa0: 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 ctory] {.. dab0: 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 set sql [a dac0: 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d ppendArgs "PRAGM dad0: 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 A "$directory "
dae0: 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20   = \"\";"]....
daf0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
db00: 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c  atch {executeSql
db10: 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d   $sql} result] = db20: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. db30: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs db40: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
db50: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
db60: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
db70: 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20   execute PRAGMA
db80: 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e  " $directory ".. db90: 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 . ok: \"" \.. dba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
dbb0: 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20  result \"\n]..
dbc0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
dbd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
dbe0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel dbf0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 dc10: 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 "---- execute dc20: 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 PRAGMA "$direct
dc30: 6f 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a 20  ory "... error:
dc40: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
dc50: 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73         \n\t $res dc60: 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. dc70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. dc80: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. dc90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... dca0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE dcb0: 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 : Finally, show dcc0: 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 the current valu dcd0: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 e of the databas dce0: 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d e and temporary. dcf0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d dd00: 69 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69 irectories. Thi dd10: 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65 s can only be pe dd20: 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 rformed if SQLit dd30: 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 e is loaded.. dd40: 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 # and r dd50: 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 eady for use by dd60: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d the test suite.. dd70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. dd80: 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61 if {[isSQLiteRea dd90: 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 dy]} then {.. dda0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 foreach dir ddb0: 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 ectory [list dat ddc0: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 a_store_director ddd0: 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 y temp_store_dir dde0: 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 ectory] {.. ddf0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
de00: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
de10: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22  "---- checking "
de20: 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e   $directory "... de30: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 "].... de40: 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 set sql [append de50: 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 Args "PRAGMA "$
de60: 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d  directory \;]...
de70: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
de80: 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71  catch {executeSq
de90: 6c 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72  l $sql scalar} r dea0: 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the deb0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. dec0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
ded0: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a  [appendArgs "ok:
dee0: 20 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c   \"" $result \"\ def0: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 n].. } df00: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. df10: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
df20: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
df30: 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72  error: " \n\t $r df40: 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. df50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. df60: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. }.. df70: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c }..... proc l df80: 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 oadSQLiteTestSet df90: 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20 tings { channel dfa0: 7b 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69 {suffix ""} {qui dfb0: 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 et false} } {.. dfc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # dfd0: 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69 NOTE: Skip loadi dfe0: 6e 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 ng the settings dff0: 69 66 20 74 68 65 69 72 20 75 73 61 67 65 20 68 if their usage h e000: 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 as been disabled e010: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. e020: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi e030: 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 sts ::no(sqliteT e040: 65 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74 estSettings)]} t e050: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # e060: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE e070: 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65 : Load custom pe e080: 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 r-user and/or pe e090: 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 r-host test sett e0a0: 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ings now... e0b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if e0c0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : e0d0: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 :tcl_platform(us e0e0: 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 er)]} then {.. e0f0: 20 20 20 20 20 20 20 20 73 65 74 20 75 73 65 72 set user e100: 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName e110: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 [file join [get e120: 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d CommonDirectory] e130: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. e140: 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 [appendArgs se e150: 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e ttings$suffix .
e160: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d   $::tcl_platform e170: 28 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d (user) .eagle]]. e180: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if e190: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 75 {[file exists$u
e1a0: 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  serSettingsFileN
e1b0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
e1c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$e1d0: 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. e1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu e1f0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
e200: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
e220: 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75  -- loading per-u
e230: 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67  ser test setting
e240: 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20  s file \"" \..
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e260: 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c  $userSettingsFil e270: 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a eName \"...\n].. e280: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... e290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if e2a0: 7b 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c {[catch {uplevel e2b0: 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 1 [list source e2c0: 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c$userSettingsFil
e2d0: 65 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20  eName]} \..
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
e2f0: 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  rror]} then {..
e300: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
e310: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { e320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e330: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
e340: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
e350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e360: 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
e370: 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61  G: failed to loa
e380: 64 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 69  d per-user setti
e390: 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a  ngs file \"" \..
e3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e3b0: 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67      $userSetting e3c0: 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 sFileName "\", e e3d0: 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
e3e0: 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ror \n]..
e3f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
e400: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
e410: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
e420: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q e430: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. e440: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput e450: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
e460: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
e470: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
e480: 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e  - skipped loadin
e490: 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20  g per-user test
e4a0: 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
e4b0: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
e4c0: 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74         $userSett e4d0: 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 ingsFileName "\" e4e0: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex e4f0: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. e500: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. e510: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. e520: 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 23 .. ###### e530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ e540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ e550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ e560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ e570: 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.... if e580: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: e590: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 tcl_platform(hos e5a0: 74 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 t)]} then {.. e5b0: 20 20 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 set hostS e5c0: 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName e5d0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 [file join [getC e5e0: 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 ommonDirectory] e5f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. e600: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 [appendArgs set e610: 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 tings$suffix .
e620: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform( e630: 68 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a host) .eagle]].. e640: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { e650: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f [file exists$ho
e660: 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  stSettingsFileNa
e670: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
e680: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q e690: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput e6b0: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
e6c0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
e6e0: 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f  - loading per-ho
e6f0: 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  st test settings
e700: 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20   file \"" \..
e710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $e720: 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 hostSettingsFile e730: 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 Name \"...\n].. e740: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... e750: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { e760: 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 [catch {uplevel e770: 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 1 [list source$
e780: 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65  hostSettingsFile
e790: 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20  Name]} \..
e7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
e7b0: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
e7d0: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. e7e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . e7f0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
e800: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
e810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e820: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
e830: 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64  : failed to load
e840: 20 70 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e   per-host settin
e850: 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20  gs file \"" \..
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e870: 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73     $hostSettings e880: 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 FileName "\", er e890: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
e8a0: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
e8b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
e8c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
e8d0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
e8e0: 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu e8f0: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. e900: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs e910: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
e920: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
e930: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
e940: 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67   skipped loading
e950: 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73   per-host test s
e960: 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
e970: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
e980: 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69        $hostSetti e990: 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c ngsFileName "\", e9a0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 it does not exi e9b0: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 st\n"].. e9c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. e9d0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. e9e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... e9f0: 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 .. proc runSQ ea00: 4c 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 LiteTestPrologue ea10: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. ea20: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk ea30: 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 ip running our c ea40: 75 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 ustom prologue i ea50: 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 f the main one h ea60: 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 as been.. # ea70: 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d skipped.. ea80: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. ea90: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist eaa0: 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e s ::no(prologue. eab0: 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d eagle)]} then {. eac0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. ead0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 # NOTE: Load eae0: 20 74 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e the "before-con eaf0: 73 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d straints" custom eb00: 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 per-user and/or eb10: 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 per-host.. eb20: 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 # test eb30: 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 settings now... eb40: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. eb50: 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 uplevel 1 [lis eb60: 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 t loadSQLiteTest eb70: 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 Settings$::test
eb80: 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65  _channel .before
eb90: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
eba0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
ebb0: 53 6b 69 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e  Skip all System.
ebc0: 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61  Data.SQLite rela
ebd0: 74 65 64 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e  ted file handlin
ebe0: 67 20 28 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20  g (deleting,..
ebf0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
ec00: 70 79 69 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69  pying, and loadi
ec10: 6e 67 29 20 69 66 20 77 65 20 61 72 65 20 73 6f  ng) if we are so
ec20: 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20   instructed...
ec30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
ec40: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
ec50: 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69  ts ::no(sqliteFi
ec60: 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
ec70: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
ec80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
ec90: 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c  ip trying to del
eca0: 65 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66  ete any files if
ecb0: 20 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72   we are so instr
ecc0: 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  ucted...
ecd0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
ece0: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
ecf0: 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
ed00: 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  teFiles)]} then
ed10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
ed20: 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79  ryDeleteAssembly
ed30: 20 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 20 20   sqlite3.dll..
ed40: 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
ed50: 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 5f  Constraint file_
ed60: 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 0d 0a 20  sqlite3.dll....
ed70: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
ed80: 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 53 51 4c  leteAssembly SQL
ed90: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d  ite.Interop.dll.
eda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d  .            rem
edb0: 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 66 69  oveConstraint fi
edc0: 6c 65 5f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  le_SQLite.Intero
edd0: 70 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  p.dll....
ede0: 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73       tryDeleteAs
edf0: 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61  sembly System.Da
ee00: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20  ta.SQLite.dll..
ee10: 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76             remov
ee20: 65 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65  eConstraint file
ee30: 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  _System.Data.SQL
ee40: 69 74 65 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20  ite.dll....
ee50: 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
ee60: 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
ee70: 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
ee80: 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  .dll..
ee90: 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69    removeConstrai
eea0: 6e 74 20 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44  nt file_System.D
eeb0: 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e  ata.SQLite.Linq.
eec0: 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  dll..          }
eed0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
eee0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
eef0: 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74  E: Skip trying t
ef00: 6f 20 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 73  o copy any files
ef10: 20 69 66 20 77 65 20 61 72 65 20 73 6f 20 69 6e   if we are so in
ef20: 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20  structed...
ef30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
ef40: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
ef50: 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
ef60: 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  iteFiles)]} then
ef70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
ef80: 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20  tryCopyAssembly
ef90: 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 20 20 20  sqlite3.dll..
efa0: 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
efb0: 41 73 73 65 6d 62 6c 79 20 53 51 4c 69 74 65 2e  Assembly SQLite.
efc0: 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a 20 20 20  Interop.dll..
efd0: 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
efe0: 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
eff0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d  Data.SQLite.dll.
f000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
f010: 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 79 73  CopyAssembly Sys
f020: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
f030: 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  Linq.dll..
f040: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
f050: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
f060: 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79  # NOTE: Skip try
f070: 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79 20  ing to load any
f080: 66 69 6c 65 73 20 69 66 20 77 65 20 61 72 65 20  files if we are
f090: 73 6f 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a  so instructed...
f0a0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
f0b0: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
f0c0: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f  o exists ::no(lo
f0d0: 61 64 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d  adSqliteFiles)]}
f0e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
f0f0: 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65       tryLoadAsse
f100: 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
f110: 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20  .SQLite.dll..
f120: 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64           tryLoad
f130: 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
f140: 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
f150: 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  .dll..
f160: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  }....          #
f170: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
f180: 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20  TE: Skip trying
f190: 74 6f 20 64 65 6c 65 74 65 20 65 78 74 65 72 6e  to delete extern
f1a0: 61 6c 20 66 69 6c 65 73 20 69 66 20 77 65 20 61  al files if we a
f1b0: 72 65 20 73 6f 20 69 6e 73 74 72 75 63 74 65 64  re so instructed
f1c0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
f1d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
f1e0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
f1f0: 28 64 65 6c 65 74 65 53 71 6c 69 74 65 45 78 74  (deleteSqliteExt
f200: 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68  ernalFiles)]} th
f210: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
f220: 20 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64    tryDeleteBuild
f230: 46 69 6c 65 20 49 6e 73 74 61 6c 6c 65 72 2e 65  File Installer.e
f240: 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 0d 0a 20  xe.mda.config..
f250: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
f260: 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20 74 65  leteBuildFile te
f270: 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  st.exe.mda.confi
f280: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  g..            t
f290: 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c  ryDeleteBuildFil
f2a0: 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d  e testlinq.exe.m
f2b0: 64 61 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20  da.config..
f2c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
f2d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
f2e0: 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72   # NOTE: Skip tr
f2f0: 79 69 6e 67 20 74 6f 20 63 6f 70 79 20 65 78 74  ying to copy ext
f300: 65 72 6e 61 6c 20 66 69 6c 65 73 20 69 66 20 77  ernal files if w
f310: 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75 63  e are so instruc
f320: 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ted...
f330: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  #..          if
f340: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
f350: 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 45 78  :no(copySqliteEx
f360: 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74  ternalFiles)]} t
f370: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
f380: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
f390: 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74    # NOTE: Copy t
f3a0: 68 65 20 4d 44 41 20 63 6f 6e 66 69 67 75 72 61  he MDA configura
f3b0: 74 69 6f 6e 20 66 69 6c 65 20 66 6f 72 20 74 68  tion file for th
f3c0: 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 20 74 6f  e Eagle shell to
f3d0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..
f3e0: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20    #       build
f3f0: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79  output directory
f400: 3b 20 68 6f 77 65 76 65 72 2c 20 75 73 65 20 74  ; however, use t
f410: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6c  he name of the l
f420: 65 67 61 63 79 0d 0a 20 20 20 20 20 20 20 20 20  egacy..
f430: 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20     #       test
f440: 65 78 65 63 75 74 61 62 6c 65 2e 20 20 54 68 69  executable.  Thi
f450: 73 20 77 69 6c 6c 20 6d 61 6b 65 20 73 75 72 65  s will make sure
f460: 20 74 68 61 74 20 74 68 65 20 6c 65 67 61 63 79   that the legacy
f470: 20 74 65 73 74 73 0d 0a 20 20 20 20 20 20 20 20   tests..
f480: 20 20 20 20 23 20 20 20 20 20 20 20 72 75 6e 20      #       run
f490: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 73 65  with the same se
f4a0: 74 20 6f 66 20 4d 44 41 73 20 63 6f 6e 66 69 67  t of MDAs config
f4b0: 75 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  ured...
f4c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
f4d0: 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46    tryCopyBinaryF
f4e0: 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65  ile EagleShell.e
f4f0: 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e  xe.mda.config In
f500: 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e  staller.exe.mda.
f510: 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20  config..
f520: 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72      tryCopyBinar
f530: 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c  yFile EagleShell
f540: 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20  .exe.mda.config
f550: 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e  test.exe.mda.con
f560: 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fig..
f570: 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46 69   tryCopyBinaryFi
f580: 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78  le EagleShell.ex
f590: 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65 73  e.mda.config tes
f5a0: 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 6f  tlinq.exe.mda.co
f5b0: 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20  nfig..
f5c0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
f5d0: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
f5e0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
f5f0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel f600: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- f620: 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version f630: 20 6f 66 20 5c 22 73 71 6c 69 74 65 33 2e 64 6c of \"sqlite3.dl f640: 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 l\"... " \.. f650: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file f660: 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 version [getBina f670: 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 ryFileName sqlit f680: 65 33 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 e3.dll]] \n].. f690: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... f6a0: 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. f6b0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
f6c0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
f6d0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
f6e0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
f6f0: 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c  ile version of \
f700: 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e  "SQLite.Interop.
f710: 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20  dll\"... " \..
f720: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
f730: 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69  e version [getBi
f740: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c  naryFileName SQL
f750: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d  ite.Interop.dll]
f760: 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  ] \n]..        }
f770: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
f780: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
f790: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha f7a0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs f7b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. f7c0: 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver f7d0: 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d sion of \"System f7e0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll f7f0: 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 \"... " \.. f800: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 [file v f810: 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 ersion [getBinar f820: 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d yFileName System f830: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll f840: 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. f850: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat f860: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. f870: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
f880: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
f890: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
f8a0: 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
f8b0: 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65  rsion of \"Syste
f8c0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69  m.Data.SQLite.Li
f8d0: 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d  nq.dll\"... " \.
f8e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
f8f0: 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65  file version [ge
f900: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
f910: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
f920: 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 5c 6e  te.Linq.dll]] \n
f930: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ]..        }....
f940: 20 20 20 20 20 20 20 20 73 65 74 20 61 73 73 65          set asse
f950: 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63 74 20 69  mblies [object i
f960: 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61 69 6e 2e  nvoke AppDomain.
f970: 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e 20 47 65  CurrentDomain Ge
f980: 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d 0a 0d 0a  tAssemblies]....
f990: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66          object f
f9a0: 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c 79 20  oreach assembly
f9b0: 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d 0a 20  $assemblies {.. f9c0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 if {[st f9d0: 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b 53 79 73 ring match \{Sys f9e0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2a tem.Data.SQLite* f9f0: 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20 74 68 65$assembly]} the
fa00: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
fa10: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c fa20: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr fa30: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. fa40: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e "---- foun fa50: 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20 24 61 d assembly: "$a
fa60: 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 20  ssembly \n]..
fa70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
fa80: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
fa90: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
faa0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ fab0: 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. fac0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 "---- d fad0: 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 20 efine constants fae0: 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 for \"System.Dat faf0: 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d a.SQLite\"... ". fb00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if fb10: 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 {[catch {object fb20: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N fb30: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. fb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy fb50: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite fb60: 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 .SQLite3 DefineC fb70: 6f 6e 73 74 61 6e 74 73 7d 20 5c 0d 0a 20 20 20 onstants} \.. fb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d fb90: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 efineConstants] fba0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. fbb0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs fbc0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
fbd0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72  [appendArgs [for
fbe0: 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c  matList [lsort \
fbf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
fc00: 20 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e    $defineConstan fc10: 74 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 ts]] \n].. fc20: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. fc30: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs fc40: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
fc50: 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20  unknown\n..
fc60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
fc70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
fc80: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
fc90: 4e 6f 77 2c 20 77 65 20 6e 65 65 64 20 74 6f 20  Now, we need to
fca0: 6b 6e 6f 77 20 69 66 20 74 68 65 20 53 51 4c 69  know if the SQLi
fcb0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library
fcc0: 69 73 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20  is available..
fcd0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28 69        #       (i
fce0: 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 65 20  .e. because the
fcf0: 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79 20 53 79 73  managed-only Sys
fd00: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
fd10: 61 73 73 65 6d 62 6c 79 20 63 61 6e 0d 0a 20 20  assembly can..
fd20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f        #       lo
fd30: 61 64 20 77 69 74 68 6f 75 74 20 69 74 3b 20 68  ad without it; h
fd40: 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 6e 6f  owever, it canno
fd50: 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 73  t do anything us
fd60: 65 66 75 6c 20 77 69 74 68 6f 75 74 0d 0a 20 20  eful without..
fd70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74        #       it
fd80: 29 2e 20 20 49 66 20 77 65 20 61 72 65 20 75 73  ).  If we are us
fd90: 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f  ing the mixed-mo
fda0: 64 65 20 61 73 73 65 6d 62 6c 79 20 61 6e 64 20  de assembly and
fdb0: 77 65 20 61 6c 72 65 61 64 79 0d 0a 20 20 20 20  we already..
fdc0: 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 75 6e      #       foun
fdd0: 64 20 69 74 20 28 61 62 6f 76 65 29 2c 20 74 68  d it (above), th
fde0: 69 73 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73  is should always
fdf0: 20 73 75 63 63 65 65 64 2e 0d 0a 20 20 20 20 20   succeed...
fe00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
fe10: 65 63 6b 46 6f 72 53 51 4c 69 74 65 20 24 3a 3a  eckForSQLite $:: fe20: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a test_channel.... fe30: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. fe40: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check fe50: 20 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 the SQLite data fe60: 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 base and tempora fe70: 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 2e 0d ry directories.. fe80: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. fe90: 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 checkForSQLi fea0: 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a teDirectories$:
feb0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
fec0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
fed0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
fee0: 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  mpt to determine
fef0: 20 69 66 20 76 61 72 69 6f 75 73 20 63 6f 6d 70   if various comp
ff00: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
ff10: 20 6e 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 20   needed for..
ff20: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
ff30: 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65  t constraints we
ff40: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74  re enabled for t
ff50: 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  he managed assem
ff60: 62 6c 79 2e 20 20 54 68 65 72 65 0d 0a 20 20 20  bly.  There..
ff70: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65       #       are
ff80: 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69   some compile-ti
ff90: 6d 65 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20  me options that
ffa0: 6d 75 73 74 20 61 6c 73 6f 20 68 61 76 65 20 62  must also have b
ffb0: 65 65 6e 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20  een enabled..
ffc0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72       #       for
ffd0: 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73   the interop ass
ffe0: 65 6d 62 6c 79 20 69 6e 20 6f 72 64 65 72 20 74  embly in order t
fff0: 6f 20 62 65 20 65 66 66 65 63 74 69 76 65 2e 20  o be effective.
10000 20 46 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20   For those..
10010 20 20 20 20 23 20 20 20 20 20 20 20 6f 70 74 69      #       opti
10020 6f 6e 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20  ons, it will be
10030 61 73 73 75 6d 65 64 20 74 68 61 74 20 69 74 20  assumed that it
10040 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20  was enabled for
10050 74 68 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20  the interop..
10060 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73       #       ass
10070 65 6d 62 6c 79 20 69 66 20 69 74 20 77 61 73 20  embly if it was
10080 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20  enabled for the
10090 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
100a0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
100b0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 65        foreach de
100c0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69  fineConstant [li
100d0 73 74 20 43 48 45 43 4b 5f 53 54 41 54 45 20 43  st CHECK_STATE C
100e0 4f 55 4e 54 5f 48 41 4e 44 4c 45 20 49 4e 54 45  OUNT_HANDLE INTE
100f0 52 4f 50 5f 43 4f 44 45 43 20 5c 0d 0a 20 20 20  ROP_CODEC \..
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10120 20 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20    INTEROP_DEBUG
10130 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43  INTEROP_LEGACY_C
10140 4c 4f 53 45 20 5c 0d 0a 20 20 20 20 20 20 20 20  LOSE \..
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10160 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54               INT
10170 45 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50  EROP_LOG INTEROP
10180 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54  _EXTENSION_FUNCT
10190 49 4f 4e 53 20 5c 0d 0a 20 20 20 20 20 20 20 20  IONS \..
101a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
101b0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54               INT
101c0 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53  EROP_TEST_EXTENS
101d0 49 4f 4e 20 53 51 4c 49 54 45 5f 53 54 41 4e 44  ION SQLITE_STAND
101e0 41 52 44 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ARD \..
101f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10200 20 20 20 20 20 20 20 20 20 20 20 20 55 53 45 5f              USE_
10210 49 4e 54 45 52 4f 50 5f 44 4c 4c 5d 20 7b 0d 0a  INTEROP_DLL] {..
10220 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
10230 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
10240 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70  heck if the comp
10250 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option
10260 69 73 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65  is listed in the
10270 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 20   list of..
10280 20 20 20 20 23 20 20 20 20 20 20 20 22 64 65 66      #       "def
10290 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b  ine constants" k
102a0 65 70 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20  ept track of by
102b0 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65  the managed asse
102c0 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20  mbly...
102d0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   #..          ch
102e0 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69  eckForSQLiteDefi
102f0 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65  neConstant $::te 10300 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 st_channel$defi
10310 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20  neConstant..
10320 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
10330 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
10340 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75  TE: Check the cu
10350 72 72 65 6e 74 20 62 75 69 6c 64 20 79 65 61 72  rrent build year
10360 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68  .  Basically, th
10370 69 73 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20  is indicates..
10380 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68        #       wh
10390 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d  ich version of M
103a0 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69  SBuild and/or Vi
103b0 73 75 61 6c 20 53 74 75 64 69 6f 20 77 61 73 20  sual Studio was
103c0 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20  used to..
103d0 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65   #       compile
103e0 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69   the assembly bi
103f0 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73  naries under tes
10400 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
10410 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 10420 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 10430 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 10440 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 10450 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 10460 65 20 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20 e build year... 10470 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ".... set 10480 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 year [getBuildY 10490 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 ear].. ad 104a0 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 dConstraint [app 104b0 65 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65 61 endArgs buildYea 104c0 72 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 r$year]..
104d0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 104e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 104f0 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c 22 5c rgs \"$year \"\
10500 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
10510 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
10520 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65   Check the curre
10530 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75  nt build configu
10540 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68  ration.  This sh
10550 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20  ould normally..
10560 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62         #       b
10570 65 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22  e either "Debug"
10580 20 6f 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a   or "Release"...
10590 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
105a0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 105b0 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 105c0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch 105d0 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste 105e0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 m.Data.SQLite bu 105f0 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ild configuratio 10600 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 n... ".... 10610 20 20 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74 set configurat 10620 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e ion [getBuildCon 10630 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 figuration].. 10640 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai 10650 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 nt [appendArgs b 10660 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f uildConfiguratio 10670 6e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e n$configuration
10680 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  ]..        tputs
10690 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 106a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 [appendArgs \" 106b0 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c$configuration \
106c0 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "\n]....
106d0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
106e0 45 3a 20 54 72 79 20 74 6f 20 73 65 74 75 70 20  E: Try to setup
106f0 61 6e 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c  an interrupt cal
10700 6c 62 61 63 6b 20 75 73 69 6e 67 20 74 68 65 20  lback using the
10710 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72 0d  script debugger.
10720 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
10730 20 74 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 65   that will cance
10740 6c 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 65  l all SQL querie
10750 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 66 6f  s in progress fo
10760 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a  r all database..
10770 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
10780 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77  connections know
10790 6e 20 74 6f 20 74 68 69 73 20 69 6e 74 65 72 70  n to this interp
107a0 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  reter...
107b0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  #..        if {!
107c0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
107d0 6f 28 73 71 6c 69 74 65 49 6e 74 65 72 72 75 70  o(sqliteInterrup
107e0 74 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65  tCallback)]} the
107f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
10800 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43  etupDbInterruptC
10810 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f  allback $::test_ 10820 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f channel$::test_
10830 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  log..        }..
10840 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
10850 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
10860 63 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76  ck for the nativ
10870 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e  e runtime option
10880 2c 20 77 68 69 63 68 20 77 6f 75 6c 64 20 6d 65  , which would me
10890 61 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 20 20  an we are..
108a0 20 20 20 23 20 20 20 20 20 20 20 75 73 69 6e 67     #       using
108b0 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20   the mixed-mode
108c0 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20  assembly...
108d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
108e0 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74  eckForRuntimeOpt
108f0 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ion $::test_chan 10900 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 nel native.... 10910 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10920 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i 10930 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 f the test suite 10940 20 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68 should count th 10950 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e e number of conn 10960 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 ections.. 10970 20 23 20 20 20 20 20 20 20 22 6f 70 65 6e 65 64 # "opened 10980 22 20 61 6e 64 20 22 63 6c 6f 73 65 64 22 20 66 " and "closed" f 10990 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68 65 rom the pool whe 109a0 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 n determining if 109b0 20 61 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 a test.. 109c0 20 23 20 20 20 20 20 20 20 70 61 73 73 65 64 2e # passed. 109d0 20 20 44 69 73 61 62 6c 69 6e 67 20 74 68 69 73 Disabling this 109e0 20 62 65 68 61 76 69 6f 72 20 69 73 20 73 6f 6d behavior is som 109f0 65 74 69 6d 65 73 20 6e 65 63 65 73 73 61 72 79 etimes necessary 10a00 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20 (e.g... 10a10 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 74 # during t 10a20 68 65 20 72 65 6c 65 61 73 65 20 74 65 73 74 69 he release testi 10a30 6e 67 20 70 72 6f 63 65 73 73 29 20 62 65 63 61 ng process) beca 10a40 75 73 65 20 74 68 65 72 65 20 61 72 65 20 73 65 use there are se 10a50 76 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 veral.. # 10a60 20 20 20 20 20 20 20 74 65 73 74 73 20 74 68 61 tests tha 10a70 74 20 72 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f t rely on the "o 10a80 70 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 pened from pool" 10a90 20 63 6f 75 6e 74 20 62 65 69 6e 67 20 67 72 65 count being gre 10aa0 61 74 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 ater.. # 10ab0 20 20 20 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e than zero. 10ac0 20 20 54 68 65 73 65 20 74 65 73 74 73 20 6d 61 These tests ma 10ad0 79 20 66 61 69 6c 20 64 75 65 20 74 6f 20 74 68 y fail due to th 10ae0 65 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 e non-determinis 10af0 74 69 63 0d 0a 20 20 20 20 20 20 20 20 23 20 20 tic.. # 10b00 20 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f 66 behavior of 10b10 20 74 68 65 20 43 4c 52 20 47 43 2c 20 65 76 65 the CLR GC, eve 10b20 6e 20 77 68 65 6e 20 74 68 65 72 65 20 69 73 20 n when there is 10b30 6e 6f 20 62 75 67 20 69 6e 20 74 68 65 20 63 6f no bug in the co 10b40 64 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 de.. # 10b50 20 20 20 20 62 65 69 6e 67 20 74 65 73 74 65 64 being tested 10b60 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 10b70 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 checkForRu 10b80 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 ntimeOption$::t
10b90 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f  est_channel noPo
10ba0 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20  olCounts....
10bb0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
10bc0 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68   NOTE: Report th
10bd0 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 65  e resource usage
10be0 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e   prior to runnin
10bf0 67 20 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20  g any tests...
10c00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10c10 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73   reportSQLiteRes
10c20 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63  ources $::test_c 10c30 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 hannel.... 10c40 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 10c50 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 61 63 OTE: Show the ac 10c60 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73 74 72 tive test constr 10c70 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 aints... 10c80 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 10c90 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
10ca0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d   [appendArgs "--
10cb0 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a 20  -- constraints:
10cc0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
10cd0 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73   [formatList [ls
10ce0 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72 61 69  ort [getConstrai
10cf0 6e 74 73 5d 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20  nts]]] \n]....
10d00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10d10 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68   # NOTE: Save th
10d20 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e  e test constrain
10d30 74 73 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  ts for use by th
10d40 72 65 61 64 73 20 63 72 65 61 74 65 64 20 69 6e  reads created in
10d50 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23   this..        #
10d60 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69         applicati
10d70 6f 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73  on domain.  This
10d80 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 62 65   is necessary be
10d90 63 61 75 73 65 20 61 6c 6c 20 74 68 65 20 45 61  cause all the Ea
10da0 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  gle..        #
10db0 20 20 20 20 20 22 74 65 73 74 20 63 6f 6e 74 65       "test conte
10dc0 78 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  xt" information
10dd0 69 73 20 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a  is per-thread...
10de0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10df0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
10e00 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73  ists ::test_cons
10e10 74 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b  traints]} then {
10e20 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
10e30 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e  ::test_constrain
10e40 74 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74  ts $::eagle_test 10e50 73 28 63 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a s(constraints).. 10e60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 10e70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 10e80 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 # NOTE: Load the 10e90 20 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 61 69 "after-constrai 10ea0 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d nts" custom per- 10eb0 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d user and/or per- 10ec0 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 host.. # 10ed0 20 20 20 20 20 20 74 65 73 74 20 73 65 74 74 69 test setti 10ee0 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ngs now... 10ef0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c #.. upl 10f00 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 evel 1 [list loa 10f10 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 dSQLiteTestSetti 10f20 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ngs$::test_chan
10f30 6e 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20  nel .after]....
10f40 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10f50 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77    # NOTE: Show w
10f60 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63  hen our tests ac
10f70 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f  tually began (no
10f80 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  w)...        #..
10f90 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 10fa0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 10fb0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 10fc0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 "---- S 10fd0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 10fe0 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 74 e tests began at 10ff0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 11000 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 [clock format 11010 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d [clock seconds]] 11020 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 \n].. }.. 11030 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 11040 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 c runSQLiteTestE 11050 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 pilogue {} {.. 11060 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 11070 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e OTE: Skip runnin 11080 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 69 g our custom epi 11090 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 logue if the mai 110a0 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a n one has been.. 110b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b # sk 110c0 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d ipped... #. 110d0 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 . if {![inf 110e0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 o exists ::no(ep 110f0 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 ilogue.eagle)]} 11100 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 11110 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 11120 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 E: Show when our 11130 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 tests actually 11140 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 ended (now)... 11150 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 11160 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
11170 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
11180 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
11190 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44    "---- System.D
111a0 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73  ata.SQLite tests
111b0 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a 20   ended at " \..
111c0 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63             [cloc
111d0 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20  k format [clock
111e0 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d  seconds]] \n]...
111f0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
11200 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 65      # BUGFIX: Be
11210 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 74 68  fore checking th
11220 65 20 66 69 6e 61 6c 20 72 65 73 6f 75 72 63 65  e final resource
11230 73 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69  s in use by SQLi
11240 74 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20  te, make..
11250 20 20 23 20 20 20 20 20 20 20 20 20 73 75 72 65    #         sure
11260 20 62 6f 74 68 20 6f 66 20 74 68 65 20 50 52 41   both of the PRA
11270 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65  GMA related dire
11280 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20  ctory names are
11290 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  freed...
112a0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  #..        check
112b0 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f  ForSQLiteDirecto
112c0 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ries $::test_cha 112d0 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 nnel true.... 112e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 112f0 23 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 65 70 # NOTE: Also rep 11300 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 ort the resource 11310 20 75 73 61 67 65 20 61 66 74 65 72 20 72 75 6e usage after run 11320 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d ning the tests.. 11330 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 11340 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 reportSQLite 11350 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 Resources$::tes
11360 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20  t_channel..
11370 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
11380 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
11390 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113c0 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20  #############..
113d0 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
113e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
113f0 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e 4c 59 20   END Eagle ONLY
11400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
11420 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23      ############
11430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
11460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
11470 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23  .  }....  #..  #
11480 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the
11490 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69 72 65  name of the dire
114a0 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  ctory containing
114b0 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 23   this file...  #
114c0 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65  ..  if {![info e
114d0 78 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64  xists ::common_d
114e0 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20  irectory]} then
114f0 7b 0d 0a 20 20 20 20 73 65 74 20 3a 3a 63 6f 6d  {..    set ::com
11500 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66  mon_directory [f
11510 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66  ile dirname [inf
11520 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d  o script]]..  }.
11530 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45  ...  #..  # NOTE
11540 3a 20 50 72 6f 76 69 64 65 20 74 68 65 20 53 79  : Provide the Sy
11550 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
11560 20 74 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f   test package to
11570 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
11580 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67  ...  #..  packag
11590 65 20 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d  e provide System
115a0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73  .Data.SQLite.Tes
115b0 74 20 31 2e 30 0d 0a 7d 0d 0a                    t 1.0..}..