System.Data.SQLite
Hex Artifact Content
Not logged in

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 20 6f 6e 0d 0a 20 20 20  er (e.g. on..
03a0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 63     #       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 61 64 64 65 64 2e 20 20 49 66 been added. If 15e0: 20 73 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20 20 so, use the.. 15f0: 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 # dire 1600: 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6d 69 ctory for the mi 1610: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 1620: 79 20 28 61 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 y (a.k.a. the na 1630: 74 69 76 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 tive interop.. 1640: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 # asse 1650: 6d 62 6c 79 29 2e 20 20 54 6f 20 65 6e 61 62 6c mbly). To enabl 1660: 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 e this option vi 1670: 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 a the command li 1680: 6e 65 2c 20 65 6e 74 65 72 20 61 0d 0a 20 20 20 ne, enter a.. 1690: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 # comma 16a0: 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e nd similar to on 16b0: 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 e of the followi 16c0: 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c ng (all on one l 16d0: 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a ine):.. #.. 16e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea 16f0: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e gleShell.exe -in 1700: 69 74 69 61 6c 69 7a 65 20 2d 72 75 6e 74 69 6d itialize -runtim 1710: 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a eOption native.. 1720: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 1730: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 1740: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 all.eagle.. 1750: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 1760: 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 To enable this 1770: 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 option via the 1780: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72 69 command line pri 1790: 6f 72 20 74 6f 20 74 68 65 20 22 62 65 74 61 20 or to the "beta 17a0: 31 36 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 16".. # 17b0: 20 20 20 72 65 6c 65 61 73 65 20 6f 66 20 45 61 release of Ea 17c0: 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 gle, the followi 17d0: 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 ng command must 17e0: 62 65 20 75 73 65 64 20 69 6e 73 74 65 61 64 0d be used instead. 17f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28 . # ( 1800: 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 also all on one 1810: 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d line):.. #. 1820: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 1830: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 agleShell.exe -i 1840: 6e 69 74 69 61 6c 69 7a 65 20 2d 70 6f 73 74 49 nitialize -postI 1850: 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 nitialize.. 1860: 20 23 20 20 20 20 20 20 20 20 20 22 6f 62 6a 65 # "obje 1870: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 ct invoke Interp 1880: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 reter.GetActive 1890: 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e AddRuntimeOption 18a0: 20 6e 61 74 69 76 65 22 0d 0a 20 20 20 20 20 20 native".. 18b0: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 # -file 18c0: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 .\path\to\all.ea 18d0: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 gle.. #.. 18e0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 18f0: 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 64 69 72 ists ::build_dir 1900: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 ectory] && \.. 1910: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 1920: 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f length$::build_
1930: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
1940: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1950: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1960: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
1970: 6f 66 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  of the build dir
1980: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20  ectory has been
1990: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20  overridden;..
19a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
19b0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76  refore, use it v
19c0: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20  erbatim...
19d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
19e0: 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72  urn $::build_dir 19f0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } 1a00: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1a10: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1a20: 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 E: Figure out th 1a30: 65 20 62 75 69 6c 64 20 62 61 73 65 20 64 69 72 e build base dir 1a40: 65 63 74 6f 72 79 2e 20 20 54 68 69 73 20 77 69 ectory. This wi 1a50: 6c 6c 20 62 65 20 74 68 65 20 64 69 72 65 63 74 ll be the direct 1a60: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ory.. # 1a70: 20 20 20 20 20 74 68 61 74 20 63 6f 6e 74 61 69 that contai 1a80: 6e 73 20 74 68 65 20 61 63 74 75 61 6c 20 62 75 ns the actual bu 1a90: 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 ild output direc 1aa0: 74 6f 72 79 20 28 65 2e 67 2e 20 22 62 69 6e 22 tory (e.g. "bin" 1ab0: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 1ac0: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 1ad0: 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f exists ::build_ 1ae0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 1af0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 1b00: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 1b10: 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64$::build_base_d
1b20: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74  irectory] > 0} t
1b30: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1b40: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
1b50: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
1b60: 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20  on of the build
1b70: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 68  base directory h
1b80: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
1b90: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  en;..          #
1ba0: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65         therefore
1bb0: 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69  , use it verbati
1bc0: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  m...          #.
1bd0: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70  .          set p
1be0: 61 74 68 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73  ath $::build_bas 1bf0: 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 e_directory.. 1c00: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 1c10: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f info exists ::co 1c20: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 mmon_directory] 1c30: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 1c40: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 1c50: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63$::common_direc
1c60: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tory] > 0} then
1c70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
1c80: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
1c90: 3a 20 4e 65 78 74 2c 20 66 61 6c 6c 62 61 63 6b  : Next, fallback
1ca0: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64   to the parent d
1cb0: 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20  irectory of the
1cc0: 6f 6e 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a  one containing..
1cd0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1ce0: 20 20 74 68 69 73 20 66 69 6c 65 20 28 69 2e 65    this file (i.e
1cf0: 2e 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22  . "common.eagle"
1d00: 29 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e  ), if available.
1d10: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1d20: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74           set pat
1d30: 68 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  h [file dirname
1d40: 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74  $::common_direct 1d50: 6f 72 79 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 ory].. } 1d60: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1d70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1d80: 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 NOTE: Finally, 1d90: 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 fallback to the 1da0: 70 61 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 parent directory 1db0: 20 6f 66 20 74 68 65 20 45 61 67 6c 65 54 65 73 of the EagleTes 1dc0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 t.. # 1dd0: 20 20 20 20 20 70 61 74 68 2e 20 20 54 68 65 20 path. The 1de0: 45 61 67 6c 65 54 65 73 74 20 70 61 63 6b 61 67 EagleTest packag 1df0: 65 20 67 75 61 72 61 6e 74 65 65 73 20 74 68 61 e guarantees tha 1e00: 74 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 0d t this variable. 1e10: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 1e20: 20 20 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 will be set t 1e30: 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 o the directory 1e40: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 containing the f 1e50: 69 72 73 74 20 66 69 6c 65 20 74 6f 0d 0a 20 20 irst file to.. 1e60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1e70: 65 78 65 63 75 74 65 20 74 68 65 20 5b 72 75 6e execute the [run 1e80: 54 65 73 74 50 72 6f 6c 6f 67 75 65 5d 20 73 63 TestPrologue] sc 1e90: 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f ript library pro 1ea0: 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 cedure... 1eb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1ec0: 73 65 74 20 70 61 74 68 20 5b 66 69 6c 65 20 64 set path [file d 1ed0: 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d irname$::path].
1ee0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1ef0: 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75        if {[hasRu
1f00: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
1f10: 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ve]} then {..
1f20: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66         return [f
1f30: 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 62  ile join $path b 1f40: 69 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 in [getBuildYear 1f50: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 1f60: 20 20 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 [machineToPla 1f70: 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 tform$::tcl_pla
1f80: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 20  tform(machine)]
1f90: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1fa0: 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67   [getBuildConfig
1fb0: 75 72 61 74 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20  uration]]..
1fc0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1fd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66         return [f
1fe0: 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 62  ile join $path b 1ff0: 69 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 in [getBuildYear 2000: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 2010: 20 20 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 [getBuildConf 2020: 69 67 75 72 61 74 69 6f 6e 5d 20 62 69 6e 5d 0d iguration] bin]. 2030: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 2040: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 2050: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 proc getBuild 2060: 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e FileName { fileN 2070: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ame } {.. # 2080: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 2090: 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 Returns the spec 20a0: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 ified file name 20b0: 61 73 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f as if it were lo 20c0: 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 cated in the.. 20d0: 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c # buil 20e0: 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 d directory, dis 20f0: 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 carding any dire 2100: 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f ctory informatio 2110: 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 n present.. 2120: 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 # in the 2130: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f file name as pro 2140: 76 69 64 65 64 20 62 79 20 74 68 65 20 63 61 6c vided by the cal 2150: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 2160: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 2170: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a e nativename \.. 2180: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 2190: 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 69 join [getBuildDi 21a0: 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 rectory] [file t 21b0: 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d ail$fileName]]]
21c0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
21d0: 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 44 69  proc getBinaryDi
21e0: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
21f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
2200: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
2210: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the
2220: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where
2230: 74 68 65 20 74 65 73 74 20 61 70 70 6c 69 63 61  the test applica
2240: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
2250: 20 20 20 20 69 74 73 65 6c 66 20 28 69 2e 65 2e      itself (i.e.
2260: 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c   the Eagle shell
2270: 29 20 69 73 20 6c 6f 63 61 74 65 64 2e 20 20 54  ) is located.  T
2280: 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64  his will be used
2290: 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20   as..      #
22a0: 20 20 20 74 68 65 20 64 65 73 74 69 6e 61 74 69     the destinati
22b0: 6f 6e 20 66 6f 72 20 74 68 65 20 63 6f 70 69 65  on for the copie
22c0: 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  d System.Data.SQ
22d0: 4c 69 74 65 20 6e 61 74 69 76 65 20 61 6e 64 0d  Lite native and.
22e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d  .      #       m
22f0: 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65  anaged assemblie
2300: 73 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20  s (i.e. because
2310: 74 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74  this is one of t
2320: 68 65 20 66 65 77 20 70 6c 61 63 65 73 0d 0a 20  he few places..
2330: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 65       #       whe
2340: 72 65 20 74 68 65 20 43 4c 52 20 77 69 6c 6c 20  re the CLR will
2350: 61 63 74 75 61 6c 6c 79 20 66 69 6e 64 20 61 6e  actually find an
2360: 64 20 6c 6f 61 64 20 74 68 65 6d 20 70 72 6f 70  d load them prop
2370: 65 72 6c 79 29 2e 0d 0a 20 20 20 20 20 20 23 0d  erly)...      #.
2380: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
2390: 20 65 78 69 73 74 73 20 3a 3a 62 69 6e 61 72 79   exists ::binary
23a0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c  _directory] && \
23b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
23c0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 69  ing length $::bi 23d0: 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 nary_directory] 23e0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 23f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2400: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 2410: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 69 6e 61 tion of the bina 2420: 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 ry directory has 2430: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e been overridden 2440: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 2450: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 2460: 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a e it verbatim... 2470: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2480: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 69 6e return$::bin
2490: 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20  ary_directory..
24a0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
24b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69         return [i
24c0: 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20  nfo binary]..
24d0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
24e0: 20 20 20 20 70 72 6f 63 20 67 65 74 42 69 6e 61      proc getBina
24f0: 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c  ryFileName { fil
2500: 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20  eName } {..
2510: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
2520: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70  : Returns the sp
2530: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d  ecified file nam
2540: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20  e as if it were
2550: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a  located in the..
2560: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 69        #       bi
2570: 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 2c 20  nary directory,
2580: 64 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20 64  discarding any d
2590: 69 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61  irectory informa
25a0: 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20  tion present..
25b0: 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74      #       in t
25c0: 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20  he file name as
25d0: 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20  provided by the
25e0: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23  caller...      #
25f0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
2600: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
2610: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69  \..          [fi
2620: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61  le join [getBina
2630: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69  ryDirectory] [fi
2640: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d  le tail $fileNam 2650: 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a e]]].. }..... 2660: 20 20 20 20 70 72 6f 63 20 67 65 74 44 61 74 61 proc getData 2670: 62 61 73 65 44 69 72 65 63 74 6f 72 79 20 7b 7d baseDirectory {} 2680: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 2690: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 26a0: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e procedure return 26b0: 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 s the directory 26c0: 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20 64 where the test d 26d0: 61 74 61 62 61 73 65 73 0d 0a 20 20 20 20 20 20 atabases.. 26e0: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 # should b 26f0: 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 e located. By d 2700: 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 efault, this jus 2710: 74 20 75 73 65 73 20 74 68 65 20 74 65 6d 70 6f t uses the tempo 2720: 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 rary.. # 2730: 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f directory co 2740: 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 68 69 nfigured for thi 2750: 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 s system... 2760: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 2770: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 nfo exists ::dat 2780: 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d abase_directory] 2790: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 27a0: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 27b0: 24 3a 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65$::database_dire
27c0: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e  ctory] > 0} then
27d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
27e0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
27f0: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74  he location of t
2800: 68 65 20 64 61 74 61 62 61 73 65 20 64 69 72 65  he database dire
2810: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f  ctory has been o
2820: 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20  verridden;..
2830: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72      #       ther
2840: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a  efore, use it...
2850: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2860: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20     return [file
2870: 6e 6f 72 6d 61 6c 69 7a 65 20 24 3a 3a 64 61 74  normalize $::dat 2880: 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d abase_directory] 2890: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 28a0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 28b0: 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61 [getTemporaryPa 28c0: 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 th].. }.. 28d0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 28e0: 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50 72 65 getAppDomainPre 28f0: 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69 78 20 amble { {prefix 2900: 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22 7d 20 ""} {suffix ""} 2910: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 2920: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 2930: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur 2940: 6e 73 20 61 20 74 65 73 74 20 73 65 74 75 70 20 ns a test setup 2950: 73 63 72 69 70 74 20 73 75 69 74 61 62 6c 65 20 script suitable 2960: 66 6f 72 20 65 76 61 6c 75 61 74 69 6f 6e 0d 0a for evaluation.. 2970: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79 # by 2980: 20 61 20 74 65 73 74 20 69 6e 74 65 72 70 72 65 a test interpre 2990: 74 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 61 ter created in a 29a0: 6e 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 n isolated appli 29b0: 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2e 0d 0a cation domain... 29c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 54 68 # Th 29d0: 65 20 73 63 72 69 70 74 20 62 65 69 6e 67 20 72 e script being r 29e0: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 eturned will be 29f0: 73 75 72 72 6f 75 6e 64 65 64 20 62 79 20 74 68 surrounded by th 2a00: 65 20 70 72 65 66 69 78 20 61 6e 64 0d 0a 20 20 e prefix and.. 2a10: 20 20 20 20 23 20 20 20 20 20 20 20 73 75 66 66 # suff 2a20: 69 78 20 22 73 63 72 69 70 74 20 66 72 61 67 6d ix "script fragm 2a30: 65 6e 74 73 22 20 73 70 65 63 69 66 69 65 64 20 ents" specified 2a40: 62 79 20 74 68 65 20 63 61 6c 6c 65 72 2c 20 69 by the caller, i 2a50: 66 20 61 6e 79 2e 20 20 54 68 65 0d 0a 20 20 20 f any. The.. 2a60: 20 20 20 23 20 20 20 20 20 20 20 65 6e 74 69 72 # entir 2a70: 65 20 73 63 72 69 70 74 20 62 65 69 6e 67 20 72 e script being r 2a80: 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 eturned will be 2a90: 73 75 62 73 74 69 74 75 74 65 64 20 76 69 61 20 substituted via 2aa0: 5b 73 75 62 73 74 5d 2c 20 69 6e 0d 0a 20 20 20 [subst], in.. 2ab0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 63 # the c 2ac0: 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20 63 61 ontext of the ca 2ad0: 6c 6c 65 72 2e 20 20 54 68 69 73 20 73 74 65 70 ller. This step 2ae0: 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 73 6f is necessary so 2af0: 20 74 68 61 74 20 73 6f 6d 65 0d 0a 20 20 20 20 that some.. 2b00: 20 20 23 20 20 20 20 20 20 20 6c 69 6d 69 74 65 # limite 2b10: 64 20 63 6f 6e 74 65 78 74 20 69 6e 66 6f 72 6d d context inform 2b20: 61 74 69 6f 6e 2c 20 70 72 69 6d 61 72 69 6c 79 ation, primarily 2b30: 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65 20 related to the 2b40: 74 65 73 74 20 62 75 69 6c 64 0d 0a 20 20 20 20 test build.. 2b50: 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 # direct 2b60: 6f 72 79 2c 20 63 61 6e 20 62 65 20 74 72 61 6e ory, can be tran 2b70: 73 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 69 sferred to the i 2b80: 6e 74 65 72 70 72 65 74 65 72 20 69 6e 20 74 68 nterpreter in th 2b90: 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20 20 20 20 e isolated.. 2ba0: 20 20 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 # applic 2bb0: 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2c 20 6d 61 ation domain, ma 2bc0: 6b 69 6e 67 20 69 74 20 61 62 6c 65 20 74 6f 20 king it able to 2bd0: 73 75 63 63 65 73 73 66 75 6c 6c 79 20 72 75 6e successfully run 2be0: 20 74 65 73 74 73 20 74 68 61 74 0d 0a 20 20 20 tests that.. 2bf0: 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69 # requi 2c00: 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f re one or more o 2c10: 66 20 74 68 65 20 66 69 6c 65 73 20 69 6e 20 74 f the files in t 2c20: 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f he build directo 2c30: 72 79 2e 20 20 43 61 6c 6c 65 72 73 0d 0a 20 20 ry. Callers.. 2c40: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 74 # to t 2c50: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 73 68 his procedure sh 2c60: 6f 75 6c 64 20 6b 65 65 70 20 69 6e 20 6d 69 6e ould keep in min 2c70: 64 20 74 68 61 74 20 74 68 65 20 74 65 73 74 20 d that the test 2c80: 73 63 72 69 70 74 20 62 65 69 6e 67 0d 0a 20 20 script being.. 2c90: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75 # retu 2ca0: 72 6e 65 64 20 63 61 6e 6e 6f 74 20 6f 6e 6c 79 rned cannot only 2cb0: 20 72 65 6c 79 20 6f 6e 20 61 6e 79 20 73 63 72 rely on any scr 2cc0: 69 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63 ipt library proc 2cd0: 65 64 75 72 65 73 20 6e 6f 74 0d 0a 20 20 20 20 edures not.. 2ce0: 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 # includ 2cf0: 65 64 20 69 6e 20 74 68 65 20 45 61 67 6c 65 2e ed in the Eagle. 2d00: 4c 69 62 72 61 72 79 20 70 61 63 6b 61 67 65 20 Library package 2d10: 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61 67 6c (i.e. "init.eagl 2d20: 65 22 29 2e 20 20 41 6c 73 6f 2c 0d 0a 20 20 20 e"). Also,.. 2d30: 20 20 20 23 20 20 20 20 20 20 20 61 6c 6c 20 76 # all v 2d40: 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 ariable referenc 2d50: 65 73 20 61 6e 64 20 61 6c 6c 20 22 6e 65 73 74 es and all "nest 2d60: 65 64 22 20 63 6f 6d 6d 61 6e 64 73 20 28 69 2e ed" commands (i. 2d70: 65 2e 20 74 68 6f 73 65 20 69 6e 0d 0a 20 20 20 e. those in.. 2d80: 20 20 20 23 20 20 20 20 20 20 20 73 71 75 61 72 # squar 2d90: 65 20 62 72 61 63 6b 65 74 73 29 2c 20 75 6e 6c e brackets), unl 2da0: 65 73 73 20 74 68 65 79 20 61 72 65 20 73 70 65 ess they are spe 2db0: 63 69 61 6c 6c 79 20 71 75 6f 74 65 64 2c 20 77 cially quoted, w 2dc0: 69 6c 6c 20 65 6e 64 20 75 70 0d 0a 20 20 20 20 ill end up.. 2dd0: 20 20 23 20 20 20 20 20 20 20 62 65 69 6e 67 20 # being 2de0: 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68 65 evaluated in the 2df0: 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 20 context of the 2e00: 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70 72 65 calling interpre 2e10: 74 65 72 20 61 6e 64 20 6e 6f 74 0d 0a 20 20 20 ter and not.. 2e20: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 74 # the t 2e30: 65 73 74 20 69 6e 74 65 72 70 72 65 74 65 72 20 est interpreter 2e40: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 20 69 created in the i 2e50: 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 solated applicat 2e60: 69 6f 6e 20 64 6f 6d 61 69 6e 2e 0d 0a 20 20 20 ion domain... 2e70: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 2e80: 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c rn [uplevel 1 [l 2e90: 69 73 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e ist subst [appen 2ea0: 64 41 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d dArgs$prefix {.
2eb0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
2ec0: 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e  sRuntimeOption n
2ed0: 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ative]} then {..
2ee0: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2ef0: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
2f00: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 41 64  ter.GetActive Ad
2f10: 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e  dRuntimeOption n
2f20: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 7d  ative..        }
2f30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
2f40: 3a 3a 70 61 74 68 20 7b 24 3a 3a 70 61 74 68 7d  ::path {$::path} 2f50: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a .. set :: 2f60: 74 65 73 74 5f 79 65 61 72 20 7b 5b 67 65 74 42 test_year {[getB 2f70: 75 69 6c 64 59 65 61 72 5d 7d 0d 0a 20 20 20 20 uildYear]}.. 2f80: 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 set ::test_c 2f90: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 5b 67 onfiguration {[g 2fa0: 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 etBuildConfigura 2fb0: 74 69 6f 6e 5d 7d 0d 0a 20 20 20 20 20 20 7d 20 tion]}.. } 2fc0: 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 20 20$suffix]]]..
2fd0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
2fe0: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
2ff0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a  { fileName } {..
3000: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
3010: 20 4e 4f 54 45 3a 20 49 66 20 77 65 20 63 61 6e   NOTE: If we can
3020: 6e 6f 74 20 63 6f 70 79 20 74 68 65 20 61 73 73  not copy the ass
3030: 65 6d 62 6c 79 20 74 68 65 6e 20 69 74 20 69 73  embly then it is
3040: 20 70 72 6f 62 61 62 6c 79 20 61 6c 72 65 61 64   probably alread
3050: 79 20 6c 6f 61 64 65 64 2e 0d 0a 20 20 20 20 20  y loaded...
3060: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f   #..      set so
3070: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65  urceFileName [ge
3080: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24  tBuildFileName $3090: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... 30a0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex 30b0: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 ists$sourceFile
30c0: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
30d0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 30e0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 30f0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 3100: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk 3110: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 75 ipped copying bu 3120: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 73 6f ild file \""$so
3130: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
3140: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
3150: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
3160: 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  st\n"]....
3170: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20    return..
3180: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74  }....      set t
3190: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67  argetFileName [g
31a0: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
31b0: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 31c0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 31d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c {.. fil 31e0: 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 e copy -force$s
31f0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74  ourceFileName $t 3200: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 7d 5d 20 argetFileName}] 3210: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 3220: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
3230: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
3240: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
3250: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70         "---- cop
3260: 69 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 66  ied build file f
3270: 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46  rom \"" $sourceF 3280: 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c ileName "\" to \ 3290: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 32a0: 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d$targetFileNam
32b0: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  e \"\n]..      }
32c0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
32d0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 32e0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 32f0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 3300: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 "---- failed t 3310: 6f 20 63 6f 70 79 20 62 75 69 6c 64 20 66 69 6c o copy build fil 3320: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 e from \""$sour
3330: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20  ceFileName \..
3340: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f            "\" to
3350: 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65   \"" $targetFile 3360: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 Name \"\n].. 3370: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 3380: 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 proc tryDelet 3390: 65 42 69 6e 61 72 79 46 69 6c 65 20 7b 20 66 69 eBinaryFile { fi 33a0: 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 leName } {.. 33b0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b set fileName [ 33c0: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 33d0: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a e$fileName]....
33e0: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
33f0: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam 3400: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 3410: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
3420: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
3430: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
3440: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
3450: 65 64 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61  ed deleting bina
3460: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  ry file \"" $fil 3470: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. 3480: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 "\", it doe 3490: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. 34a0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur 34b0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... 34c0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 34d0: 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c file delete$fil
34e0: 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68  eName}] == 0} th
34f0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
3500: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 3510: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 3520: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 3530: 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 69 6e ---- deleted bin 3540: 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ary file \""$fi
3550: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20  leName \"\n]..
3560: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
3570: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 3580: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 3590: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 35a0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 "---- fai 35b0: 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 69 led to delete bi 35c0: 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 nary file \""$f
35d0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
35e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
35f0: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f  ..    proc tryCo
3600: 70 79 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c  pyAssembly { fil
3610: 65 4e 61 6d 65 20 7b 70 64 62 20 74 72 75 65 7d  eName {pdb true}
3620: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 43   } {..      tryC
3630: 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24 66 69  opyBuildFile $fi 3640: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20 20 20 leName.... 3650: 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b if {$pdb} then {
3660: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 43 6f 70  ..        tryCop
3670: 79 42 75 69 6c 64 46 69 6c 65 20 5b 61 70 70 65  yBuildFile [appe
3680: 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 72 6f 6f  ndArgs [file roo
3690: 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d  tname $fileName] 36a0: 20 2e 70 64 62 5d 0d 0a 20 20 20 20 20 20 7d 0d .pdb].. }. 36b0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 36c0: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 41 73 73 roc tryDeleteAss 36d0: 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 embly { fileName 36e0: 20 7b 70 64 62 20 74 72 75 65 7d 20 7d 20 7b 0d {pdb true} } {. 36f0: 0a 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 . tryDelete 3700: 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 BinaryFile$file
3710: 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66  Name....      if
3720: 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a   {$pdb} then {.. 3730: 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet 3740: 65 42 69 6e 61 72 79 46 69 6c 65 20 5b 61 70 70 eBinaryFile [app 3750: 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 72 6f endArgs [file ro 3760: 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 otname$fileName
3770: 5d 20 2e 70 64 62 5d 0d 0a 20 20 20 20 20 20 7d  ] .pdb]..      }
3780: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3790: 70 72 6f 63 20 74 72 79 4c 6f 61 64 41 73 73 65  proc tryLoadAsse
37a0: 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20  mbly { fileName
37b0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66  } {..      set f
37c0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61  ileName [getBina
37d0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file 37e0: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 Name].... i 37f0: 66 20 7b 5b 63 61 74 63 68 20 7b 73 65 74 20 61 f {[catch {set a 3800: 73 73 65 6d 62 6c 79 20 5c 0d 0a 20 20 20 20 20 ssembly \.. 3810: 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 [object 3820: 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65 20 load -loadtype 3830: 46 69 6c 65 20 2d 61 6c 69 61 73 20 24 66 69 6c File -alias$fil
3840: 65 4e 61 6d 65 5d 7d 5d 20 3d 3d 20 30 7d 20 74  eName]}] == 0} t
3850: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
3860: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
3870: 3a 20 4e 6f 77 2c 20 61 64 64 20 74 68 65 20 6e  : Now, add the n
3880: 65 63 65 73 73 61 72 79 20 74 65 73 74 20 63 6f  ecessary test co
3890: 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20  nstraint...
38a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64     #..        ad
38b0: 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 66 69 6c  dConstraint [fil
38c0: 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65  e rootname [file
38d0: 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d   tail $fileName] 38e0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 38f0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 3900: 47 72 61 62 20 74 68 65 20 69 6d 61 67 65 20 72 Grab the image r 3910: 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 66 untime version f 3920: 72 6f 6d 20 74 68 65 20 61 73 73 65 6d 62 6c 79 rom the assembly 3930: 20 62 65 63 61 75 73 65 0d 0a 20 20 20 20 20 20 because.. 3940: 20 20 23 20 20 20 20 20 20 20 73 65 76 65 72 61 # severa 3950: 6c 20 74 65 73 74 73 20 72 65 6c 79 20 6f 6e 20 l tests rely on 3960: 69 74 20 68 61 76 69 6e 67 20 61 20 63 65 72 74 it having a cert 3970: 61 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 ain value... 3980: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 #.. a 3990: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 ddConstraint [ap 39a0: 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 74 pendArgs [file t 39b0: 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5f ail$fileName] _
39c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
39d0: 5b 24 61 73 73 65 6d 62 6c 79 20 49 6d 61 67 65  [$assembly Image 39e0: 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 5d 5d RuntimeVersion]] 39f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 3a00: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 # NOTE: R 3a10: 65 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 eturn the full p 3a20: 61 74 68 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 ath of the loade 3a30: 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 d file... 3a40: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 3a50: 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 rn$fileName..
3a60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
3a70: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d  eturn ""..    }.
3a80: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65  ....    proc che
3a90: 63 6b 46 6f 72 53 51 4c 69 74 65 20 7b 20 63 68  ckForSQLite { ch
3aa0: 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20  annel } {..
3ab0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 3ac0: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f 3ad0: 6f 72 20 63 6f 72 65 20 53 51 4c 69 74 65 20 6c or core SQLite l 3ae0: 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 ibrary... ".... 3af0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 3b00: 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d {object invoke - 3b10: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 3b20: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 3b30: 69 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 ite.SQLite3 \.. 3b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c SQL 3b50: 69 74 65 56 65 72 73 69 6f 6e 7d 20 76 65 72 73 iteVersion} vers 3b60: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ion] == 0} then 3b70: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 3b80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 3b90: 74 65 6d 70 74 20 74 6f 20 71 75 65 72 79 20 74 tempt to query t 3ba0: 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 he Fossil source 3bb0: 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 identifier for 3bc0: 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 the SQLite.. 3bd0: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 72 65 # core 3be0: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 library... 3bf0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 3c00: 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 {[catch {object 3c10: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 3c20: 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d NonPublic System 3c30: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 3c40: 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 ite3 \.. 3c50: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 6f SQLiteSo 3c60: 75 72 63 65 49 64 7d 20 73 6f 75 72 63 65 49 64 urceId} sourceId 3c70: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 3c80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 3c90: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 # NOTE: We fai 3ca0: 6c 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 led to query the 3cb0: 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 Fossil source i 3cc0: 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 dentifier... 3cd0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 3ce0: 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 set sourceId 3cf0: 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 unknown.. 3d00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 3d10: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 3d20: 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 74 65 Yes, the SQLite 3d30: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 61 70 core library ap 3d40: 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 69 pears to be avai 3d50: 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 lable... 3d60: 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f #.. addCo 3d70: 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 0d nstraint SQLite. 3d80: 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs 3d90: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
3da0: 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24 76  dArgs "yes (" $v 3db0: 65 72 73 69 6f 6e 20 22 20 22 20 24 73 6f 75 72 ersion " "$sour
3dc0: 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20  ceId ")\n"]..
3dd0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
3de0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 3df0: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 nel no\n.. 3e00: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 3e10: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 proc checkForSQ 3e20: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 LiteDefineConsta 3e30: 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20 6e 61 6d nt { channel nam 3e40: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 e } {.. tpu 3e50: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
3e60: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
3e70: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b       "---- check
3e80: 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44  ing for System.D
3e90: 61 74 61 2e 53 51 4c 69 74 65 20 64 65 66 69 6e  ata.SQLite defin
3ea0: 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22 22 20 24  e constant \"" $3eb0: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 name \.. 3ec0: 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 "\"... "].... 3ed0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 3ee0: 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d {object invoke - 3ef0: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 3f00: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 3f10: 69 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 ite.SQLite3 \.. 3f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 44 65 66 Def 3f30: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 7d 20 64 65 ineConstants} de 3f40: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d fineConstants] = 3f50: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 3f60: 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 if {[lsearc 3f70: 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 h -exact -nocase 3f80: 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74$defineConstant
3f90: 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d 31 7d 20  s $name] != -1} 3fa0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 3fb0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 3fc0: 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 69 73 NOTE: Yes, this 3fd0: 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 define constant 3fe0: 20 77 61 73 20 65 6e 61 62 6c 65 64 20 77 68 65 was enabled whe 3ff0: 6e 20 74 68 65 20 6d 61 6e 61 67 65 64 0d 0a 20 n the managed.. 4000: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 4010: 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20 63 6f assembly was co 4020: 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 mpiled... 4030: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 4040: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 addConstraint [a 4050: 70 70 65 6e 64 41 72 67 73 20 64 65 66 69 6e 65 ppendArgs define 4060: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e Constant.System. 4070: 44 61 74 61 2e 53 51 4c 69 74 65 2e 20 24 6e 61 Data.SQLite.$na
4080: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me]....
4090: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 40a0: 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d yes\n.. } 40b0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 40c0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
40d0: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20  l no\n..
40e0: 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
40f0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
4100: 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c   $channel error\ 4110: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 n.. }.. 4120: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 4130: 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 etDateTimeFormat 4140: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 4150: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 4160: 69 73 20 70 72 6f 63 65 64 75 72 65 20 73 69 6d is procedure sim 4170: 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68 65 20 ply returns the 4180: 22 64 65 66 61 75 6c 74 22 20 44 61 74 65 54 69 "default" DateTi 4190: 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 64 0d 0a me format used.. 41a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79 # by 41b0: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 41c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 41d0: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 41e0: 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 s ::datetime_for 41f0: 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 mat] && \.. 4200: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 4210: 67 74 68 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f gth$::datetime_
4220: 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65  format] > 0} the
4230: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
4240: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
4250: 52 65 74 75 72 6e 20 74 68 65 20 6d 61 6e 75 61  Return the manua
4260: 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 20 76  lly overridden v
4270: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 44 61 74  alue for the Dat
4280: 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d 0a 20  eTime format...
4290: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
42a0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 65    return $::date 42b0: 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20 20 20 time_format.. 42c0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 42d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 42e0: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 61 # NOTE: Return a 42f0: 6e 20 49 53 4f 38 36 30 31 20 44 61 74 65 54 69 n ISO8601 DateTi 4300: 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70 61 74 me format compat 4310: 69 62 6c 65 20 77 69 74 68 20 53 51 4c 69 74 65 ible with SQLite 4320: 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ,.. # 4330: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 4340: 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 69 74 61 QLite, and suita 4350: 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d 74 72 ble for round-tr 4360: 69 70 70 69 6e 67 20 77 69 74 68 20 74 68 65 0d ipping with the. 4370: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 4380: 20 44 61 74 65 54 69 6d 65 20 63 6c 61 73 73 20 DateTime class 4390: 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b of the framework 43a0: 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 . If this value 43b0: 20 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a 20 20 is changed,.. 43c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 # va 43d0: 72 69 6f 75 73 20 74 65 73 74 73 20 6d 61 79 20 rious tests may 43e0: 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23 fail... # 43f0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 4400: 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a "yyyy-MM-dd HH: 4410: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 0d mm:ss.FFFFFFFK". 4420: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 4430: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e 75 .... proc enu 4440: 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 7b 20 merableToList { 4450: 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b 0d 0a enumerable } {.. 4460: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 set result 4470: 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 [list].... 4480: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 4490: 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c 65 5d gth$enumerable]
44a0: 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d 65 72   == 0 || $enumer 44b0: 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 7d 20 able eq "null"} 44c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 44d0: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a return$result..
44e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
44f0: 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
4500: 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65 6e 75  -alias item $enu 4510: 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 20 20 merable {.. 4520: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 4530: 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e 20 30 ength$item] > 0
4540: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
4550: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
4560: 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74 72 69  lt [$item ToStri 4570: 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ng].. }.. 4580: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 4590: 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d return$result.
45a0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
45b0: 72 6f 63 20 63 6f 6d 70 69 6c 65 43 53 68 61 72  roc compileCShar
45c0: 70 57 69 74 68 20 7b 0d 0a 20 20 20 20 20 20 20  pWith {..
45d0: 20 20 20 20 20 74 65 78 74 20 6d 65 6d 6f 72 79       text memory
45e0: 20 73 79 6d 62 6f 6c 73 20 73 74 72 69 63 74 20   symbols strict
45f0: 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 65  resultsVarName e
4600: 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 66 69 6c  rrorsVarName fil
4610: 65 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20  eNames..
4620: 20 20 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20 20      args } {..
4630: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
4640: 4f 54 45 3a 20 53 69 6e 63 65 20 77 65 20 61 72  OTE: Since we ar
4650: 65 20 67 6f 69 6e 67 20 74 6f 20 75 73 65 20 74  e going to use t
4660: 68 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20  his method name
4670: 61 20 6c 6f 74 2c 20 61 73 73 69 67 6e 20 69 74  a lot, assign it
4680: 20 74 6f 20 61 0d 0a 20 20 20 20 20 20 23 20 20   to a..      #
4690: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 66 69       variable fi
46a0: 72 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  rst...      #..
46b0: 20 20 20 20 20 73 65 74 20 61 64 64 20 52 65 66       set add Ref
46c0: 65 72 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65  erencedAssemblie
46d0: 73 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 20 20 23  s.Add....      #
46e0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
46f0: 43 72 65 61 74 65 20 74 68 65 20 62 61 73 65 20  Create the base
4700: 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75  command to evalu
4710: 61 74 65 20 61 6e 64 20 61 64 64 20 74 68 65 20  ate and add the
4720: 70 72 6f 70 65 72 74 79 20 73 65 74 74 69 6e 67  property setting
4730: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
4740: 20 74 68 61 74 20 61 72 65 20 61 6c 6d 6f 73 74   that are almost
4750: 20 61 6c 77 61 79 73 20 6e 65 65 64 65 64 20 62   always needed b
4760: 79 20 6f 75 72 20 75 6e 69 74 20 74 65 73 74 73  y our unit tests
4770: 20 28 69 2e 65 2e 20 74 68 65 20 53 79 73 74 65   (i.e. the Syste
4780: 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  m..      #
4790: 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61   and System.Data
47a0: 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65   assembly refere
47b0: 6e 63 65 73 29 2e 0d 0a 20 20 20 20 20 20 23 0d  nces)...      #.
47c0: 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61  .      set comma
47d0: 6e 64 20 5b 6c 69 73 74 20 63 6f 6d 70 69 6c 65  nd [list compile
47e0: 43 53 68 61 72 70 20 24 74 65 78 74 20 24 6d 65  CSharp $text$me
47f0: 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73  mory $symbols$s
4800: 74 72 69 63 74 20 72 65 73 75 6c 74 73 20 5c 0d  trict results \.
4810: 0a 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72  .          error
4820: 73 20 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c  s $add System.dl 4830: 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61 l$add System.Da
4840: 74 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74  ta.dll $add Syst 4850: 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 em.Xml.dll].... 4860: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 4870: 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 68 NOTE: Add all th 4880: 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c 65 20 e provided file 4890: 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d 62 6c names as assembl 48a0: 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20 y references... 48b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f #.. fo 48c0: 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
48d0: 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  fileNames {..
48e0: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d       lappend com
48f0: 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74 42 69  mand $add [getBi 4900: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
4910: 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d  leName]..      }
4920: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
4930: 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74     # NOTE: Add t
4940: 68 65 20 65 78 74 72 61 20 61 72 67 75 6d 65 6e  he extra argumen
4950: 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74  ts, if any, to t
4960: 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76  he command to ev
4970: 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 23  aluate...      #
4980: 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70  ..      eval lap
4990: 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72  pend command $ar 49a0: 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 gs.... #.. 49b0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69 # NOTE: Ali 49c0: 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 as the compiler 49d0: 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 61 6e local results an 49e0: 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 62 6c d errors variabl 49f0: 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 es to the.. 4a00: 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c # variabl 4a10: 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 65 64 e names provided 4a20: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d by our caller.. 4a30: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 4a40: 75 70 76 61 72 20 31 20 24 72 65 73 75 6c 74 73 upvar 1$results
4a50: 56 61 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 0d  VarName results.
4a60: 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $4a70: 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 65 72 errorsVarName er 4a80: 72 6f 72 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d rors.... #. 4a90: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 . # NOTE: E 4aa0: 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e 73 valuate the cons 4ab0: 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65 tructed [compile 4ac0: 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20 CSharp] command 4ad0: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d 0a and return the.. 4ae0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 4af0: 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a sult... #.. 4b00: 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d eval$comm
4b10: 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  and..    }.....
4b20: 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79     proc isMemory
4b30: 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20  Db { fileName }
4b40: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
4b50: 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65    # NOTE: Is the
4b60: 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62   specified datab
4b70: 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 65  ase file name re
4b80: 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  ally an in-memor
4b90: 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 20  y database?..
4ba0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
4bb0: 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e  rn [expr {$fileN 4bc0: 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a ame eq ":memory: 4bd0: 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 " || \.. 4be0: 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 [string range 4bf0: 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20$fileName 0 12]
4c00: 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79  eq "file::memory
4c10: 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  :"}]..    }.....
4c20: 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 62      proc setupDb
4c30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
4c40: 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 22  fileName {mode "
4c50: 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d  "} {dateTimeForm
4c60: 61 74 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65  at ""} {dateTime
4c70: 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73 20  Kind ""} {flags
4c80: 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ""}..
4c90: 20 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 75 61   {extra ""} {qua
4ca0: 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 65 6c 65  lify true} {dele
4cb0: 74 65 20 74 72 75 65 7d 20 7b 75 72 69 20 66 61  te true} {uri fa
4cc0: 6c 73 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62  lse} {varName db
4cd0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
4ce0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
4cf0: 72 73 74 2c 20 73 65 65 20 69 66 20 74 68 65 20  rst, see if the
4d00: 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65  caller has reque
4d10: 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72  sted an in-memor
4d20: 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20  y database...
4d30: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
4d40: 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f  isMemory [isMemo
4d50: 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  ryDb $fileName]. 4d60: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 4d70: 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f # NOTE: For no 4d80: 77 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61 w, all test data 4d90: 62 61 73 65 73 20 75 73 65 64 20 62 79 20 74 68 bases used by th 4da0: 65 20 74 65 73 74 20 73 75 69 74 65 20 61 72 65 e test suite are 4db0: 20 70 6c 61 63 65 64 20 69 6e 74 6f 0d 0a 20 20 placed into.. 4dc0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 4dd0: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 4de0: 6f 72 79 2e 20 20 45 61 63 68 20 64 61 74 61 62 ory. Each datab 4df0: 61 73 65 20 75 73 65 64 20 62 79 20 61 20 74 65 ase used by a te 4e00: 73 74 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 st should be.. 4e10: 20 20 20 20 23 20 20 20 20 20 20 20 63 6c 65 61 # clea 4e20: 6e 65 64 20 75 70 20 62 79 20 74 68 61 74 20 74 ned up by that t 4e30: 65 73 74 20 75 73 69 6e 67 20 74 68 65 20 22 63 est using the "c 4e40: 6c 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65 64 leanupDb" proced 4e50: 75 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 ure, below... 4e60: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 4e70: 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 !$isMemory && $q 4e80: 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a ualify} then {.. 4e90: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 set file 4ea0: 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 Name [file join 4eb0: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 [getDatabaseDire 4ec0: 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 ctory] [file tai 4ed0: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 l$fileName]]..
4ee0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
4ef0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
4f00: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65 6c   By default, del
4f10: 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73  ete any pre-exis
4f20: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69  ting database wi
4f30: 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65  th the same file
4f40: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4f50: 6e 61 6d 65 20 69 66 20 69 74 20 63 75 72 72 65  name if it curre
4f60: 6e 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 20  ntly exists...
4f70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
4f80: 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24  {!$isMemory &&$
4f90: 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20  delete && [file
4fa0: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 4fb0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 4fc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 4fd0: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 4fe0: 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d delete any pre- 4ff0: 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 existing databas 5000: 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 e with the same 5010: 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 file.. # 5020: 20 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 name... 5030: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5040: 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 if {[catch {file 5050: 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d delete$fileNam
5060: 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20  e} error]} then
5070: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
5080: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
5090: 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69  : We somehow fai
50a0: 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68  led to delete th
50b0: 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77  e file, report w
50c0: 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  hy...          #
50d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
50e0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 50f0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 5100: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 5110: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 5120: 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 iled to delete d 5130: 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 atabase file \"" 5140: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
5150: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
5160: 64 75 72 69 6e 67 20 73 65 74 75 70 2c 20 65 72  during setup, er
5170: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 5180: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 5190: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 51a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 51b0: 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 OTE: Refer to th 51c0: 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 e specified vari 51d0: 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 able (e.g. "db") 51e0: 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 in the context 51f0: 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 of the.. # 5200: 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 caller. T 5210: 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 he handle to the 5220: 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 opened database 5230: 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 will be stored 5240: 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d there... #. 5250: 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
5260: 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20  varName db....
5270: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
5280: 4f 54 45 3a 20 53 74 61 72 74 20 62 75 69 6c 64  OTE: Start build
5290: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
52a0: 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20  on string.  The
52b0: 6f 6e 6c 79 20 72 65 71 75 69 72 65 64 20 70 6f  only required po
52c0: 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20  rtion..      #
52d0: 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e       of the conn
52e0: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 73  ection string is
52f0: 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65   the data source
5300: 2c 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73  , which contains
5310: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
5320: 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69 6c      database fil
5330: 65 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20 20  e name itself.
5340: 49 66 20 74 68 65 20 63 61 6c 6c 65 72 20 77 61  If the caller wa
5350: 6e 74 73 20 74 6f 20 75 73 65 20 61 20 55 52 49  nts to use a URI
5360: 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20   as..      #
5370: 20 20 20 74 68 65 20 64 61 74 61 20 73 6f 75 72     the data sour
5380: 63 65 2c 20 75 73 65 20 74 68 65 20 46 75 6c 6c  ce, use the Full
5390: 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  Uri connection s
53a0: 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20 74  tring property t
53b0: 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  o..      #
53c0: 20 70 72 65 76 65 6e 74 20 74 68 65 20 64 61 74   prevent the dat
53d0: 61 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20  a source string
53e0: 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c  from being mangl
53f0: 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
5400: 20 20 20 20 69 66 20 7b 24 75 72 69 7d 20 74 68      if {$uri} th 5410: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 en {.. se 5420: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 t connection {Fu 5430: 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 llUri=${fileName
5440: 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  }}..      } else
5450: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
5460: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61  connection {Data
5470: 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61   Source=${fileNa 5480: 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d me}}.. }... 5490: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 54a0: 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 # NOTE: Since th 54b0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 is procedure has 54c0: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 no special know 54d0: 6c 65 64 67 65 20 6f 66 20 77 68 61 74 20 74 68 ledge of what th 54e0: 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 e default.. 54f0: 20 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 # setting 5500: 20 69 73 20 66 6f 72 20 74 68 65 20 54 6f 46 75 is for the ToFu 5510: 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f llPath connectio 5520: 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 79 n string propery 5530: 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 , always.. 5540: 23 20 20 20 20 20 20 20 61 64 64 20 74 68 65 20 # add the 5550: 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 value we know ab 5560: 6f 75 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 out to the conne 5570: 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 ction string... 5580: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70 #.. ap 5590: 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 pend connection 55a0: 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 {;ToFullPath=${q
55b0: 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20  ualify}}....
55c0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
55d0: 45 3a 20 49 66 20 74 68 65 20 63 61 6c 6c 65 72  E: If the caller
55e0: 20 73 70 65 63 69 66 69 65 64 20 61 20 6a 6f 75   specified a jou
55f0: 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74  rnal mode, add t
5600: 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72  he necessary por
5610: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
5620: 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65      of the conne
5630: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77  ction string now
5640: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
5650: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
5660: 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d  ngth $mode] > 0} 5670: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 5680: 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti 5690: 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 on {;Journal Mod 56a0: 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 e=${mode}}..
56b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
56c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
56d0: 20 74 68 65 20 63 61 6c 6c 65 72 20 73 70 65 63   the caller spec
56e0: 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d 65  ified a DateTime
56f0: 20 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 68 65   format, add the
5700: 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20   necessary..
5710: 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f    #       portio
5720: 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74  n of the connect
5730: 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d  ion string now..
5740: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
5750: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
5760: 74 68 20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d  th $dateTimeForm 5770: 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d at] > 0} then {. 5780: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 . append 5790: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 connection {;Dat 57a0: 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 eTimeFormat=${da
57b0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a  teTimeFormat}}..
57c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
57d0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
57e0: 3a 20 49 66 20 74 68 65 20 63 61 6c 6c 65 72 20  : If the caller
57f0: 73 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65  specified a Date
5800: 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74 68  TimeKind, add th
5810: 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74  e necessary port
5820: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
5830: 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63     of the connec
5840: 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e  tion string now.
5850: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
5860: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
5870: 67 74 68 20 24 64 61 74 65 54 69 6d 65 4b 69 6e  gth $dateTimeKin 5880: 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a d] > 0} then {.. 5890: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 append c 58a0: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 onnection {;Date 58b0: 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 TimeKind=${dateT
58c0: 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20  imeKind}}..
58d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
58e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
58f0: 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 67 6c  there are any gl
5900: 6f 62 61 6c 20 28 70 65 72 20 74 65 73 74 20 72  obal (per test r
5910: 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  un) connection f
5920: 6c 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d 0a  lags currently..
5930: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65        #       se
5940: 74 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77 20  t, use them now
5950: 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e 69  (i.e. by combini
5960: 6e 67 20 74 68 65 6d 20 77 69 74 68 20 74 68 65  ng them with the
5970: 20 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d 0a   ones for this..
5980: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
5990: 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20  nnection)...
59a0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
59b0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f  info exists ::co
59c0: 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20  nnection_flags]
59d0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
59e0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $59f0: 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 ::connection_fla 5a00: 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d gs] > 0} then {. 5a10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 5a20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 # NOTE: Show 5a30: 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 61 74 20 (and log) that 5a40: 77 65 20 64 65 74 65 63 74 65 64 20 73 6f 6d 65 we detected some 5a50: 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 global connecti 5a60: 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 on flags... 5a70: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 #.. tp 5a80: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
5a90: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
5aa0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
5ab0: 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e  ---- global conn
5ac0: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 64 65 74  ection flags det
5ad0: 65 63 74 65 64 3a 20 22 20 24 3a 3a 63 6f 6e 6e  ected: " $::conn 5ae0: 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 6e 5d ection_flags \n] 5af0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 5b00: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 5b10: 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65 ombine and/or re 5b20: 70 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 63 place the connec 5b30: 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 tion flags and t 5b40: 68 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 20 hen show the.. 5b50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 # ne 5b60: 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 w value... 5b70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 5b80: 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 flags [combineF 5b90: 6c 61 67 73 20 24 66 6c 61 67 73 20 24 3a 3a 63 lags$flags $::c 5ba0: 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d onnection_flags] 5bb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 .... tput 5bc0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
5bd0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
5be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
5bf0: 2d 2d 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e  -- combined conn
5c00: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65  ection flags are
5c10: 3a 20 22 20 24 66 6c 61 67 73 20 5c 6e 5d 0d 0a  : " $flags \n].. 5c20: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 5c30: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 5c40: 3a 20 49 66 20 74 68 65 20 63 61 6c 6c 65 72 20 : If the caller 5c50: 73 70 65 63 69 66 69 65 64 20 61 20 53 51 4c 69 specified a SQLi 5c60: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 teConnectionFlag 5c70: 73 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 s, add the neces 5c80: 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 sary.. # 5c90: 20 20 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 portion of t 5ca0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st 5cb0: 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ring now... 5cc0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 5cd0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c tring length$fl
5ce0: 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ags] > 0} then {
5cf0: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  ..        append
5d00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c   connection {;Fl
5d10: 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20  ags=${flags}}.. 5d20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 5d30: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 5d40: 20 49 66 20 74 68 65 20 63 61 6c 6c 65 72 20 73 If the caller s 5d50: 70 65 63 69 66 69 65 64 20 61 6e 20 65 78 74 72 pecified an extr 5d60: 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 68 65 a payload to the 5d70: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 5d80: 6e 67 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ng,.. # 5d90: 20 20 20 61 70 70 65 6e 64 20 69 74 20 6e 6f 77 append it now 5da0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 5db0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 5dc0: 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e 20 30 ngth$extra] > 0
5dd0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
5de0: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74    append connect
5df0: 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d 0a 20  ion \; $extra.. 5e00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 5e10: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 5e20: 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 Open the databa 5e30: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f se connection no 5e40: 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 20 6f w, placing the o 5e50: 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76 61 6c paque handle val 5e60: 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ue.. # 5e70: 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72 69 61 into the varia 5e80: 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 62 79 ble specified by 5e90: 20 74 68 65 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 the caller... 5ea0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 5eb0: 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 db [sql open -t 5ec0: 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75 62 73 ype SQLite [subs 5ed0: 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d t$connection]].
5ee0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
5ef0: 72 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b 20  roc cleanupDb {
5f00: 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d  fileName {varNam
5f10: 65 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74  e db} {collect t
5f20: 72 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 72  rue} {qualify tr
5f30: 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue}..
5f40: 20 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74            {delet
5f50: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  e true} } {..
5f60: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
5f70: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66  TE: Attempt to f
5f80: 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67  orce all pending
5f90: 20 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63   "garbage" objec
5fa0: 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74  ts to be collect
5fb0: 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ed,..      #
5fc0: 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c     including SQL
5fd0: 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61  ite statements a
5fe0: 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  nd backup object
5ff0: 73 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61  s; this should a
6000: 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20  llow..      #
6010: 20 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69      the underlyi
6020: 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ng database file
6030: 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d   to be deleted..
6040: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
6050: 69 66 20 7b 24 63 6f 6c 6c 65 63 74 20 26 26 20  if {$collect && 6060: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63 61 \.. [ca 6070: 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f tch {object invo 6080: 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 ke GC GetTotalMe 6090: 6d 6f 72 79 20 74 72 75 65 7d 20 65 72 72 6f 72 mory true} error 60a0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 60b0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
60c0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
60d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d  .            "==
60e0: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
60f0: 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20  ed full garbage
6100: 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f  collection, erro
6110: 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  r: " \..
6120: 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20      \n\t $error 6130: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a \n].. }.... 6140: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 6150: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 NOTE: Refer to 6160: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 the specified va 6170: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 riable (e.g. "db 6180: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 ") in the contex 6190: 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 t of the.. 61a0: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 # caller. 61b0: 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 The handle to t 61c0: 68 65 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 he opened databa 61d0: 73 65 20 69 73 20 73 74 6f 72 65 64 20 74 68 65 se is stored the 61e0: 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 re... #.. 61f0: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
6200: 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20  Name db....
6210: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
6220: 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e  : Close the conn
6230: 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61  ection to the da
6240: 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 54 68 69  tabase now.  Thi
6250: 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75  s should allow u
6260: 73 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  s to..      #
6270: 20 20 20 20 64 65 6c 65 74 65 20 74 68 65 20 75      delete the u
6280: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61  nderlying databa
6290: 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20  se file...
62a0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
62b0: 66 6f 20 65 78 69 73 74 73 20 64 62 5d 20 26 26  fo exists db] &&
62c0: 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f   [catch {sql clo
62d0: 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20  se $db} error]} 62e0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 62f0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 6300: 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 6310: 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 iled to close th 6320: 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 70 6f e database, repo 6330: 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... 6340: 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 6350: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
6360: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
6370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d  .            "==
6380: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
6390: 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 61 74 61  ed to close data
63a0: 62 61 73 65 20 5c 22 22 20 24 64 62 20 22 5c 22  base \"" $db "\" 63b0: 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 , error: " \.. 63c0: 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 \n\t$
63d0: 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
63e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
63f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72       # NOTE: Fir
6400: 73 74 2c 20 73 65 65 20 69 66 20 74 68 65 20 63  st, see if the c
6410: 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73  aller has reques
6420: 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  ted an in-memory
6430: 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...
6440: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69    #..      set i
6450: 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72  sMemory [isMemor
6460: 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  yDb $fileName].. 6470: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6480: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 6490: 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 he full path to 64a0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c the database fil 64b0: 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 e name. For now 64c0: 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 , all test.. 64d0: 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61 # databa 64e0: 73 65 20 66 69 6c 65 73 20 61 72 65 20 73 74 6f se files are sto 64f0: 72 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 6f red in the tempo 6500: 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0d rary directory.. 6510: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 6520: 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 if {!$isMemory &
6530: 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e  & $qualify} then 6540: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 6550: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a fileName [file j 6560: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 oin [getDatabase 6570: 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 Directory] [file 6580: 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d tail$fileName]
6590: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
65a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
65b0: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
65c0: 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69  e file still exi
65d0: 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  sts...      #..
65e0: 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d       if {!$isMem 65f0: 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 ory &&$delete &
6600: 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  & [file exists $6610: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 6620: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 6630: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 6640: 69 70 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 ip deleting data 6650: 62 61 73 65 20 66 69 6c 65 73 20 69 66 20 73 6f base files if so 6660: 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 mebody sets the 6670: 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 global.. 6680: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 6690: 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d to prevent it.. 66a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 66b0: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 66c0: 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e xists ::no(clean 66d0: 75 70 44 62 46 69 6c 65 29 5d 7d 20 74 68 65 6e upDbFile)]} then 66e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 66f0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 6700: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 E: Attempt to de 6710: 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 64 61 lete the test da 6720: 74 61 62 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e tabase file now. 6730: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 6740: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 if {[se 6750: 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 t code [catch {f 6760: 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 ile delete$file
6770: 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74  Name} error]]} t
6780: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
6790: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
67a0: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d    # NOTE: We som
67b0: 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64  ehow failed to d
67c0: 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20  elete the file,
67d0: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
67e0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
67f0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 6800: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 6810: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 6830: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 6840: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74 ed to delete dat 6850: 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 abase file \""$
6860: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
6870: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
6880: 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20  during cleanup,
6890: 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 68a0: 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 68b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 68c0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 68d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 68e0: 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 # NOTE: Show tha 68f0: 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c t we skipped del 6900: 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d eting the file.. 6910: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 6920: 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code 6930: 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 0.... 6940: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
6950: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
6960: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
6970: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
6980: 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  : skipped deleti
6990: 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ng database file
69a0: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c   \"" $fileName \ 69b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 69c0: 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e "\" during clean 69d0: 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 up\n"].. 69e0: 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 }.. } else 69f0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 6a00: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 6a10: 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 e file does not 6a20: 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21 0d exist, success!. 6a30: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6a40: 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a set code 0.. 6a50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 6a60: 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 return$code..
6a70: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
6a80: 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20  c cleanupFile {
6a90: 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63  fileName {collec
6aa0: 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 66  t true} {force f
6ab0: 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
6ac0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
6ad0: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72  : Attempt to for
6ae0: 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22  ce all pending "
6af0: 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73  garbage" objects
6b00: 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64   to be collected
6b10: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
6b20: 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74   including SQLit
6b30: 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64  e statements and
6b40: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b   backup objects;
6b50: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c   this should all
6b60: 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ow..      #
6b70: 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67    the underlying
6b80: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
6b90: 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20  o be deleted...
6ba0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
6bb0: 20 7b 24 63 6f 6c 6c 65 63 74 20 26 26 20 5c 0d   {$collect && \. 6bc0: 0a 20 20 20 20 20 20 20 20 20 20 5b 63 61 74 63 . [catc 6bd0: 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 h {object invoke 6be0: 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f GC GetTotalMemo 6bf0: 72 79 20 74 72 75 65 7d 20 65 72 72 6f 72 5d 7d ry true} error]} 6c00: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 6c10: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
6c20: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
6c30: 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
6c40: 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
6c50: 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f   full garbage co
6c60: 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72 3a  llection, error:
6c70: 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
6c80: 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e    \n\t $error \n 6c90: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... 6ca0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 6cb0: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th 6cc0: 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 e file still exi 6cd0: 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 sts... #.. 6ce0: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 if {[file e 6cf0: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
6d00: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
6d10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
6d20: 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69  OTE: Skip deleti
6d30: 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20 69 66  ng test files if
6d40: 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74   somebody sets t
6d50: 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  he global variab
6d60: 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  le..        #
6d70: 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69      to prevent i
6d80: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
6d90: 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63         if {$forc 6da0: 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73 e || ![info exis 6db0: 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46 ts ::no(cleanupF 6dc0: 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ile)]} then {.. 6dd0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 6de0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 6df0: 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 tempt to delete 6e00: 74 68 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f the test file no 6e10: 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d w... #. 6e20: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 6e30: 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 set code [catch 6e40: 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 {file delete$fi
6e50: 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d  leName} error]]}
6e60: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
6e70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6e80: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73      # NOTE: We s
6e90: 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f  omehow failed to
6ea0: 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65   delete the file
6eb0: 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20  , report why...
6ec0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
6ed0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
6ee0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 6ef0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 6f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 6f10: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 6f20: 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 iled to delete t 6f30: 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 est file \""$fi
6f40: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
6f50: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75            "\" du
6f60: 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72  ring cleanup, er
6f70: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 6f80: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 6f90: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 6fa0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 6fb0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 6fc0: 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 NOTE: Show that 6fd0: 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 we skipped delet 6fe0: 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 ing the file... 6ff0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 7000: 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 set code 0 7010: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 .... tp 7020: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
7030: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
7040: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
7050: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
7060: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67  skipped deleting
7070: 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24   test file \"" $7080: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 fileName \.. 7090: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 "\" du 70a0: 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d ring cleanup\n"] 70b0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 70c0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 70d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 70e0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 # NOTE: The file 70f0: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c does not exist, 7100: 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20 success!.. 7110: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se 7120: 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 t code 0.. 7130: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 7140: 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a n$code..    }..
7150: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f  ...    proc repo
7160: 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65  rtSQLiteResource
7170: 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69  s { channel {qui
7180: 65 74 20 66 61 6c 73 65 7d 20 7b 63 6f 6c 6c 65  et false} {colle
7190: 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20  ct true} } {..
71a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
71b0: 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6f 75  OTE: Skip all ou
71c0: 74 70 75 74 20 69 66 20 77 65 20 61 72 65 20 72  tput if we are r
71d0: 75 6e 6e 69 6e 67 20 69 6e 20 22 71 75 69 65 74  unning in "quiet
71e0: 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23  " mode...      #
71f0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu 7200: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 7210: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
7220: 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e  nel "---- curren
7230: 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  t memory in use
7240: 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a  by SQLite... "..
7250: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
7260: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a   if {[catch {obj
7270: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
7280: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
7290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
72a0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
72b0: 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  .UnsafeNativeMet
72c0: 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  hods \..
72d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65        sqlite3_me
72e0: 6d 6f 72 79 5f 75 73 65 64 7d 20 6d 65 6d 6f 72  mory_used} memor
72f0: 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  y] == 0} then {.
7300: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71  .        if {!$q 7310: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 7320: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
7330: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
7340: 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74  gs $memory " byt 7350: 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 es\n"].. 7360: 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 }.. } else 7370: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 7380: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 # NOTE: Ma 7390: 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 6e ybe the SQLite n 73a0: 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 69 73 ative library is 73b0: 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 unavailable?.. 73c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 73d0: 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b set memory unk 73e0: 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nown.... 73f0: 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
7400: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
7410: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 7420: 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
7430: 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  y \n]..        }
7440: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
7450: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 24 6d     set result $m 7460: 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a 20 52 emory; # NOTE: R 7470: 65 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d eturn memory in- 7480: 75 73 65 20 74 6f 20 63 61 6c 6c 65 72 2e 0d 0a use to caller... 7490: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
74a0: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
74b0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 74c0: 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 nel "---- maximu 74d0: 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 m memory in use 74e0: 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a by SQLite... ".. 74f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 7500: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a if {[catch {obj 7510: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 7520: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 7530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 7540: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 7550: 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 .UnsafeNativeMet 7560: 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 hods \.. 7570: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 sqlite3_me 7580: 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 20 30 mory_highwater 0 7590: 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 } memory] == 0} 75a0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 75b0: 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
75c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
75d0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 75e0: 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
75f0: 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  y " bytes\n"]..
7600: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
7610: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
7620: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
7630: 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53  OTE: Maybe the S
7640: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62  QLite native lib
7650: 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61  rary is unavaila
7660: 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d  ble?..        #.
7670: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d  .        set mem
7680: 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20  ory unknown....
7690: 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 76a0: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 76b0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
76c0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
76d0: 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20   $memory \n].. 76e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 76f0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 .... if {$c
7700: 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a  ollect} then {..
7710: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
7720: 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ch {object invok
7730: 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d  e GC GetTotalMem
7740: 6f 72 79 20 74 72 75 65 7d 20 65 72 72 6f 72 5d  ory true} error]
7750: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
7760: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 7770: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 7780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 7790: 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 77a0: 61 69 6c 65 64 20 66 75 6c 6c 20 67 61 72 62 61 ailed full garba 77b0: 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 ge collection, e 77c0: 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 rror: " \.. 77d0: 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 \n\t$e
77e0: 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
77f0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
7800: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 7810: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 7820: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
7830: 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20  l "---- current
7840: 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79  memory in use by
7850: 20 74 68 65 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20   the CLR... "..
7860: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
7870: 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65  if {[catch {obje
7880: 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74  ct invoke GC Get
7890: 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73  TotalMemory fals
78a0: 65 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d  e} memory] == 0}
78b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
78c0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20   if {[string is
78d0: 69 6e 74 65 67 65 72 20 2d 73 74 72 69 63 74 20  integer -strict
78e0: 24 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 6e 20 7b  $memory]} then { 78f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 7900: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
7910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
7920: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 7930: 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
7940: 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20  " bytes\n"]..
7950: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
7960: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
7970: 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79        set memory
7980: 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20   invalid....
7990: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 79a0: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 79b0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
79c0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
79d0: 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20  s $memory \n].. 79e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 79f0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 7a00: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 lse {.. s 7a10: 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 et memory unknow 7a20: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n.... if 7a30: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
7a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
7a50: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 7a60: 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c ndArgs$memory \
7a70: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n]..        }..
7a80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
7a90: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a  return $result.. 7aa0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7ab0: 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 oc runSQLiteTest 7ac0: 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 Prologue {} {.. 7ad0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 7ae0: 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 NOTE: Skip runni 7af0: 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 70 72 ng our custom pr 7b00: 6f 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 ologue if the ma 7b10: 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 20 in one has been 7b20: 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 skipped... 7b30: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 #.. if {![i 7b40: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 7b50: 70 72 6f 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d prologue.eagle)] 7b60: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 7b70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 7b80: 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53 79 OTE: Skip all Sy 7b90: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 7ba0: 20 72 65 6c 61 74 65 64 20 66 69 6c 65 20 68 61 related file ha 7bb0: 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e 67 ndling (deleting 7bc0: 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ,.. # 7bd0: 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64 20 copying, and 7be0: 6c 6f 61 64 69 6e 67 29 20 69 66 20 77 65 20 61 loading) if we a 7bf0: 72 65 20 73 6f 20 69 6e 73 74 72 75 63 74 65 64 re so instructed 7c00: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 7c10: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 7c20: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c exists ::no(sql 7c30: 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e iteFiles)]} then 7c40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 7c50: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 7c60: 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 E: Skip trying t 7c70: 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 66 69 6c o delete any fil 7c80: 65 73 20 69 66 20 77 65 20 61 72 65 20 73 6f 20 es if we are so 7c90: 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 instructed... 7ca0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 7cb0: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 7cc0: 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 xists ::no(delet 7cd0: 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 eSqliteFiles)]} 7ce0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7cf0: 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 tryDeleteAss 7d00: 65 6d 62 6c 79 20 73 71 6c 69 74 65 33 2e 64 6c embly sqlite3.dl 7d10: 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 l.. r 7d20: 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 emoveConstraint 7d30: 66 69 6c 65 5f 73 71 6c 69 74 65 33 2e 64 6c 6c file_sqlite3.dll 7d40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 7d50: 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c tryDeleteAssembl 7d60: 79 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 y SQLite.Interop 7d70: 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 7d80: 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 removeConstrai 7d90: 6e 74 20 66 69 6c 65 5f 53 51 4c 69 74 65 2e 49 nt file_SQLite.I 7da0: 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a 0d 0a 20 20 nterop.dll.... 7db0: 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 7dc0: 65 74 65 41 73 73 65 6d 62 6c 79 20 53 79 73 74 eteAssembly Syst 7dd0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 7de0: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 7df0: 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 removeConstraint 7e00: 20 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44 61 74 file_System.Dat 7e10: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 0d 0a a.SQLite.dll.... 7e20: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 7e30: 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 53 79 eleteAssembly Sy 7e40: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 7e50: 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 .Linq.dll.. 7e60: 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e removeCon 7e70: 73 74 72 61 69 6e 74 20 66 69 6c 65 5f 53 79 73 straint file_Sys 7e80: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 7e90: 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 Linq.dll.. 7ea0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 7eb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 7ec0: 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 # NOTE: Skip try 7ed0: 69 6e 67 20 74 6f 20 63 6f 70 79 20 61 6e 79 20 ing to copy any 7ee0: 66 69 6c 65 73 20 69 66 20 77 65 20 61 72 65 20 files if we are 7ef0: 73 6f 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a so instructed... 7f00: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 7f10: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 7f20: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 7f30: 70 79 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d pySqliteFiles)]} 7f40: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 7f50: 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 tryCopyAsse 7f60: 6d 62 6c 79 20 73 71 6c 69 74 65 33 2e 64 6c 6c mbly sqlite3.dll 7f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 .. tr 7f80: 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 51 yCopyAssembly SQ 7f90: 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c Lite.Interop.dll 7fa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 .. tr 7fb0: 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 79 yCopyAssembly Sy 7fc0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 7fd0: 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 7fe0: 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c tryCopyAssembl 7ff0: 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 8000: 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 Lite.Linq.dll.. 8010: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 8020: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8030: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 8040: 70 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f 61 64 p trying to load 8050: 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 77 65 any files if we 8060: 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75 63 74 are so instruct 8070: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ed... # 8080: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 8090: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 80a0: 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c no(loadSqliteFil 80b0: 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 80c0: 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 80d0: 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 80e0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 80f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 .. tr 8100: 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 yLoadAssembly Sy 8110: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 8120: 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 .Linq.dll.. 8130: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 8140: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat 8150: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 8160: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
8170: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
8180: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
8190: 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
81a0: 72 73 69 6f 6e 20 6f 66 20 5c 22 53 51 4c 69 74  rsion of \"SQLit
81b0: 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e  e.Interop.dll\".
81c0: 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
81d0: 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73        [file vers
81e0: 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
81f0: 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e  leName SQLite.In
8200: 74 65 72 6f 70 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d  terop.dll]] \n].
8210: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
8220: 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
8230: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $8240: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 8250: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 8260: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 8270: 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 8280: 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e f \"System.Data. 8290: 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 SQLite.dll\"... 82a0: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 82b0: 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e [file version 82c0: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 82d0: 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e ame System.Data. 82e0: 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d SQLite.dll]] \n] 82f0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 8300: 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 8310: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 8320: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
8330: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
8340: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
8350: 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
8360: 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61  of \"System.Data
8370: 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
8380: 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20  \"... " \..
8390: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76           [file v
83a0: 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72  ersion [getBinar
83b0: 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d  yFileName System
83c0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
83d0: 71 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20  q.dll]] \n]..
83e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
83f0: 20 20 73 65 74 20 61 73 73 65 6d 62 6c 69 65 73    set assemblies
8400: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
8410: 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e  AppDomain.Curren
8420: 74 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d  tDomain GetAssem
8430: 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20  blies]....
8440: 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
8450: 20 61 73 73 65 6d 62 6c 79 20 24 61 73 73 65 6d   assembly $assem 8460: 62 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 blies {.. 8470: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d if {[string m 8480: 61 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61 atch \{System.Da 8490: 74 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65 ta.SQLite*$asse
84a0: 6d 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  mbly]} then {..
84b0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
84c0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 84d0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 84f0: 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 61 73 73 65 "---- found asse 8500: 6d 62 6c 79 3a 20 22 20 24 61 73 73 65 6d 62 6c mbly: "$assembl
8510: 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  y \n]..
8520: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
8530: 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b  .        catch {
8540: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
8550: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 8560: 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 8570: 20 20 20 22 2d 2d 2d 2d 20 64 65 66 69 6e 65 20 "---- define 8580: 63 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 5c 22 constants for \" 8590: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 85a0: 74 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 te\"... ".... 85b0: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 85c0: 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 h {object invoke 85d0: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 85e0: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 85f0: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 8600: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit 8610: 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e e3 DefineConstan 8620: 74 73 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ts} \.. 8630: 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 defineC 8640: 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 onstants] == 0} 8650: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 8660: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
8670: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
8680: 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73  dArgs [formatLis
8690: 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20  t [lsort \..
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 24 64 65 66              $def 86b0: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 5d 20 5c ineConstants]] \ 86c0: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 n].. } 86d0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 86e0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
86f0: 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77  t_channel unknow
8700: 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n\n..          }
8710: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
8720: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
8730: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77    # NOTE: Now, w
8740: 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69  e need to know i
8750: 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
8760: 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 61  e library is ava
8770: 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  ilable..
8780: 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65  #       (i.e. be
8790: 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65  cause the manage
87a0: 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61  d-only System.Da
87b0: 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62  ta.SQLite assemb
87c0: 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20  ly can..
87d0: 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74  #       load wit
87e0: 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72  hout it; however
87f0: 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61  , it cannot do a
8800: 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77  nything useful w
8810: 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20  ithout..
8820: 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 66  #       it).  If
8830: 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 68   we are using th
8840: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
8850: 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72  embly and we alr
8860: 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20  eady..        #
8870: 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28        found it (
8880: 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f  above), this sho
8890: 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 65  uld always succe
88a0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ed...        #..
88b0: 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
88c0: 53 51 4c 69 74 65 20 24 3a 3a 74 65 73 74 5f 63  SQLite $::test_c 88d0: 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 hannel.... 88e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 88f0: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th 8900: 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f e sqlite3_win32_ 8910: 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 set_directory fu 8920: 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 nction is availa 8930: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ble... #. 8940: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
8950: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
8960: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
8970: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
8980: 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   function sqlite
8990: 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
89a0: 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  ctory... "....
89b0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
89c0: 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   {object invoke
89d0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
89e0: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
89f0: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
8a00: 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
8a10: 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20  tiveMethods \..
8a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8a30: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
8a40: 5f 64 69 72 65 63 74 6f 72 79 20 30 20 6e 75 6c  _directory 0 nul
8a50: 6c 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  l}] == 0} then {
8a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
8a70: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
8a80: 20 43 61 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c   Calling the sql
8a90: 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
8aa0: 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f  irectory functio
8ab0: 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20  n does not..
8ac0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
8ad0: 75 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  use an exception
8ae0: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20  ; therefore, it
8af0: 6d 75 73 74 20 62 65 20 61 76 61 69 6c 61 62 6c  must be availabl
8b00: 65 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20  e (i.e...
8b10: 20 20 20 23 20 20 20 20 20 20 20 65 76 65 6e 20     #       even
8b20: 74 68 6f 75 67 68 20 69 74 20 73 68 6f 75 6c 64  though it should
8b30: 20 72 65 74 75 72 6e 20 61 20 66 61 69 6c 75 72   return a failur
8b40: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 69 6e  e return code in
8b50: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20   this..
8b60: 20 23 20 20 20 20 20 20 20 63 61 73 65 29 2e 0d   #       case)..
8b70: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
8b80: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
8b90: 72 61 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 69  raint sqlite3_wi
8ba0: 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
8bb0: 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74  y....          t
8bc0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 8bd0: 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 nnel yes\n.. 8be0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 8bf0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
8c00: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f  :test_channel no
8c10: 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  \n..        }...
8c20: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
8c30: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
8c40: 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  mpt to determine
8c50: 20 69 66 20 74 68 65 20 63 75 73 74 6f 6d 20 65   if the custom e
8c60: 78 74 65 6e 73 69 6f 6e 20 66 75 6e 63 74 69 6f  xtension functio
8c70: 6e 73 20 77 65 72 65 0d 0a 20 20 20 20 20 20 20  ns were..
8c80: 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65   #       compile
8c90: 64 20 69 6e 74 6f 20 74 68 65 20 53 51 4c 69 74  d into the SQLit
8ca0: 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
8cb0: 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ly...        #..
8cc0: 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
8cd0: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
8ce0: 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 61  tant $::test_cha 8cf0: 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 8d00: 20 20 20 20 43 48 45 43 4b 5f 53 54 41 54 45 0d CHECK_STATE. 8d10: 0a 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b ... check 8d20: 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 ForSQLiteDefineC 8d30: 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f onstant$::test_
8d40: 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20  channel \..
8d50: 20 20 20 20 20 20 20 55 53 45 5f 49 4e 54 45 52         USE_INTER
8d60: 4f 50 5f 44 4c 4c 0d 0a 0d 0a 20 20 20 20 20 20  OP_DLL....
8d70: 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
8d80: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24  DefineConstant $8d90: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 8da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e .. IN 8db0: 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f TEROP_EXTENSION_ 8dc0: 46 55 4e 43 54 49 4f 4e 53 0d 0a 0d 0a 20 20 20 FUNCTIONS.... 8dd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8de0: 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 # NOTE: Report t 8df0: 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 he resource usag 8e00: 65 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 e prior to runni 8e10: 6e 67 20 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 ng any tests... 8e20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8e30: 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 reportSQLiteRe 8e40: 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f sources$::test_
8e50: 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20  channel....
8e60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
8e70: 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 61  NOTE: Show the a
8e80: 63 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73 74  ctive test const
8e90: 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20  raints...
8ea0: 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   #..        tput
8eb0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 8ec0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d l [appendArgs "- 8ed0: 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a --- constraints: 8ee0: 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 8ef0: 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c [formatList [l 8f00: 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72 61 sort [getConstra 8f10: 69 6e 74 73 5d 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 ints]]] \n].... 8f20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8f30: 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 # NOTE: Show w 8f40: 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 hen our tests ac 8f50: 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f tually began (no 8f60: 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a w)... #.. 8f70: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
8f80: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
8f90: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
8fa0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53           "---- S
8fb0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
8fc0: 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 74  e tests began at
8fd0: 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
8fe0: 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20    [clock format
8ff0: 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d  [clock seconds]]
9000: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   \n]..      }..
9010: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
9020: 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45  c runSQLiteTestE
9030: 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20  pilogue {} {..
9040: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
9050: 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e  OTE: Skip runnin
9060: 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 69  g our custom epi
9070: 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69  logue if the mai
9080: 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 20 73  n one has been s
9090: 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23  kipped...      #
90a0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e  ..      if {![in
90b0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
90c0: 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d  pilogue.eagle)]}
90d0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
90e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
90f0: 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75  TE: Show when ou
9100: 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79  r tests actually
9110: 20 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20   ended (now)...
9120: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9130: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 9140: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 9150: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 9160: 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e "---- System. 9170: 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 Data.SQLite test 9180: 73 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a s ended at " \.. 9190: 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f [clo 91a0: 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b ck format [clock 91b0: 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a seconds]] \n].. 91c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 91d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73 # NOTE: Als 91e0: 6f 20 72 65 70 6f 72 74 20 74 68 65 20 72 65 73 o report the res 91f0: 6f 75 72 63 65 20 75 73 61 67 65 20 61 66 74 65 ource usage afte 9200: 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 r running the te 9210: 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d sts... #. 9220: 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 . reportS 9230: 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 QLiteResources$
9240: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
9250: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
9260: 0c 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  ...    #########
9270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92b0: 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23  ##..    ########
92c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
92d0: 23 23 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20  ##### END Eagle
92e0: 4f 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23  ONLY ###########
92f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9300: 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23  ###..    #######
9310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9340: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
9350: 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23  ####..  }....  #
9360: 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65  ..  # NOTE: Save
9370: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
9380: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
9390: 69 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e  ining this file.
93a0: 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69  ..  #..  if {![i
93b0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d  nfo exists ::com
93c0: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20  mon_directory]}
93d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20  then {..    set
93e0: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
93f0: 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ry [file dirname
9400: 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d   [info script]].
9410: 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23  .  }....  #..  #
9420: 20 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74   NOTE: Provide t
9430: 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  he System.Data.S
9440: 51 4c 69 74 65 20 74 65 73 74 20 70 61 63 6b 61  QLite test packa
9450: 67 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70  ge to the interp
9460: 72 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70  reter...  #..  p
9470: 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53  ackage provide S
9480: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
9490: 65 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a     e.Test 1.0..}..