System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 8efb52003d2a40d4e6dfd4edb158537226c769a2:

• File Tests/common.eagle — part of check-in [e8a0cf1336] at 2012-10-08 09:11:50 on branch trunk — Add support for extra diagnostics in the native interop assembly when compiled in the debug build configuration. Fix several tests to account for recent changes to the setupDb and cleanupDb test suite infrastructure procedures. (user: mistachkin size: 47587)

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b  etBuildYear {} {
0340: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0350: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
0360: 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74 69  the "year" setti
0370: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
0380: 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75 73  ridden by the us
0390: 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  er (e.g...
03a0: 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63  #       on the c
03b0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
03c0: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
03d0: 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 68 20  l exactly which
03e0: 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  set of..      #
03f0: 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 20 77        binaries w
0400: 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74  e are testing, t
0410: 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 75 73  hose produced us
0420: 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c 20 53  ing the Visual S
0430: 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20  tudio..      #
0440: 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c       2005, 2008,
0450: 20 32 30 31 30 2c 20 6f 72 20 32 30 31 32 20 62   2010, or 2012 b
0460: 75 69 6c 64 20 73 79 73 74 65 6d 73 2e 20 20 54  uild systems.  T
0470: 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20  o override this
0480: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20  value..      #
0490: 20 20 20 20 20 76 69 61 20 74 68 65 20 63 6f 6d       via the com
04a0: 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72  mand line, enter
04b0: 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c   a command simil
04c0: 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  ar to one of the
04d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
04e0: 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f  following (all o
04f0: 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20  n one line):..
0500: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20      #..      #
0510: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e       EagleShell.
0520: 65 78 65 20 2d 70 72 65 49 6e 69 74 69 61 6c 69  exe -preInitiali
0530: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61  ze "set test_yea
0540: 72 20 32 30 30 35 22 0d 0a 20 20 20 20 20 20 23  r 2005"..      #
0550: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e           -file .
0560: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67  \path\to\all.eag
0570: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  le..      #..
0580: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0590: 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65 49 6e  Shell.exe -preIn
05a0: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
05b0: 73 74 5f 79 65 61 72 20 32 30 30 38 22 0d 0a 20  st_year 2008"..
05c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
05d0: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
05e0: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
05f0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0600: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
0610: 2d 70 72 65 49 6e 69 74 69 61 6c 69 7a 65 20 22  -preInitialize "
0620: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
0630: 31 30 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  10"..      #
0640: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
0650: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
0660: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0670: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0680: 6c 2e 65 78 65 20 2d 70 72 65 49 6e 69 74 69 61  l.exe -preInitia
0690: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
06a0: 65 61 72 20 32 30 31 32 22 0d 0a 20 20 20 20 20  ear 2012"..
06b0: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
06c0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
06d0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
06e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
06f0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65  leShell.exe -pre
0700: 49 6e 69 74 69 61 6c 69 7a 65 20 22 75 6e 73 65  Initialize "unse
0710: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65  t -nocomplain te
0720: 73 74 5f 79 65 61 72 22 0d 0a 20 20 20 20 20 20  st_year"..
0730: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20  #         -file
0740: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
0750: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  gle..      #..
0760: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
0770: 69 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72  ists ::test_year
0780: 5d 20 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e  ] && [string len
0790: 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 72  gth $::test_year 07a0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 07b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 07c0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 07d0: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 07e0: 20 79 65 61 72 2e 20 20 49 66 20 74 68 69 73 20 year. If this 07f0: 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20 variable is not 0800: 73 65 74 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 set, the.. 0810: 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c # defaul 0820: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 t value will be 0830: 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72 based on whether 0840: 20 6f 72 20 6e 6f 74 20 45 61 67 6c 65 20 68 61 or not Eagle ha 0850: 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 20 20 s been.. 0860: 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 64 # compiled 0870: 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c 52 against the CLR 0880: 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 76 34 2e v2.0 or CLR v4. 0890: 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 0... #.. 08a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
08b0: 3a 74 65 73 74 5f 79 65 61 72 0d 0a 20 20 20 20  :test_year..
08c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
08d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
08e0: 20 4e 4f 54 45 3a 20 49 66 20 45 61 67 6c 65 20   NOTE: If Eagle
08f0: 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c 65  has been compile
0900: 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c  d against the CL
0910: 52 20 76 34 2e 30 2c 20 75 73 65 20 22 32 30 31  R v4.0, use "201
0920: 30 22 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23  0" by..        #
0930: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 28         default (
0940: 77 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 30  we could use "20
0950: 31 32 22 20 69 6e 20 74 68 61 74 20 63 61 73 65  12" in that case
0960: 20 61 73 20 77 65 6c 6c 29 20 61 73 20 74 68 65   as well) as the
0970: 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23   test..        #
0980: 20 20 20 20 20 20 20 79 65 61 72 3b 20 6f 74 68         year; oth
0990: 65 72 77 69 73 65 2c 20 75 73 65 20 22 32 30 30  erwise, use "200
09a0: 38 22 20 62 79 20 64 65 66 61 75 6c 74 20 28 77  8" by default (w
09b0: 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 30 30  e could use "200
09c0: 35 22 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 23  5" in..        #
09d0: 20 20 20 20 20 20 20 74 68 61 74 20 63 61 73 65         that case
09e0: 20 61 73 20 77 65 6c 6c 29 2e 20 20 49 66 20 61   as well).  If a
09f0: 6e 6f 74 68 65 72 20 6d 61 6a 6f 72 20 5b 69 6e  nother major [in
0a00: 63 6f 6d 70 61 74 69 62 6c 65 5d 20 76 65 72 73  compatible] vers
0a10: 69 6f 6e 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  ion of..
0a20: 23 20 20 20 20 20 20 20 74 68 65 20 43 4c 52 20  #       the CLR
0a30: 69 73 20 72 65 6c 65 61 73 65 64 2c 20 74 68 69  is released, thi
0a40: 73 20 63 68 65 63 6b 20 77 69 6c 6c 20 68 61 76  s check will hav
0a50: 65 20 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e  e to be changed.
0a60: 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 23    The..        #
0a70: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 74         default t
0a80: 65 73 74 20 79 65 61 72 20 74 6f 20 75 73 65 20  est year to use
0a90: 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72  for a particular
0aa0: 20 43 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79   CLR version may
0ab0: 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20   be..        #
0ac0: 20 20 20 20 20 6f 76 65 72 72 69 64 64 65 6e 20       overridden
0ad0: 62 79 20 73 65 74 74 69 6e 67 20 74 68 65 20 67  by setting the g
0ae0: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 22  lobal variable "
0af0: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 24  test_year_clr_v$0b00: 58 22 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 X",.. # 0b10: 20 20 20 20 20 77 68 65 72 65 20 22 24 58 22 20 where "$X"
0b20: 6d 61 79 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20  may [currently]
0b30: 62 65 20 65 69 74 68 65 72 20 22 32 22 20 6f 72  be either "2" or
0b40: 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23   "4"...        #
0b50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68  ..        if {[h
0b60: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d  aveConstraint im
0b70: 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74  ageRuntime40]} t
0b80: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
0b90: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
0ba0: 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c  s ::test_year_cl
0bb0: 72 5f 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20  r_v4] && \..
0bc0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
0bd0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74  g length $::test 0be0: 5f 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 _year_clr_v4] > 0bf0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 0c00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 0c10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 0c20: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 0c30: 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 68 test year for th 0c40: 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 e CLR v4.0... 0c50: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 0c60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
0c70: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f  ::test_year_clr_
0c80: 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  v4..          }
0c90: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0ca0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
0cb0: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
0cc0: 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74 20  he default test
0cd0: 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52  year for the CLR
0ce0: 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20   v4.0...
0cf0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
0d00: 20 20 20 72 65 74 75 72 6e 20 32 30 31 30 3b 20     return 2010;
0d10: 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61  # TODO: Good "fa
0d20: 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f  llback" default?
0d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
0d40: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
0d50: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
0d60: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
0d70: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20  st_year_clr_v2]
0d80: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
0d90: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
0da0: 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f  th $::test_year_ 0db0: 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 clr_v2] > 0} the 0dc0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 0dd0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 0de0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 0df0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 79 specified test y 0e00: 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 ear for the CLR 0e10: 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 v2.0... 0e20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 0e30: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 return$::test
0e40: 5f 79 65 61 72 5f 63 6c 72 5f 76 32 0d 0a 20 20  _year_clr_v2..
0e50: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
0e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
0e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
0e80: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66  OTE: Use the def
0e90: 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20 66  ault test year f
0ea0: 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e  or the CLR v2.0.
0eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
0ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
0ed0: 75 72 6e 20 32 30 30 38 3b 20 23 20 54 4f 44 4f  urn 2008; # TODO
0ee0: 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b  : Good "fallback
0ef0: 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20  " default?..
0f00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
0f10: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
0f20: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
0f30: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72  getBuildConfigur
0f40: 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20  ation {} {..
0f50: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
0f60: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22 63  E: See if the "c
0f70: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73 65  onfiguration" se
0f80: 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f  tting has been o
0f90: 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65  verridden by the
0fa0: 20 75 73 65 72 0d 0a 20 20 20 20 20 20 23 20 20   user..      #
0fb0: 20 20 20 20 20 28 65 2e 67 2e 20 6f 6e 20 74 68       (e.g. on th
0fc0: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e  e command line).
0fd0: 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e    This helps con
0fe0: 74 72 6f 6c 20 65 78 61 63 74 6c 79 20 77 68 69  trol exactly whi
0ff0: 63 68 20 73 65 74 0d 0a 20 20 20 20 20 20 23 20  ch set..      #
1000: 20 20 20 20 20 20 6f 66 20 62 69 6e 61 72 69 65        of binarie
1010: 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67  s we are testing
1020: 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75 69   (i.e. those bui
1030: 6c 74 20 69 6e 20 74 68 65 20 22 44 65 62 75 67  lt in the "Debug
1040: 22 20 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20  " or..      #
1050: 20 20 20 20 22 52 65 6c 65 61 73 65 22 20 62 75      "Release" bu
1060: 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ild configuratio
1070: 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69 64  ns).  To overrid
1080: 65 20 74 68 69 73 20 76 61 6c 75 65 20 76 69 61  e this value via
1090: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
10a0: 20 20 20 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65      command line
10b0: 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e  , enter a comman
10c0: 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65  d similar to one
10d0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
10e0: 67 20 28 61 6c 6c 0d 0a 20 20 20 20 20 20 23 20  g (all..      #
10f0: 20 20 20 20 20 20 6f 6e 20 6f 6e 65 20 6c 69 6e        on one lin
1100: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  e):..      #..
1110: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
1120: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65 49  eShell.exe -preI
1130: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74  nitialize "set t
1140: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
1150: 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20 20  n Debug"..
1160: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20  #         -file
1170: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
1180: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  gle..      #..
1190: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
11a0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65 49  eShell.exe -preI
11b0: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74  nitialize "set t
11c0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
11d0: 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20 20  n Release"..
11e0: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
11f0: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
1200: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
1210: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61        #       Ea
1220: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66 69  gleShell.exe -fi
1230: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c  le .\path\to\all
1240: 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74 0d  .eagle -preTest.
1250: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
1260: 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c   "unset -nocompl
1270: 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67 75  ain test_configu
1280: 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 23  ration"..      #
1290: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
12a0: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
12b0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 26  configuration] &
12c0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
12d0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 12e0: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 :test_configurat 12f0: 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ion] > 0} then { 1300: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1310: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 1320: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 the specified t 1330: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f est configuratio 1340: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 n. The default 1350: 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20 20 value used.. 1360: 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 # for 1370: 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 73 this variable is 1380: 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 20 73 "Release", as s 1390: 65 74 20 62 79 20 74 68 65 20 74 65 73 74 20 73 et by the test s 13a0: 75 69 74 65 20 69 74 73 65 6c 66 2e 0d 0a 20 20 uite itself... 13b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13c0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f return$::test_
13d0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  configuration..
13e0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
13f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1400: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72 6d 61 6c    # NOTE: Normal
1410: 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e 65 76 65  ly, we will neve
1420: 72 20 68 69 74 20 74 68 69 73 20 63 61 73 65 20  r hit this case
1430: 62 65 63 61 75 73 65 20 74 68 65 20 76 61 6c 75  because the valu
1440: 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  e of the..
1450: 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63    #       test c
1460: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 61 72  onfiguration var
1470: 69 61 62 6c 65 20 69 73 20 61 6c 77 61 79 73 20  iable is always
1480: 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 20  set by the test
1490: 73 75 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23  suite..        #
14a0: 20 20 20 20 20 20 20 69 74 73 65 6c 66 3b 20 68         itself; h
14b0: 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 20 62  owever, it can b
14c0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 75 73 69  e overridden usi
14d0: 6e 67 20 74 68 65 20 75 6e 73 65 74 20 63 6f 6d  ng the unset com
14e0: 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20  mand..        #
14f0: 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 2d        from the -
1500: 70 72 65 54 65 73 74 20 6f 70 74 69 6f 6e 20 74  preTest option t
1510: 6f 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  o the test suite
1520: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1530: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 1540: 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 63 eagle_platform(c 1550: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 0d 0a 20 onfiguration).. 1560: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 1570: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 .. proc getBu 1580: 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 ildDirectory {} 1590: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 15a0: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 # NOTE: See if 15b0: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 the "native" ru 15c0: 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 ntime option has 15d0: 20 62 65 65 6e 20 73 65 74 2e 20 20 49 66 20 73 been set. If s 15e0: 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 o, use the.. 15f0: 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 # direct 1600: 6f 72 79 20 66 6f 72 20 74 68 65 20 6d 69 78 65 ory for the mixe 1610: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 d-mode assembly 1620: 28 61 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69 (a.k.a. the nati 1630: 76 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 ve interop.. 1640: 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 1650: 6c 79 29 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20 ly). To enable 1660: 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 this option via 1670: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line 1680: 2c 20 65 6e 74 65 72 20 61 0d 0a 20 20 20 20 20 , enter a.. 1690: 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 # command 16a0: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 similar to one 16b0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 of the following 16c0: 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e (all on one lin 16d0: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e):.. #.. 16e0: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 16f0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 eShell.exe -init 1700: 69 61 6c 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f ialize -runtimeO 1710: 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 ption native.. 1720: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 # -f 1730: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c ile .\path\to\al 1740: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 l.eagle.. # 1750: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1760: 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 20 6f To enable this o 1770: 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 63 6f ption via the co 1780: 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72 mmand line prior 1790: 20 74 6f 20 74 68 65 20 22 62 65 74 61 20 31 36 to the "beta 16 17a0: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ".. # 17b0: 20 72 65 6c 65 61 73 65 20 6f 66 20 45 61 67 6c release of Eagl 17c0: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 e, the following 17d0: 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65 command must be 17e0: 20 75 73 65 64 20 69 6e 73 74 65 61 64 0d 0a 20 used instead.. 17f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 28 61 6c # (al 1800: 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 so all on one li 1810: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ne):.. #.. 1820: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 1830: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 leShell.exe -ini 1840: 74 69 61 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69 tialize -postIni 1850: 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23 tialize.. # 1860: 20 20 20 20 20 20 20 20 20 22 6f 62 6a 65 63 74 "object 1870: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 invoke Interpre 1880: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 41 64 ter.GetActive Ad 1890: 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e dRuntimeOption n 18a0: 61 74 69 76 65 22 0d 0a 20 20 20 20 20 20 23 20 ative".. # 18b0: 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c -file .\ 18c0: 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c path\to\all.eagl 18d0: 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 e.. #.. 18e0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 18f0: 74 73 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 ts ::build_direc 1900: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tory] && \.. 1910: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 1920: 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69 ngth$::build_di
1930: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68  rectory] > 0} th
1940: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
1950: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1960: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66   The location of
1970: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
1980: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
1990: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
19a0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
19b0: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72  fore, use it ver
19c0: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
19d0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
19e0: 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63  n $::build_direc 19f0: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 1a00: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 1a10: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1a20: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 Figure out the 1a30: 62 75 69 6c 64 20 62 61 73 65 20 64 69 72 65 63 build base direc 1a40: 74 6f 72 79 2e 20 20 54 68 69 73 20 77 69 6c 6c tory. This will 1a50: 20 62 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 be the director 1a60: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 1a70: 20 20 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 that contains 1a80: 20 74 68 65 20 61 63 74 75 61 6c 20 62 75 69 6c the actual buil 1a90: 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f d output directo 1aa0: 72 79 20 28 65 2e 67 2e 20 22 62 69 6e 22 29 2e ry (e.g. "bin"). 1ab0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1ac0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 1ad0: 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 62 61 xists ::build_ba 1ae0: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 se_directory] && 1af0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b00: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
1b10: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
1b20: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
1b30: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
1b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
1b50: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e  TE: The location
1b60: 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 62 61   of the build ba
1b70: 73 65 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  se directory has
1b80: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
1b90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  ;..          #
1ba0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore,
1bb0: 75 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e  use it verbatim.
1bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1bd0: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74           set pat
1be0: 68 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f  h $::build_base_ 1bf0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 1c00: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in 1c10: 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d fo exists ::comm 1c20: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 on_directory] && 1c30: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c40: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
1c50: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
1c60: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
1c70: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1c80: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1c90: 4e 65 78 74 2c 20 66 61 6c 6c 62 61 63 6b 20 74  Next, fallback t
1ca0: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64 69 72  o the parent dir
1cb0: 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f 6e  ectory of the on
1cc0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20  e containing..
1cd0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1ce0: 74 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e 20  this file (i.e.
1cf0: 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c  "common.eagle"),
1d00: 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   if available...
1d10: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1d20: 20 20 20 20 20 20 20 73 65 74 20 70 61 74 68 20         set path
1d30: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a  [file dirname $: 1d40: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 :common_director 1d50: 79 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c y].. } el 1d60: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 1d70: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1d80: 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 OTE: Finally, fa 1d90: 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 70 61 llback to the pa 1da0: 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f rent directory o 1db0: 66 20 74 68 65 20 45 61 67 6c 65 54 65 73 74 0d f the EagleTest. 1dc0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 1dd0: 20 20 20 70 61 74 68 2e 20 20 54 68 65 20 45 61 path. The Ea 1de0: 67 6c 65 54 65 73 74 20 70 61 63 6b 61 67 65 20 gleTest package 1df0: 67 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 guarantees that 1e00: 74 68 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 this variable.. 1e10: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1e20: 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 will be set to 1e30: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f the directory co 1e40: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 72 ntaining the fir 1e50: 73 74 20 66 69 6c 65 20 74 6f 0d 0a 20 20 20 20 st file to.. 1e60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 # ex 1e70: 65 63 75 74 65 20 74 68 65 20 5b 72 75 6e 54 65 ecute the [runTe 1e80: 73 74 50 72 6f 6c 6f 67 75 65 5d 20 73 63 72 69 stPrologue] scri 1e90: 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65 pt library proce 1ea0: 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 dure... 1eb0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 #.. se 1ec0: 74 20 70 61 74 68 20 5b 66 69 6c 65 20 64 69 72 t path [file dir 1ed0: 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20 name$::path]..
1ee0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1ef0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1f00: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e   NOTE: If the "n
1f10: 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f  ative" runtime o
1f20: 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68  ption is set, th
1f30: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
1f40: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23  embly..        #
1f50: 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20         is being
1f60: 74 65 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74  tested.  In that
1f70: 20 63 61 73 65 2c 20 74 68 65 20 70 61 74 68 20   case, the path
1f80: 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  to the build dir
1f90: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..
1fa0: 23 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e  #       will con
1fb0: 74 61 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72  tain the platfor
1fc0: 6d 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74  m name and all t
1fd0: 68 65 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65  he binaries unde
1fe0: 72 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  r test..
1ff0: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  #       should b
2000: 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61  e present in tha
2010: 74 20 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66  t directory.  If
2020: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75   the "native" ru
2030: 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23  ntime..        #
2040: 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73         option is
2050: 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75   not set, the bu
2060: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 77 69  ild directory wi
2070: 6c 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64  ll be considered
2080: 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..
2090: 23 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72  #       "platfor
20a0: 6d 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68  m-neutral", with
20b0: 20 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63   the notable exc
20c0: 65 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61  eption of any na
20d0: 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20  tive..        #
20e0: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28        assembly (
20f0: 65 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74  e.g. "SQLite.Int
2100: 65 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65  erop.dll") copie
2110: 64 20 74 68 65 72 65 20 64 75 72 69 6e 67 20 74  d there during t
2120: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
2130: 20 20 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73      build proces
2140: 73 20 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68  s itself.  If th
2150: 65 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20  e build process
2160: 73 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74  somehow does not
2170: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2180: 20 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76    copy the nativ
2190: 65 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74  e assembly for t
21a0: 68 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f  his platform, mo
21b0: 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d  st of the tests.
21c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
21d0: 20 69 6e 20 74 68 65 20 73 75 69 74 65 20 77 69   in the suite wi
21e0: 6c 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69  ll simply be ski
21f0: 70 70 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79  pped.  Generally
2200: 20 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65   speaking, there
2210: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2220: 20 20 61 72 65 20 74 77 6f 20 77 61 79 73 20 74    are two ways t
2230: 6f 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61  o build the bina
2240: 72 69 65 73 20 77 68 65 6e 20 70 72 65 70 61 72  ries when prepar
2250: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a  ing to run the..
2260: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2270: 74 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20  test suite:..
2280: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2290: 23 20 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64  #       1. Build
22a0: 20 74 68 65 20 73 65 70 61 72 61 74 65 20 6d 61   the separate ma
22b0: 6e 61 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65  naged and native
22c0: 20 61 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e   assemblies usin
22d0: 67 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20  g some..
22e0: 23 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61  #          comma
22f0: 6e 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d  nds similar to:.
2300: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2310: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62      #          b
2320: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69  uild.bat ${Confi 2330: 67 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 guration}Managed 2340: 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d Only${Platform}
2350: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2360: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24       build.bat $2370: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e {Configuration}N 2380: 61 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 ativeOnly${Plat
2390: 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23  form}..        #
23a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
23b0: 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e       Where ${Con 23c0: 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 figuration} is e 23d0: 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 ither "Debug" or 23e0: 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a "Release" and.. 23f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2400: 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69${Platform} i
2410: 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22  s either "Win32"
2420: 20 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20   or "x64"...
2430: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2440: 20 20 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20         2. Build
2450: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
2460: 73 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20  ssembly using a
2470: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20  command similar
2480: 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  to:..        #..
2490: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
24a0: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43     build.bat ${C 24b0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b onfiguration}${
24c0: 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20  Platform}..
24d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
24e0: 20 20 20 20 20 20 20 20 20 57 68 65 72 65 20 24           Where $24f0: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 {Configuration} 2500: 69 73 20 65 69 74 68 65 72 20 22 44 65 62 75 67 is either "Debug 2510: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 " or "Release" a 2520: 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 nd.. # 2530: 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72${Platfor
2540: 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 57 69  m} is either "Wi
2550: 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20  n32" or "x64".
2560: 49 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  If this command
2570: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
2580: 20 20 20 20 20 20 20 75 73 65 64 2c 20 76 61 72         used, var
2590: 69 6f 75 73 20 74 65 73 74 73 20 74 68 61 74 20  ious tests that
25a0: 72 65 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65  require suppleme
25b0: 6e 74 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20  ntary managed..
25c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
25d0: 20 20 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e    assemblies (e.
25e0: 67 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20  g. LINQ) may be
25f0: 73 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74  skipped unless t
2600: 68 6f 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20  hose binaries..
2610: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
2620: 20 20 61 72 65 20 73 75 62 73 65 71 75 65 6e 74    are subsequent
2630: 6c 79 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74  ly copied into t
2640: 68 65 20 63 6f 72 72 65 63 74 20 64 69 72 65 63  he correct direc
2650: 74 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20  tory (i.e. by..
2660: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
2670: 20 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22    "test_all.bat"
2680: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  )...        #..
2690: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e         #       N
26a0: 6f 74 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20  ote that all of
26b0: 74 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e  the build comman
26c0: 64 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65  ds above will de
26d0: 66 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a  fault to using..
26e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
26f0: 74 68 65 20 6c 61 74 65 73 74 20 76 65 72 73 69  the latest versi
2700: 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76  on of MSBuild av
2710: 61 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20  ailable and the
2720: 22 74 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d  "test_year" may.
2730: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2740: 20 6e 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75   need to be adju
2750: 73 74 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79  sted accordingly
2760: 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e   to actually run
2770: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e   the test suite.
2780: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2790: 20 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 63    Refer to the c
27a0: 6f 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42  omments in [getB
27b0: 75 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f  uildYear] for mo
27c0: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  re information o
27d0: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
27e0: 20 20 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68     how to set th
27f0: 69 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20  is variable...
2800: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2810: 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65   if {[hasRuntime
2820: 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20  Option native]}
2830: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2840: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a    return [file j
2850: 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20 5b 67  oin $path bin [g 2860: 65 74 42 75 69 6c 64 59 65 61 72 5d 20 5b 6d 61 etBuildYear] [ma 2870: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 chineToPlatform 2880: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2890: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
28a0: 28 6d 61 63 68 69 6e 65 29 5d 20 5b 67 65 74 42  (machine)] [getB
28b0: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
28c0: 6e 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  n]]..        } e
28d0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
28e0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f   return [file jo
28f0: 69 6e 20 24 70 61 74 68 20 62 69 6e 20 5b 67 65  in $path bin [ge 2900: 74 42 75 69 6c 64 59 65 61 72 5d 20 5b 67 65 74 tBuildYear] [get 2910: 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 BuildConfigurati 2920: 6f 6e 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 on] \.. 2930: 20 20 20 20 20 62 69 6e 5d 0d 0a 20 20 20 20 20 bin].. 2940: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 2950: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 2960: 63 20 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 c getBuildFileNa 2970: 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 me { fileName } 2980: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 2990: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return 29a0: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 s the specified 29b0: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 file name as if 29c0: 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 it were located 29d0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 in the.. # 29e0: 20 20 20 20 20 20 62 75 69 6c 64 20 64 69 72 65 build dire 29f0: 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e ctory, discardin 2a00: 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 g any directory 2a10: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 information pres 2a20: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ent.. # 2a30: 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e in the file n 2a40: 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 ame as provided 2a50: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... 2a60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 2a70: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 eturn [file nati 2a80: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 vename \.. 2a90: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b [file join [ 2aa0: 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 getBuildDirector 2ab0: 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 y] [file tail$f
2ac0: 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20  ileName]]]..
2ad0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
2ae0: 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72  etBinaryDirector
2af0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  y {} {..      #.
2b00: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
2b10: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65  his procedure re
2b20: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74  turns the direct
2b30: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65  ory where the te
2b40: 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a  st application..
2b50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74        #       it
2b60: 73 65 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45  self (i.e. the E
2b70: 61 67 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c  agle shell) is l
2b80: 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20 77 69  ocated.  This wi
2b90: 6c 6c 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20  ll be used as..
2ba0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
2bb0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72   destination for
2bc0: 20 74 68 65 20 63 6f 70 69 65 64 20 53 79 73 74   the copied Syst
2bd0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e  em.Data.SQLite n
2be0: 61 74 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20  ative and..
2bf0: 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64   #       managed
2c00: 20 61 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65   assemblies (i.e
2c10: 2e 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69  . because this i
2c20: 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77  s one of the few
2c30: 20 70 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23   places..      #
2c40: 20 20 20 20 20 20 20 77 68 65 72 65 20 74 68 65         where the
2c50: 20 43 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c   CLR will actual
2c60: 6c 79 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64  ly find and load
2c70: 20 74 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e   them properly).
2c80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
2c90: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
2ca0: 73 20 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63  s ::binary_direc
2cb0: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
2cc0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
2cd0: 6e 67 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64  ngth $::binary_d 2ce0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 2cf0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 2d00: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2d10: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 2d20: 66 20 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 f the binary dir 2d30: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 2d40: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 overridden;.. 2d50: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 2d60: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 refore, use it v 2d70: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 erbatim... 2d80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 2d90: 75 72 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 urn$::binary_di
2da0: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
2db0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
2dc0: 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69   return [info bi
2dd0: 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  nary]..      }..
2de0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
2df0: 6f 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c 65  oc getBinaryFile
2e00: 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20  Name { fileName
2e10: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
2e20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
2e30: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65  rns the specifie
2e40: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69  d file name as i
2e50: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65  f it were locate
2e60: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  d in the..
2e70: 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64  #       binary d
2e80: 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72  irectory, discar
2e90: 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f  ding any directo
2ea0: 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70  ry information p
2eb0: 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20  resent..      #
2ec0: 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c        in the fil
2ed0: 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64  e name as provid
2ee0: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
2ef0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
2f00: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e    return [file n
2f10: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
2f20: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
2f30: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
2f40: 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69  ctory] [file tai
2f50: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a  l $fileName]]].. 2f60: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 2f70: 6f 63 20 67 65 74 43 6f 72 65 42 69 6e 61 72 79 oc getCoreBinary 2f80: 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 73 74 61 6e FileName { {stan 2f90: 64 61 72 64 20 66 61 6c 73 65 7d 20 7d 20 7b 0d dard false} } {. 2fa0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2fb0: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 # NOTE: Returns 2fc0: 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f the full path fo 2fd0: 72 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 r the file conta 2fe0: 69 6e 69 6e 67 20 74 68 65 20 63 6f 72 65 20 53 ining the core S 2ff0: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20 20 QLite.. # 3000: 20 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f 64 library cod 3010: 65 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 e for this platf 3020: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 orm... #.. 3030: 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e if {[hasRun 3040: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 timeOption nativ 3050: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 3060: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 3070: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 NOTE: Return th 3080: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 3090: 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e embly file name. 30a0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 30b0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 30c0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a e nativename \.. 30d0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 30e0: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 e join [getBinar 30f0: 79 44 69 72 65 63 74 6f 72 79 5d 20 53 79 73 74 yDirectory] Syst 3100: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 3110: 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c ll]].. } el 3120: 73 65 69 66 20 7b 24 73 74 61 6e 64 61 72 64 7d seif {$standard}
3130: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
3140: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
3150: 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  TE: Return the n
3160: 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64  ative-only stand
3170: 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61  ard SQLite libra
3180: 72 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20  ry file name...
3190: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
31a0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e    return [file n
31b0: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
31c0: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a           [file j
31d0: 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69  oin [getBinaryDi
31e0: 72 65 63 74 6f 72 79 5d 20 73 71 6c 69 74 65 33  rectory] sqlite3
31f0: 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20  .dll]]..      }
3200: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
3210: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
3220: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  E: Return the na
3230: 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f  tive-only intero
3240: 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20  p assembly file
3250: 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  name...        #
3260: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3270: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
3280: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
3290: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
32a0: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d  BinaryDirectory]
32b0: 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e   SQLite.Interop.
32c0: 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  dll]]..      }..
32d0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
32e0: 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 44 69  oc getDatabaseDi
32f0: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
3300: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
3310: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
3320: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the
3330: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where
3340: 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73  the test databas
3350: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  es..      #
3360: 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61    should be loca
3370: 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74  ted.  By default
3380: 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73  , this just uses
3390: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a   the temporary..
33a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69        #       di
33b0: 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72  rectory configur
33c0: 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74  ed for this syst
33d0: 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  em...      #..
33e0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
33f0: 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 5f  ists ::database_
3400: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d  directory] && \.
3410: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
3420: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74  ng length $::dat 3430: 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d abase_directory] 3440: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 3450: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 3460: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 # NOTE: The loc 3470: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 ation of the dat 3480: 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 abase directory 3490: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 has been overrid 34a0: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 den;.. # 34b0: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 34c0: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... 34d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 34e0: 75 72 6e 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c urn [file normal 34f0: 69 7a 65 20 24 3a 3a 64 61 74 61 62 61 73 65 5f ize$::database_
3500: 64 69 72 65 63 74 6f 72 79 5d 0d 0a 20 20 20 20  directory]..
3510: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
3520: 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54      return [getT
3530: 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20  emporaryPath]..
3540: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
3550: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65  ..    proc getTe
3560: 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79  mporaryDirectory
3570: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
3580: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
3590: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
35a0: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f  urns the directo
35b0: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 6d  ry where the tem
35c0: 70 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20  porary files..
35d0: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75      #       shou
35e0: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20  ld be located.
35f0: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73  By default, this
3600: 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74   just uses the t
3610: 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20  emporary..
3620: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72  #       director
3630: 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72  y configured for
3640: 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20   this system...
3650: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
3660: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
3670: 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63  :temporary_direc
3680: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
3690: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
36a0: 6e 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72  ngth $::temporar 36b0: 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 y_directory] > 0 36c0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 36d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 36e0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 36f0: 6e 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 n of the tempora 3700: 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 ry directory has 3710: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e been overridden 3720: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 3730: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 3740: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 e it... # 3750: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 3760: 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 [file normalize 3770: 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69$::temporary_di
3780: 72 65 63 74 6f 72 79 5d 0d 0a 20 20 20 20 20 20  rectory]..
3790: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
37a0: 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d    return [getTem
37b0: 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20  poraryPath]..
37c0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
37d0: 20 20 20 20 70 72 6f 63 20 67 65 74 41 70 70 44      proc getAppD
37e0: 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20 7b 20  omainPreamble {
37f0: 7b 70 72 65 66 69 78 20 22 22 7d 20 7b 73 75 66  {prefix ""} {suf
3800: 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  fix ""} } {..
3810: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
3820: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
3830: 72 65 20 72 65 74 75 72 6e 73 20 61 20 74 65 73  re returns a tes
3840: 74 20 73 65 74 75 70 20 73 63 72 69 70 74 20 73  t setup script s
3850: 75 69 74 61 62 6c 65 20 66 6f 72 20 65 76 61 6c  uitable for eval
3860: 75 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  uation..      #
3870: 20 20 20 20 20 20 62 79 20 61 20 74 65 73 74 20        by a test
3880: 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61  interpreter crea
3890: 74 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74  ted in an isolat
38a0: 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64  ed application d
38b0: 6f 6d 61 69 6e 2e 0d 0a 20 20 20 20 20 20 23 20  omain...      #
38c0: 20 20 20 20 20 20 54 68 65 20 73 63 72 69 70 74        The script
38d0: 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20   being returned
38e0: 77 69 6c 6c 20 62 65 20 73 75 72 72 6f 75 6e 64  will be surround
38f0: 65 64 20 62 79 20 74 68 65 20 70 72 65 66 69 78  ed by the prefix
3900: 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 20   and..      #
3910: 20 20 20 20 73 75 66 66 69 78 20 22 73 63 72 69      suffix "scri
3920: 70 74 20 66 72 61 67 6d 65 6e 74 73 22 20 73 70  pt fragments" sp
3930: 65 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63  ecified by our c
3940: 61 6c 6c 65 72 2c 20 69 66 20 61 6e 79 2e 20 20  aller, if any.
3950: 54 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  The..      #
3960: 20 20 20 65 6e 74 69 72 65 20 73 63 72 69 70 74     entire script
3970: 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20   being returned
3980: 77 69 6c 6c 20 62 65 20 73 75 62 73 74 69 74 75  will be substitu
3990: 74 65 64 20 76 69 61 20 5b 73 75 62 73 74 5d 2c  ted via [subst],
39a0: 20 69 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20   in..      #
39b0: 20 20 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f     the context o
39c0: 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54  f our caller.  T
39d0: 68 69 73 20 73 74 65 70 20 69 73 20 6e 65 63 65  his step is nece
39e0: 73 73 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f  ssary so that so
39f0: 6d 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  me..      #
3a00: 20 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78    limited contex
3a10: 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 70  t information, p
3a20: 72 69 6d 61 72 69 6c 79 20 72 65 6c 61 74 65 64  rimarily related
3a30: 20 74 6f 20 74 68 65 20 74 65 73 74 20 62 75 69   to the test bui
3a40: 6c 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ld..      #
3a50: 20 20 64 69 72 65 63 74 6f 72 79 2c 20 63 61 6e    directory, can
3a60: 20 62 65 20 74 72 61 6e 73 66 65 72 72 65 64 20   be transferred
3a70: 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 74  to the interpret
3a80: 65 72 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74  er in the isolat
3a90: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
3aa0: 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f    application do
3ab0: 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 20  main, making it
3ac0: 61 62 6c 65 20 74 6f 20 73 75 63 63 65 73 73 66  able to successf
3ad0: 75 6c 6c 79 20 72 75 6e 20 74 65 73 74 73 20 74  ully run tests t
3ae0: 68 61 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  hat..      #
3af0: 20 20 20 72 65 71 75 69 72 65 20 6f 6e 65 20 6f     require one o
3b00: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 66 69  r more of the fi
3b10: 6c 65 73 20 69 6e 20 74 68 65 20 62 75 69 6c 64  les in the build
3b20: 20 64 69 72 65 63 74 6f 72 79 2e 20 20 43 61 6c   directory.  Cal
3b30: 6c 65 72 73 0d 0a 20 20 20 20 20 20 23 20 20 20  lers..      #
3b40: 20 20 20 20 74 6f 20 74 68 69 73 20 70 72 6f 63      to this proc
3b50: 65 64 75 72 65 20 73 68 6f 75 6c 64 20 6b 65 65  edure should kee
3b60: 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 20 74  p in mind that t
3b70: 68 65 20 74 65 73 74 20 73 63 72 69 70 74 20 62  he test script b
3b80: 65 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20  eing..      #
3b90: 20 20 20 20 72 65 74 75 72 6e 65 64 20 63 61 6e      returned can
3ba0: 6e 6f 74 20 72 65 6c 79 20 6f 6e 20 61 6e 79 20  not rely on any
3bb0: 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70  script library p
3bc0: 72 6f 63 65 64 75 72 65 73 20 6e 6f 74 20 64 65  rocedures not de
3bd0: 66 69 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 20  fined..      #
3be0: 20 20 20 20 20 62 79 20 74 68 65 20 45 61 67 6c       by the Eagl
3bf0: 65 2e 4c 69 62 72 61 72 79 20 70 61 63 6b 61 67  e.Library packag
3c00: 65 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61  e (i.e. "init.ea
3c10: 67 6c 65 22 29 2e 20 20 41 6c 73 6f 2c 20 61 6c  gle").  Also, al
3c20: 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  l..      #
3c30: 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65   variable refere
3c40: 6e 63 65 73 20 61 6e 64 20 61 6c 6c 20 22 6e 65  nces and all "ne
3c50: 73 74 65 64 22 20 63 6f 6d 6d 61 6e 64 73 20 28  sted" commands (
3c60: 69 2e 65 2e 20 74 68 6f 73 65 20 69 6e 0d 0a 20  i.e. those in..
3c70: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 71 75       #       squ
3c80: 61 72 65 20 62 72 61 63 6b 65 74 73 29 2c 20 75  are brackets), u
3c90: 6e 6c 65 73 73 20 74 68 65 79 20 61 72 65 20 73  nless they are s
3ca0: 70 65 63 69 61 6c 6c 79 20 71 75 6f 74 65 64 2c  pecially quoted,
3cb0: 20 77 69 6c 6c 20 65 6e 64 20 75 70 0d 0a 20 20   will end up..
3cc0: 20 20 20 20 23 20 20 20 20 20 20 20 62 65 69 6e      #       bein
3cd0: 67 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74  g evaluated in t
3ce0: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68  he context of th
3cf0: 65 20 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70  e calling interp
3d00: 72 65 74 65 72 20 61 6e 64 20 6e 6f 74 0d 0a 20  reter and not..
3d10: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
3d20: 20 74 65 73 74 20 69 6e 74 65 72 70 72 65 74 65   test interprete
3d30: 72 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65  r created in the
3d40: 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63   isolated applic
3d50: 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2e 0d 0a 20  ation domain...
3d60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
3d70: 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20  turn [uplevel 1
3d80: 5b 6c 69 73 74 20 73 75 62 73 74 20 5b 61 70 70  [list subst [app
3d90: 65 6e 64 41 72 67 73 20 24 70 72 65 66 69 78 20  endArgs $prefix 3da0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 3db0: 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e hasRuntimeOption 3dc0: 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b native]} then { 3dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 3de0: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 ct invoke Interp 3df0: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 reter.GetActive 3e00: 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e AddRuntimeOption 3e10: 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 native.. 3e20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 }.... se 3e30: 74 20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c t ::test_channel 3e40: 20 7b 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 {$::test_channe
3e50: 6c 7d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  l}..        set
3e60: 3a 3a 70 61 74 68 20 7b 24 3a 3a 70 61 74 68 7d  ::path {$::path} 3e70: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a .. set :: 3e80: 74 65 73 74 5f 79 65 61 72 20 7b 5b 67 65 74 42 test_year {[getB 3e90: 75 69 6c 64 59 65 61 72 5d 7d 0d 0a 20 20 20 20 uildYear]}.. 3ea0: 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 set ::test_c 3eb0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 5b 67 onfiguration {[g 3ec0: 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 etBuildConfigura 3ed0: 74 69 6f 6e 5d 7d 0d 0a 20 20 20 20 20 20 7d 20 tion]}.. } 3ee0: 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 20 20$suffix]]]..
3ef0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
3f00: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
3f10: 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a  { fileName } {..
3f20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
3f30: 20 4e 4f 54 45 3a 20 49 66 20 77 65 20 63 61 6e   NOTE: If we can
3f40: 6e 6f 74 20 63 6f 70 79 20 74 68 65 20 61 73 73  not copy the ass
3f50: 65 6d 62 6c 79 20 74 68 65 6e 20 69 74 20 69 73  embly then it is
3f60: 20 70 72 6f 62 61 62 6c 79 20 61 6c 72 65 61 64   probably alread
3f70: 79 20 6c 6f 61 64 65 64 2e 0d 0a 20 20 20 20 20  y loaded...
3f80: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f   #..      set so
3f90: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65  urceFileName [ge
3fa0: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24  tBuildFileName $3fb0: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... 3fc0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex 3fd0: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 ists$sourceFile
3fe0: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
3ff0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 4000: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 4010: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 4020: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk 4030: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 75 ipped copying bu 4040: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 73 6f ild file \""$so
4050: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
4060: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
4070: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
4080: 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  st\n"]....
4090: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20    return..
40a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74  }....      set t
40b0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67  argetFileName [g
40c0: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
40d0: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 40e0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 40f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 4100: 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 file copy -forc 4110: 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d e$sourceFileNam
4120: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  e $targetFileNam 4130: 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b e}] == 0} then { 4140: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 4150: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
4160: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
4170: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
4180: 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69   copied build fi
4190: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou 41a0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 rceFileName "\" 41b0: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 to \"" \.. 41c0: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c$targetFil
41d0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
41e0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
41f0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 4200: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 4210: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 4220: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c "---- fail 4230: 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c 64 ed to copy build 4240: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 file from \""$
4250: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c  sourceFileName \
4260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c  ..            "\
4270: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74  " to \"" $target 4280: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a FileName \"\n].. 4290: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 42a0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 ... proc tryD 42b0: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 42c0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a { fileName } {.. 42d0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 42e0: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c me [getBinaryFil 42f0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d eName$fileName]
4300: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
4310: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 4320: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 4330: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
4340: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
4350: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
4360: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
4370: 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20  kipped deleting
4380: 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20  binary file \""
4390: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  $fileName \.. 43a0: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 "\", it 43b0: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c does not exist\ 43c0: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 n"].... r 43d0: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a eturn.. }.. 43e0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 43f0: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 ch {file delete 4400: 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30$fileName}] == 0
4410: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
4420: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 4430: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 4440: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 4450: 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 "---- deleted 4460: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 binary file \"" 4470: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d$fileName \"\n]
4480: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
4490: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
44a0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 44b0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 44c0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 44d0: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 44e0: 65 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 e binary file \" 44f0: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e "$fileName \"\n
4500: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
4510: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
4520: 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b  ryCopyAssembly {
4530: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 64 62 20 74   fileName {pdb t
4540: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
4550: 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65  tryCopyBuildFile
4560: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName.... 4570: 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 if {$pdb} th
4580: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72  en {..        tr
4590: 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 5b  yCopyBuildFile [
45a0: 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65  appendArgs [file
45b0: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e   rootname $fileN 45c0: 61 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20 20 ame] .pdb].. 45d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 45e0: 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 proc tryDelet 45f0: 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 eAssembly { file 4600: 4e 61 6d 65 20 7b 70 64 62 20 74 72 75 65 7d 20 Name {pdb true} 4610: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 } {.. tryDe 4620: 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 leteBinaryFile$
4630: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20  fileName....
4640: 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e    if {$pdb} then 4650: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44 {.. tryD 4660: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 4670: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c [appendArgs [fil 4680: 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 e rootname$file
4690: 4e 61 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20  Name] .pdb]..
46a0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
46b0: 20 20 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64      proc tryLoad
46c0: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e  Assembly { fileN
46d0: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  ame } {..      s
46e0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74  et fileName [get
46f0: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $4700: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... 4710: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 if {[catch {s 4720: 65 74 20 61 73 73 65 6d 62 6c 79 20 5c 0d 0a 20 et assembly \.. 4730: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 [ob 4740: 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 ject load -loadt 4750: 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 ype File -alias 4760: 24 66 69 6c 65 4e 61 6d 65 5d 7d 5d 20 3d 3d 20$fileName]}] ==
4770: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
4780: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
4790: 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 64 20 74  NOTE: Now, add t
47a0: 68 65 20 6e 65 63 65 73 73 61 72 79 20 74 65 73  he necessary tes
47b0: 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20  t constraint...
47c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
47d0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
47e0: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b  [file rootname [
47f0: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN 4800: 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ame]].... 4810: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 4820: 54 45 3a 20 47 72 61 62 20 74 68 65 20 69 6d 61 TE: Grab the ima 4830: 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 ge runtime versi 4840: 6f 6e 20 66 72 6f 6d 20 74 68 65 20 61 73 73 65 on from the asse 4850: 6d 62 6c 79 20 62 65 63 61 75 73 65 0d 0a 20 20 mbly because.. 4860: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se 4870: 76 65 72 61 6c 20 74 65 73 74 73 20 72 65 6c 79 veral tests rely 4880: 20 6f 6e 20 69 74 20 68 61 76 69 6e 67 20 61 20 on it having a 4890: 63 65 72 74 61 69 6e 20 76 61 6c 75 65 2e 0d 0a certain value... 48a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 48b0: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 48c0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 [appendArgs [fi 48d0: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
48e0: 65 5d 20 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  e] _ \..
48f0: 20 20 20 20 5b 24 61 73 73 65 6d 62 6c 79 20 49      [$assembly I 4900: 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 mageRuntimeVersi 4910: 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 on]].... 4920: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 4930: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 66 75 E: Return the fu 4940: 6c 6c 20 70 61 74 68 20 6f 66 20 74 68 65 20 6c ll path of the l 4950: 6f 61 64 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 oaded file... 4960: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4970: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 return$fileName
4980: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
4990: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
49a0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
49b0: 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 20   checkForSQLite
49c0: 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20  { channel } {..
49d0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 49e0: 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 nel "---- checki 49f0: 6e 67 20 66 6f 72 20 63 6f 72 65 20 53 51 4c 69 ng for core SQLi 4a00: 74 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d te library... ". 4a10: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca 4a20: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 4a30: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 4a40: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 4a50: 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 blic System.Data 4a60: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 4a70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 4a80: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 7d 20 SQLiteVersion} 4a90: 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 version] == 0} t 4aa0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 4ab0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 4ac0: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 : Attempt to que 4ad0: 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f ry the Fossil so 4ae0: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 urce identifier 4af0: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a for the SQLite.. 4b00: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 4b10: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 core library... 4b20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4b30: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 4b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4b50: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 4b60: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 4b70: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 4b80: 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 te.SQLite3 \.. 4b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 SQ 4ba0: 4c 69 74 65 53 6f 75 72 63 65 49 64 7d 20 73 6f LiteSourceId} so 4bb0: 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b 0d urceId]} then {. 4bc0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 4bd0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 4be0: 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 75 65 We failed to que 4bf0: 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f ry the Fossil so 4c00: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 2e urce identifier. 4c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 4c20: 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 set sou 4c30: 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 rceId unknown.. 4c40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 4c50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4c60: 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 NOTE: Yes, the 4c70: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 4c80: 61 72 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 ary appears to b 4c90: 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 e available... 4ca0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4cb0: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 addConstraint S 4cc0: 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20 QLite.... 4cd0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
4ce0: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73  [appendArgs "yes
4cf0: 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22   (" $version " " 4d00: 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22$sourceId ")\n"
4d10: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
4d20: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
4d30: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n.. 4d40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 4d50: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 ... proc chec 4d60: 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 kForSQLiteDefine 4d70: 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61 6e 6e Constant { chann 4d80: 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 el name } {.. 4d90: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
4da0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
4db0: 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d  .          "----
4dc0: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79   checking for Sy
4dd0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
4de0: 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74   define constant
4df0: 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 20   \"" $name \.. 4e00: 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 22 "\"... " 4e10: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ 4e20: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 4e30: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 4e40: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 4e50: 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 Public System.Da 4e60: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 4e70: 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 3 \.. 4e80: 20 20 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e DefineConstan 4e90: 74 73 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 ts} defineConsta 4ea0: 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 nts] == 0} then 4eb0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 4ec0: 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d lsearch -exact - 4ed0: 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65 43 6f nocase$defineCo
4ee0: 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d 20 21  nstants $name] ! 4ef0: 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 = -1} then {.. 4f00: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 4f10: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 # NOTE: Yes 4f20: 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20 63 6f , this define co 4f30: 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61 62 6c nstant was enabl 4f40: 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61 6e 61 ed when the mana 4f50: 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ged.. # 4f60: 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 assembly 4f70: 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 was compiled... 4f80: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 4f90: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra 4fa0: 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 4fb0: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 defineConstant.S 4fc0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 4fd0: 65 2e 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 e.$name]....
4fe0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 4ff0: 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 annel yes\n.. 5000: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 5010: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
5020: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20  channel no\n..
5030: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
5040: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
5050: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 5060: 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d error\n.. } 5070: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 5080: 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d 65 proc getDateTime 5090: 46 6f 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20 20 20 Format {} {.. 50a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 50b0: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 TE: This procedu 50c0: 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e re simply return 50d0: 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 22 20 s the "default" 50e0: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 DateTime format 50f0: 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 used.. # 5100: 20 20 20 20 62 79 20 74 68 65 20 74 65 73 74 20 by the test 5110: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d suite... #. 5120: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 5130: 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 74 69 exists ::dateti 5140: 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 5c 0d me_format] && \. 5150: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 5160: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 ng length$::dat
5170: 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e 20  etime_format] >
5180: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
5190: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
51a0: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
51b0: 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69   manually overri
51c0: 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72 20 74  dden value for t
51d0: 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d  he DateTime form
51e0: 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  at...        #..
51f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $5200: 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 ::datetime_forma 5210: 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 t.. } else 5220: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 5230: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 5240: 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 31 20 turn an ISO8601 5250: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 DateTime format 5260: 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 compatible with 5270: 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 20 20 SQLite,.. 5280: 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e # System. 5290: 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 6e 64 Data.SQLite, and 52a0: 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 72 6f suitable for ro 52b0: 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 69 74 und-tripping wit 52c0: 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 h the.. # 52d0: 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 20 DateTime 52e0: 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 72 61 class of the fra 52f0: 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 69 73 mework. If this 5300: 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e 67 65 value is change 5310: 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 d,.. # 5320: 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 73 74 various test 5330: 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 20 20 s may fail... 5340: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5350: 72 65 74 75 72 6e 20 22 79 79 79 79 2d 4d 4d 2d return "yyyy-MM- 5360: 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 dd HH:mm:ss.FFFF 5370: 46 46 46 4b 22 0d 0a 20 20 20 20 20 20 7d 0d 0a FFFK".. }.. 5380: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 5390: 6f 63 20 65 6e 75 6d 65 72 61 62 6c 65 54 6f 4c oc enumerableToL 53a0: 69 73 74 20 7b 20 65 6e 75 6d 65 72 61 62 6c 65 ist { enumerable 53b0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set 53c0: 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d result [list]... 53d0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 53e0: 6e 67 20 6c 65 6e 67 74 68 20 24 65 6e 75 6d 65 ng length$enume
53f0: 72 61 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20 24  rable] == 0 || $5400: 65 6e 75 6d 65 72 61 62 6c 65 20 65 71 20 22 6e enumerable eq "n 5410: 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ull"} then {.. 5420: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
5430: 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  sult..      }...
5440: 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f  .      object fo
5450: 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69 74 65  reach -alias ite
5460: 6d 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 7b 0d  m $enumerable {. 5470: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st 5480: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 69 74 65 ring length$ite
5490: 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  m] > 0} then {..
54a0: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
54b0: 64 20 72 65 73 75 6c 74 20 5b 24 69 74 65 6d 20  d result [$item 54c0: 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20 20 20 ToString].. 54d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 54e0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 . return$r
54f0: 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  esult..    }....
5500: 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63 68 41  .    proc catchA
5510: 6e 64 52 65 74 75 72 6e 20 7b 20 73 63 72 69 70  ndReturn { scrip
5520: 74 20 7b 73 74 61 63 6b 54 72 61 63 65 20 66 61  t {stackTrace fa
5530: 6c 73 65 7d 20 7b 73 74 72 69 63 74 20 74 72 75  lse} {strict tru
5540: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
5550: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45  .      # NOTE: E
5560: 76 61 6c 75 61 74 65 20 74 68 65 20 73 63 72 69  valuate the scri
5570: 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f  pt provided by o
5580: 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 74 68 65  ur caller in the
5590: 69 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  ir context,..
55a0: 20 20 20 23 20 20 20 20 20 20 20 63 61 70 74 75     #       captu
55b0: 72 69 6e 67 20 62 6f 74 68 20 74 68 65 20 72 65  ring both the re
55c0: 73 75 6c 74 20 61 6e 64 20 74 68 65 20 72 65 74  sult and the ret
55d0: 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...
55e0: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f   #..      set co
55f0: 64 65 20 5b 63 61 74 63 68 20 7b 75 70 6c 65 76  de [catch {uplev
5600: 65 6c 20 31 20 24 73 63 72 69 70 74 7d 20 72 65  el 1 $script} re 5610: 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 sult].... # 5620: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 5630: 44 69 64 20 74 68 65 20 73 63 72 69 70 74 20 70 Did the script p 5640: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 rovided by our c 5650: 61 6c 6c 65 72 20 4e 4f 54 20 72 61 69 73 65 20 aller NOT raise 5660: 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 20 20 20 an error?.. 5670: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 73 #.. if {$s
5680: 74 72 69 63 74 20 26 26 20 24 63 6f 64 65 20 3d  trict && $code = 5690: 3d 20 30 20 7c 7c 20 21 24 73 74 72 69 63 74 20 = 0 || !$strict
56a0: 26 26 20 24 63 6f 64 65 20 21 3d 20 31 7d 20 74  && $code != 1} t 56b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 56c0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 56d0: 3a 20 53 75 63 63 65 73 73 2e 20 20 52 65 74 75 : Success. Retu 56e0: 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 rn a list with t 56f0: 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 he return code a 5700: 6e 64 20 74 68 65 20 72 65 73 75 6c 74 2e 0d 0a nd the result... 5710: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 5720: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list 5730: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a$code $result].. 5740: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 5750: 24 73 74 61 63 6b 54 72 61 63 65 7d 20 74 68 65$stackTrace} the
5760: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
5770: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
5780: 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61  Failure.  Our ca
5790: 6c 6c 65 72 20 77 61 6e 74 73 20 61 20 66 75 6c  ller wants a ful
57a0: 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20 28 69  l stack trace (i
57b0: 66 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 0d 0a  f applicable),..
57c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
57d0: 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69  return a list wi
57e0: 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f  th the return co
57f0: 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c  de and the resul
5800: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20  t verbatim...
5810: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
5820: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f  return [list $co 5830: 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 de$result]..
5840: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
5850: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
5860: 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e  # NOTE: Failure.
5870: 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 64 6f 65    Our caller doe
5880: 73 20 6e 6f 74 20 77 61 6e 74 20 61 20 66 75 6c  s not want a ful
5890: 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20 28 69  l stack trace (i
58a0: 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  f..        #
58b0: 20 20 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 20     applicable),
58c0: 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69  return a list wi
58d0: 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f  th the return co
58e0: 64 65 2c 20 74 68 65 20 65 72 72 6f 72 0d 0a 20  de, the error..
58f0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
5900: 6f 64 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65  ode for the inte
5910: 72 70 72 65 74 65 72 2c 20 61 6e 64 20 74 68 65  rpreter, and the
5920: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 75   error message u
5930: 70 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  p to the..
5940: 20 20 23 20 20 20 20 20 20 20 70 6f 69 6e 74 20    #       point
5950: 77 68 65 72 65 20 74 68 65 20 73 74 61 63 6b 20  where the stack
5960: 74 72 61 63 65 20 73 68 6f 75 6c 64 20 73 74 61  trace should sta
5970: 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rt...        #..
5980: 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 64 65          set inde
5990: 78 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20  x [string first
59a0: 22 20 20 20 61 74 20 22 20 24 72 65 73 75 6c 74  "   at " $result 59b0: 5d 3b 20 23 20 48 41 43 4b 3a 20 52 65 6c 69 61 ]; # HACK: Relia 59c0: 62 6c 65 3f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ble?.... 59d0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f return [list$co
59e0: 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f 64 65 20  de $::errorCode 59f0: 5b 65 78 70 72 20 7b 24 69 6e 64 65 78 20 21 3d [expr {$index !=
5a00: 20 2d 31 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20   -1 ? \..
5a10: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 74 72 69       [string tri
5a20: 6d 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20  m [string range
5a30: 24 72 65 73 75 6c 74 20 30 20 24 69 6e 64 65 78  $result 0$index
5a40: 5d 5d 20 3a 20 24 72 65 73 75 6c 74 7d 5d 5d 0d  ]] : $result}]]. 5a50: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 5a60: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d .... proc com 5a70: 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 7b pileCSharpWith { 5a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 .. te 5a90: 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62 6f 6c xt memory symbol 5aa0: 73 20 73 74 72 69 63 74 20 72 65 73 75 6c 74 73 s strict results 5ab0: 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 56 61 VarName errorsVa 5ac0: 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 73 0d rName fileNames. 5ad0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 . arg 5ae0: 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a s } {.. #.. 5af0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 # NOTE: Si 5b00: 6e 63 65 20 77 65 20 61 72 65 20 67 6f 69 6e 67 nce we are going 5b10: 20 74 6f 20 75 73 65 20 74 68 69 73 20 6d 65 74 to use this met 5b20: 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 hod name a lot, 5b30: 61 73 73 69 67 6e 20 69 74 20 74 6f 20 61 0d 0a assign it to a.. 5b40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 # va 5b50: 72 69 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a 20 riable first... 5b60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 5b70: 74 20 61 64 64 20 52 65 66 65 72 65 6e 63 65 64 t add Referenced 5b80: 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 0d 0a Assemblies.Add.. 5b90: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5ba0: 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 # NOTE: Create 5bb0: 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64 the base command 5bc0: 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 6e 64 to evaluate and 5bd0: 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 72 74 add the propert 5be0: 79 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 20 20 y settings.. 5bf0: 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 61 # that a 5c00: 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 re almost always 5c10: 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72 20 75 needed by our u 5c20: 6e 69 74 20 74 65 73 74 73 20 28 69 2e 65 2e 20 nit tests (i.e. 5c30: 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 20 20 20 the System.. 5c40: 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 53 79 # and Sy 5c50: 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 6d 62 stem.Data assemb 5c60: 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 2e 0d ly references).. 5c70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5c80: 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 set command [lis 5c90: 74 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 t compileCSharp 5ca0: 24 74 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73$text $memory$s
5cb0: 79 6d 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72  ymbols $strict r 5cc0: 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 esults \.. 5cd0: 20 20 20 20 65 72 72 6f 72 73 20 24 61 64 64 20 errors$add
5ce0: 53 79 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20  System.dll $add 5cf0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 System.Data.dll 5d00: 24 61 64 64 20 53 79 73 74 65 6d 2e 58 6d 6c 2e$add System.Xml.
5d10: 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  dll]....      #.
5d20: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
5d30: 64 64 20 61 6c 6c 20 74 68 65 20 70 72 6f 76 69  dd all the provi
5d40: 64 65 64 20 66 69 6c 65 20 6e 61 6d 65 73 20 61  ded file names a
5d50: 73 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72  s assembly refer
5d60: 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d  ences...      #.
5d70: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66  .      foreach f
5d80: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam 5d90: 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61 es {.. la 5da0: 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 ppend command$a
5db0: 64 64 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  dd [getBinaryFil
5dc0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d  eName $fileName] 5dd0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 5de0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 5df0: 54 45 3a 20 41 64 64 20 74 68 65 20 65 78 74 72 TE: Add the extr 5e00: 61 20 61 72 67 75 6d 65 6e 74 73 2c 20 69 66 20 a arguments, if 5e10: 61 6e 79 2c 20 74 6f 20 74 68 65 20 63 6f 6d 6d any, to the comm 5e20: 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 2e and to evaluate. 5e30: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5e40: 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 63 6f eval lappend co 5e50: 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a 0d 0a 20 mmand$args....
5e60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
5e70: 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74 68 65 20  NOTE: Alias the
5e80: 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 6c 20 72  compiler local r
5e90: 65 73 75 6c 74 73 20 61 6e 64 20 65 72 72 6f 72  esults and error
5ea0: 73 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20 74  s variables to t
5eb0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
5ec0: 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73    variable names
5ed0: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
5ee0: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...
5ef0: 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  #..      upvar 1
5f00: 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65   $resultsVarName 5f10: 20 72 65 73 75 6c 74 73 0d 0a 20 20 20 20 20 20 results.. 5f20: 75 70 76 61 72 20 31 20 24 65 72 72 6f 72 73 56 upvar 1$errorsV
5f30: 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a 0d  arName errors...
5f40: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
5f50: 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65  # NOTE: Evaluate
5f60: 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74 65 64   the constructed
5f70: 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 5d   [compileCSharp]
5f80: 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65 74   command and ret
5f90: 75 72 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23  urn the..      #
5fa0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 0d 0a         result...
5fb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65        #..      e
5fc0: 76 61 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20  val $command.. 5fd0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 5fe0: 20 69 73 4d 65 6d 6f 72 79 44 62 20 7b 20 66 69 isMemoryDb { fi 5ff0: 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 leName } {.. 6000: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 6010: 45 3a 20 49 73 20 74 68 65 20 73 70 65 63 69 66 E: Is the specif 6020: 69 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c ied database fil 6030: 65 20 6e 61 6d 65 20 72 65 61 6c 6c 79 20 61 6e e name really an 6040: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 in-memory datab 6050: 61 73 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ase?.. #.. 6060: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp 6070: 72 20 7b 24 66 69 6c 65 4e 61 6d 65 20 65 71 20 r {$fileName eq
6080: 22 3a 6d 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d  ":memory:" || \.
6090: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
60a0: 6e 67 20 72 61 6e 67 65 20 24 66 69 6c 65 4e 61  ng range $fileNa 60b0: 6d 65 20 30 20 31 32 5d 20 65 71 20 22 66 69 6c me 0 12] eq "fil 60c0: 65 3a 3a 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 e::memory:"}].. 60d0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 60e0: 63 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 20 c setupDb {.. 60f0: 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d fileNam 6100: 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 74 e {mode ""} {dat 6110: 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d 20 eTimeFormat ""} 6120: 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 22 {dateTimeKind "" 6130: 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 20 } {flags ""}.. 6140: 20 20 20 20 20 20 20 20 20 20 7b 65 78 74 72 61 {extra 6150: 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 ""} {qualify tr 6160: 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 65 ue} {delete true 6170: 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a 20 } {uri false}.. 6180: 20 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70 {temp 6190: 6f 72 61 72 79 20 74 72 75 65 7d 20 7b 76 61 72 orary true} {var 61a0: 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 Name db} } {.. 61b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 61c0: 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 OTE: First, see 61d0: 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 if our caller ha 61e0: 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 s requested an i 61f0: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 n-memory databas 6200: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 6210: 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 set isMemory 6220: 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c [isMemoryDb$fil
6230: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
6240: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
6250: 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65   For now, all te
6260: 73 74 20 64 61 74 61 62 61 73 65 73 20 75 73 65  st databases use
6270: 64 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  d by the test su
6280: 69 74 65 20 61 72 65 20 70 6c 61 63 65 64 20 69  ite are placed i
6290: 6e 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20  nto..      #
62a0: 20 20 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79     the temporary
62b0: 20 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61 63   directory.  Eac
62c0: 68 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  h database used
62d0: 62 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c 64  by a test should
62e0: 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
62f0: 20 20 20 63 6c 65 61 6e 65 64 20 75 70 20 62 79     cleaned up by
6300: 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e 67   that test using
6310: 20 74 68 65 20 22 63 6c 65 61 6e 75 70 44 62 22   the "cleanupDb"
6320: 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f   procedure, belo
6330: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
6340: 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72     if {!$isMemor 6350: 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 y &&$qualify} t
6360: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
6370: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
6380: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
6390: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66  aseDirectory] [f
63a0: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa 63b0: 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d me]].. }... 63c0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 63d0: 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 # NOTE: By defau 63e0: 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70 lt, delete any p 63f0: 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 re-existing data 6400: 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61 base with the sa 6410: 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 me file.. # 6420: 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 69 name if i 6430: 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73 t currently exis 6440: 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ts... #.. 6450: 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f if {!$isMemo
6460: 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26  ry && $delete && 6470: 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 [file exists$f
6480: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
6490: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
64a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
64b0: 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 61  empt to delete a
64c0: 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  ny pre-existing
64d0: 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68  database with th
64e0: 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20  e same file..
64f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d       #       nam
6500: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
6510: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
6520: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $6530: 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d fileName} error] 6540: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 6550: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 6560: 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 # NOTE: We some 6570: 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 how failed to de 6580: 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 lete the file, r 6590: 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... 65a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 65b0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
65c0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
65d0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
65e0: 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
65f0: 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64  ING: failed to d
6600: 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66  elete database f
6610: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam 6620: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 6630: 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73 65 "\" during se 6640: 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e tup, error: " \n 6650: 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
6660: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
6670: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
6680: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
6690: 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
66a0: 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
66b0: 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
66c0: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
66d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
66e0: 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65  ler.  The handle
66f0: 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20 64   to the opened d
6700: 61 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20  atabase will be
6710: 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20  stored there...
6720: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70       #..      up
6730: 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64  var 1 $varName d 6740: 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 b.... #.. 6750: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 # NOTE: Star 6760: 74 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 63 t building the c 6770: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string 6780: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 . The only requ 6790: 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 ired portion.. 67a0: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t 67b0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st 67c0: 72 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 61 ring is the data 67d0: 20 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 63 source, which c 67e0: 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 ontains the.. 67f0: 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 # datab 6800: 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 74 ase file name it 6810: 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 61 self. If our ca 6820: 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 73 ller wants to us 6830: 65 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 20 e a URI as.. 6840: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 61 # the da 6850: 74 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 74 ta source, use t 6860: 68 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 he FullUri conne 6870: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f ction string pro 6880: 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 20 perty to.. 6890: 23 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 # prevent 68a0: 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 20 the data source 68b0: 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 6e string from bein 68c0: 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 g mangled... 68d0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
68e0: 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  uri} then {..
68f0: 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74       set connect
6900: 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b 66  ion {FullUri=${f 6910: 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 ileName}}.. 6920: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 6930: 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f set connectio 6940: 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d 24 n {Data Source=$
6950: 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20  {fileName}}..
6960: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
6970: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
6980: 69 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65 64  ince this proced
6990: 75 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63 69  ure has no speci
69a0: 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20  al knowledge of
69b0: 77 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  what the default
69c0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
69d0: 73 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20 74  setting is for t
69e0: 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63 6f  he ToFullPath co
69f0: 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
6a00: 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73 0d  propery, always.
6a10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
6a20: 64 64 20 74 68 65 20 76 61 6c 75 65 20 77 65 20  dd the value we
6a30: 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74 68  know about to th
6a40: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
6a50: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ing...      #..
6a60: 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e       append conn
6a70: 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50  ection {;ToFullP
6a80: 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d 0d  ath=${qualify}}. 6a90: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 6aa0: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 # NOTE: If our 6ab0: 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 caller specifie 6ac0: 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 d a journal mode 6ad0: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 , add the necess 6ae0: 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 ary portion.. 6af0: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th 6b00: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str 6b10: 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ing now... 6b20: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st 6b30: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 ring length$mod
6b40: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
6b50: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63          append c
6b60: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72  onnection {;Jour
6b70: 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d  nal Mode=${mode} 6b80: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 6b90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 6ba0: 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c OTE: If our call 6bb0: 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44 er specified a D 6bc0: 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c 20 ateTime format, 6bd0: 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 add the necessar 6be0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 6bf0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 portion of the 6c00: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 6c10: 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d g now... #. 6c20: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 6c30: 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 ng length$dateT
6c40: 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d 20  imeFormat] > 0}
6c50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
6c60: 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  append connectio
6c70: 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d  n {;DateTimeForm
6c80: 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f 72  at=${dateTimeFor 6c90: 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a mat}}.. }.. 6ca0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6cb0: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 # NOTE: If our 6cc0: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified 6cd0: 20 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2c a DateTimeKind, 6ce0: 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 add the necessa 6cf0: 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 ry portion.. 6d00: 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 # of the 6d10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 6d20: 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # 6d30: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 6d40: 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 ing length$date
6d50: 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20 74  TimeKind] > 0} t
6d60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
6d70: 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ppend connection
6d80: 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d   {;DateTimeKind=
6d90: 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d 7d  ${dateTimeKind}} 6da0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 6db0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 6dc0: 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 TE: If there are 6dd0: 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 any global (per 6de0: 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 test run) conne 6df0: 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 ction flags curr 6e00: 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 ently.. # 6e10: 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 set, use th 6e20: 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 em now (i.e. by 6e30: 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 combining them w 6e40: 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 ith the ones for 6e50: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 this.. # 6e60: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 connection) 6e70: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 6e80: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 6e90: 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f ts ::connection_ 6ea0: 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 20 flags] && \.. 6eb0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 6ec0: 65 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 ength$::connect
6ed0: 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d 20  ion_flags] > 0}
6ee0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
6ef0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
6f00: 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67  E: Show (and log
6f10: 29 20 74 68 61 74 20 77 65 20 64 65 74 65 63 74  ) that we detect
6f20: 65 64 20 73 6f 6d 65 20 67 6c 6f 62 61 6c 20 63  ed some global c
6f30: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e  onnection flags.
6f40: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6f50: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 6f60: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 6f70: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 6f80: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 "---- glob 6f90: 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c al connection fl 6fa0: 61 67 73 20 64 65 74 65 63 74 65 64 3a 20 22 20 ags detected: " 6fb0: 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c$::connection_fl
6fc0: 61 67 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ags \n]....
6fd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
6fe0: 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 6e  NOTE: Combine an
6ff0: 64 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68 65  d/or replace the
7000: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
7010: 73 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 20  s and then show
7020: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
7030: 20 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e 0d       new value..
7040: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
7050: 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63      set flags [c
7060: 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61  ombineFlags $fla 7070: 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e gs$::connection
7080: 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 20  _flags]....
7090: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 70a0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 70b0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 70c0: 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e "---- combin 70d0: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c ed connection fl 70e0: 61 67 73 20 61 72 65 3a 20 22 20 24 66 6c 61 67 ags are: "$flag
70f0: 73 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  s \n]..      }..
7100: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
7110: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20   # NOTE: If our
7120: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64  caller specified
7130: 20 61 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   a SQLiteConnect
7140: 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 74 68  ionFlags, add th
7150: 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20  e necessary..
7160: 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69     #       porti
7170: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63  on of the connec
7180: 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e  tion string now.
7190: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
71a0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
71b0: 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 7d  gth $flags] > 0} 71c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 71d0: 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti 71e0: 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c 61 on {;Flags=${fla
71f0: 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  gs}}..      }...
7200: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
7210: 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63  # NOTE: If our c
7220: 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20  aller specified
7230: 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f 61 64  an extra payload
7240: 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   to the connecti
7250: 6f 6e 20 73 74 72 69 6e 67 2c 0d 0a 20 20 20 20  on string,..
7260: 20 20 23 20 20 20 20 20 20 20 61 70 70 65 6e 64    #       append
7270: 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20   it now...
7280: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
7290: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 74  ring length $ext 72a0: 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ra] > 0} then {. 72b0: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 . append 72c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 65 connection \;$e
72d0: 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  xtra..      }...
72e0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
72f0: 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68 65  # NOTE: Open the
7300: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
7310: 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 6e  tion now, placin
7320: 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61 6e  g the opaque han
7330: 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  dle value..
7340: 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68   #       into th
7350: 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63 69  e variable speci
7360: 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  fied by our call
7370: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
7380: 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c 20      set db [sql
7390: 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69 74  open -type SQLit
73a0: 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65 63  e [subst $connec 73b0: 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 tion]].... 73c0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 73d0: 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20 74 Configure the t 73e0: 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f emporary directo 73f0: 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 ry for the newly 7400: 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 opened database 7410: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7420: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 75 connection now u 7430: 6e 6c 65 73 73 20 74 68 65 20 63 61 6c 6c 65 72 nless the caller 7440: 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 forbids it... 7450: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 7460: 7b 24 74 65 6d 70 6f 72 61 72 79 7d 20 74 68 65 {$temporary} the
7470: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c  n {..        sql
7480: 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70   execute $db [ap 7490: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 74a0: 20 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 "PRAGMA 74b0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 temp_store_direc 74c0: 74 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 tory = \"" [getT 74d0: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 emporaryDirector 74e0: 79 5d 20 22 5c 22 3b 22 5d 0d 0a 20 20 20 20 20 y] "\";"].. 74f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 7500: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 # NOTE: Alw 7510: 61 79 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 ays return the c 7520: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 onnection handle 7530: 20 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a upon success... 7540: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 7550: 65 74 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d eturn$db..    }
7560: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
7570: 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20  tDbConnection {
7580: 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b  {varName db} } {
7590: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
75a0: 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
75b0: 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
75c0: 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
75d0: 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74  db") in the cont
75e0: 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20  ext of our..
75f0: 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72    #       caller
7600: 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f  .  The handle to
7610: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 72   the database pr
7620: 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened
7630: 62 79 20 5b 73 65 74 75 70 44 62 5d 0d 0a 20 20  by [setupDb]..
7640: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75      #       shou
7650: 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 65  ld be stored the
7660: 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  re...      #..
7670: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 7680: 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 Name db.... 7690: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 76a0: 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 : This returns t 76b0: 68 65 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f he ADO.NET IDbCo 76c0: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 nnection object 76d0: 69 6e 73 74 61 6e 63 65 20 66 6f 72 20 74 68 65 instance for the 76e0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 76f0: 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 73 specified databs 7700: 65 20 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 e handle. Since 7710: 20 67 65 74 74 69 6e 67 20 74 68 69 73 20 6f 62 getting this ob 7720: 6a 65 63 74 20 72 65 6c 69 65 73 20 75 70 6f 6e ject relies upon 7730: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7740: 45 61 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c Eagle internals, 7750: 20 67 72 65 61 74 20 63 61 72 65 20 73 68 6f 75 great care shou 7760: 6c 64 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 ld be taken to a 7770: 76 6f 69 64 20 64 69 73 70 6f 73 69 6e 67 20 6f void disposing o 7780: 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 f.. # 7790: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 this object or 77a0: 6f 74 68 65 72 77 69 73 65 20 70 75 74 74 69 6e otherwise puttin 77b0: 67 20 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 g it into an inv 77c0: 61 6c 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 alid state... 77d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 77e0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d [info exists db] 77f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 7800: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7820: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 7830: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 7840: 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f -objectflags +No 7850: 44 69 73 70 6f 73 65 20 5c 0d 0a 20 20 20 20 20 Dispose \.. 7860: 20 20 20 20 20 20 20 20 20 20 20 2d 61 6c 69 61 -alia 7870: 73 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 s Interpreter.Ge 7880: 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 tActive.connecti 7890: 6f 6e 73 20 49 74 65 6d 20 24 64 62 7d 20 5c 0d ons Item$db} \.
78a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
78b0: 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
78c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
78d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
78e0: 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2c 20 72  NOTE: Success, r
78f0: 65 74 75 72 6e 20 74 68 65 20 6f 70 61 71 75 65  eturn the opaque
7900: 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d   object handle..
7910: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
7920: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $7930: 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 result.. 7940: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 7950: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 7960: 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 # NOTE: Failure 7970: 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... 7980: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 7990: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
79a0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
79b0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
79c0: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
79d0: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
79e0: 6f 20 67 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e  o get connection
79f0: 20 68 61 6e 64 6c 65 20 66 6f 72 20 64 61 74 61   handle for data
7a00: 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20  base \"" \..
7a10: 20 20 20 20 20 20 20 20 20 20 24 64 62 20 22 5c            $db "\ 7a20: 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 7a30: 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
7a40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
7a50: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
7a60: 70 72 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e 65  proc freeDbConne
7a70: 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65  ction { {varName
7a80: 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b   connection} } {
7a90: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
7aa0: 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
7ab0: 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
7ac0: 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
7ad0: 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20  connection") in
7ae0: 74 68 65 20 63 6f 6e 74 65 78 74 0d 0a 20 20 20  the context..
7af0: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 6f 75     #       of ou
7b00: 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f  r caller.  The o
7b10: 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
7b20: 64 6c 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e  dle for an ADO.N
7b30: 45 54 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20  ET connection..
7b40: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65       #       pre
7b50: 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64  viously returned
7b60: 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63   by [getDbConnec
7b70: 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65 20  tion] should be
7b80: 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20  stored there...
7b90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70       #..      up
7ba0: 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63  var 1 $varName c 7bb0: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 onnection.... 7bc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7bd0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 TE: Attempt to r 7be0: 65 6d 6f 76 65 20 74 68 65 20 6f 70 61 71 75 65 emove the opaque 7bf0: 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 object handle f 7c00: 72 6f 6d 20 74 68 65 20 69 6e 74 65 72 70 72 65 rom the interpre 7c10: 74 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ter.. # 7c20: 20 20 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f now. This [o 7c30: 62 6a 65 63 74 20 64 69 73 70 6f 73 65 5d 20 63 bject dispose] c 7c40: 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 all will not act 7c50: 75 61 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 ually dispose of 7c60: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 7c70: 20 20 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f underlying o 7c80: 62 6a 65 63 74 20 62 65 63 61 75 73 65 20 74 68 bject because th 7c90: 65 20 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 e +NoDispose fla 7ca0: 67 20 77 61 73 20 73 65 74 20 6f 6e 20 69 74 20 g was set on it 7cb0: 64 75 72 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 during.. # 7cc0: 20 20 20 20 20 20 63 72 65 61 74 69 6f 6e 20 6f creation o 7cd0: 66 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a f the opaque obj 7ce0: 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 ect handle... 7cf0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 7d00: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6e [info exists con 7d10: 6e 65 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 nection] && \.. 7d20: 20 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 20 [catch 7d30: 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 {object dispose 7d40: 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72$connection} err
7d50: 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
7d60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7d70: 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68  # NOTE: We someh
7d80: 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d  ow failed to rem
7d90: 6f 76 65 20 74 68 65 20 68 61 6e 64 6c 65 2c 20  ove the handle,
7da0: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
7db0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7dc0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 7dd0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 7de0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 7df0: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 7e00: 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 failed to remove 7e10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 connection hand 7e20: 6c 65 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 le \""$connecti
7e30: 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  on \..
7e40: 20 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20    "\", error: "
7e50: 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 7e60: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 7e70: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 .... proc cle 7e80: 61 6e 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d anupDb { fileNam 7e90: 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b e {varName db} { 7ea0: 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 collect true} {q 7eb0: 75 61 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 ualify true}.. 7ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7ed0: 20 20 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d {delete true} 7ee0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 7ef0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att 7f00: 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c empt to force al 7f10: 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 l pending "garba 7f20: 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 ge" objects to b 7f30: 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 e collected,.. 7f40: 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c # incl 7f50: 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 uding SQLite sta 7f60: 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b tements and back 7f70: 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 up objects; this 7f80: 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 should allow.. 7f90: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 7fa0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 underlying data 7fb0: 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 base file to be 7fc0: 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 deleted... 7fd0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f #.. if {$co
7fe0: 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  llect} then {..
7ff0: 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61         collectGa
8000: 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68  rbage $::test_ch 8010: 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a annel.. }.. 8020: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 8030: 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 # NOTE: Refer t 8040: 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 o the specified 8050: 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 variable (e.g. " 8060: 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 db") in the cont 8070: 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 ext of our.. 8080: 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 # caller 8090: 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f . The handle to 80a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 72 the database pr 80b0: 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 eviously opened 80c0: 62 79 20 5b 73 65 74 75 70 44 62 5d 0d 0a 20 20 by [setupDb].. 80d0: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 80e0: 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 ld be stored the 80f0: 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 re... #.. 8100: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
8110: 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20  Name db....
8120: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
8130: 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e  : Close the conn
8140: 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61  ection to the da
8150: 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 54 68 69  tabase now.  Thi
8160: 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75  s should allow u
8170: 73 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  s to..      #
8180: 20 20 20 20 64 65 6c 65 74 65 20 74 68 65 20 75      delete the u
8190: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61  nderlying databa
81a0: 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20  se file...
81b0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
81c0: 66 6f 20 65 78 69 73 74 73 20 64 62 5d 20 26 26  fo exists db] &&
81d0: 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f   [catch {sql clo
81e0: 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20  se $db} error]} 81f0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 8200: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 8210: 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 8220: 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 iled to close th 8230: 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 70 6f e database, repo 8240: 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... 8250: 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 8260: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
8270: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
8280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d  .            "==
8290: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
82a0: 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 61 74 61  ed to close data
82b0: 62 61 73 65 20 5c 22 22 20 24 64 62 20 22 5c 22  base \"" $db "\" 82c0: 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 , error: " \.. 82d0: 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 \n\t$
82e0: 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
82f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
8300: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72       # NOTE: Fir
8310: 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63  st, see if our c
8320: 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73  aller has reques
8330: 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  ted an in-memory
8340: 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...
8350: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69    #..      set i
8360: 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72  sMemory [isMemor
8370: 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  yDb $fileName].. 8380: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 8390: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 83a0: 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 he full path to 83b0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c the database fil 83c0: 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 e name. For now 83d0: 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 , all test.. 83e0: 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61 # databa 83f0: 73 65 20 66 69 6c 65 73 20 61 72 65 20 73 74 6f se files are sto 8400: 72 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 6f red in the tempo 8410: 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0d rary directory.. 8420: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 8430: 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 if {!$isMemory &
8440: 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e  & $qualify} then 8450: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 8460: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a fileName [file j 8470: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 oin [getDatabase 8480: 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 Directory] [file 8490: 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d tail$fileName]
84a0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
84b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
84c0: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
84d0: 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69  e file still exi
84e0: 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  sts...      #..
84f0: 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d       if {!$isMem 8500: 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 ory &&$delete &
8510: 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  & [file exists $8520: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 8530: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 8540: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 8550: 69 70 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 ip deleting data 8560: 62 61 73 65 20 66 69 6c 65 73 20 69 66 20 73 6f base files if so 8570: 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 mebody sets the 8580: 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 global.. 8590: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 85a0: 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d to prevent it.. 85b0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 85c0: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 85d0: 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e xists ::no(clean 85e0: 75 70 44 62 46 69 6c 65 29 5d 7d 20 74 68 65 6e upDbFile)]} then 85f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 8600: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 8610: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 E: Attempt to de 8620: 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 64 61 lete the test da 8630: 74 61 62 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e tabase file now. 8640: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 8650: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 if {[se 8660: 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 t code [catch {f 8670: 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 ile delete$file
8680: 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74  Name} error]]} t
8690: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
86a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
86b0: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d    # NOTE: We som
86c0: 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64  ehow failed to d
86d0: 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20  elete the file,
86e0: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
86f0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
8700: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 8710: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 8720: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 8740: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 8750: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74 ed to delete dat 8760: 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 abase file \""$
8770: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
8780: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
8790: 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20  during cleanup,
87a0: 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 87b0: 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 87c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 87d0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 87e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 87f0: 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 # NOTE: Show tha 8800: 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c t we skipped del 8810: 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d eting the file.. 8820: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 8830: 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code 8840: 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 0.... 8850: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
8860: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
8870: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
8880: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
8890: 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  : skipped deleti
88a0: 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ng database file
88b0: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c   \"" $fileName \ 88c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 88d0: 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e "\" during clean 88e0: 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 up\n"].. 88f0: 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 }.. } else 8900: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 8910: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 8920: 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 e file does not 8930: 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21 0d exist, success!. 8940: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8950: 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a set code 0.. 8960: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 8970: 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 return$code..
8980: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
8990: 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20  c cleanupFile {
89a0: 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63  fileName {collec
89b0: 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 66  t true} {force f
89c0: 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
89d0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
89e0: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72  : Attempt to for
89f0: 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22  ce all pending "
8a00: 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73  garbage" objects
8a10: 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64   to be collected
8a20: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
8a30: 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74   including SQLit
8a40: 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64  e statements and
8a50: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b   backup objects;
8a60: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c   this should all
8a70: 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ow..      #
8a80: 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67    the underlying
8a90: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
8aa0: 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20  o be deleted...
8ab0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
8ac0: 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e   {$collect} then 8ad0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c {.. coll 8ae0: 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 ectGarbage$::te
8af0: 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20  st_channel..
8b00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
8b10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
8b20: 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20  eck if the file
8b30: 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20  still exists...
8b40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
8b50: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $8b60: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 8b70: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 8b80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 8b90: 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 ip deleting test 8ba0: 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f files if somebo 8bb0: 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 dy sets the glob 8bc0: 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 al variable.. 8bd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to 8be0: 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 prevent it... 8bf0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8c00: 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b if {$force || ![
8c10: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
8c20: 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20  (cleanupFile)]}
8c30: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
8c40: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
8c50: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
8c60: 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73  o delete the tes
8c70: 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20  t file now...
8c80: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
8c90: 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64      if {[set cod
8ca0: 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64  e [catch {file d
8cb0: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d  elete $fileName} 8cc0: 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b error]]} then { 8cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 8ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 8cf0: 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 OTE: We somehow 8d00: 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete 8d10: 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 the file, repor 8d20: 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 t why... 8d30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 8d40: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
8d50: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
8d60: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
8d70: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
8d80: 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
8d90: 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 6c   delete test fil
8da0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName 8db0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 8dc0: 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c "\" during cl 8dd0: 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 eanup, error: " 8de0: 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
8df0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
8e00: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
8e10: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
8e20: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
8e30: 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70  how that we skip
8e40: 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65  ped deleting the
8e50: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...
8e60: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
8e70: 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20  et code 0....
8e80: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 8e90: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 8ea0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 8eb0: 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 8ec0: 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 WARNING: skipped 8ed0: 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 deleting test f 8ee0: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
8ef0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
8f00: 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c     "\" during cl
8f10: 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20  eanup\n"]..
8f20: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
8f30: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
8f40: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
8f50: 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e   The file does n
8f60: 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73  ot exist, succes
8f70: 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s!..        #..
8f80: 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20         set code
8f90: 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  0..      }....
8fa0: 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65      return $code 8fb0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 8fc0: 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72 62 proc collectGarb 8fd0: 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 age { channel } 8fe0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 8ff0: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 9000: 74 20 74 6f 20 66 6f 72 63 65 20 61 20 66 75 6c t to force a ful 9010: 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 l garbage collec 9020: 74 69 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 6f 72 tion now. Repor 9030: 74 20 61 6e 79 0d 0a 20 20 20 20 20 20 23 20 20 t any.. # 9040: 20 20 20 20 20 65 72 72 6f 72 20 74 68 61 74 20 error that 9050: 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 is encountered i 9060: 66 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 f we fail... 9070: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 9080: 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e catch {object in 9090: 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c voke GC GetTotal 90a0: 4d 65 6d 6f 72 79 20 74 72 75 65 7d 20 65 72 72 Memory true} err 90b0: 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 90c0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
90d0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
90e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
90f0: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
9100: 69 6c 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67  iled full garbag
9110: 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72  e collection, er
9120: 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ror: " \..
9130: 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f        \n\t $erro 9140: 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a r \n].. }.. 9150: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 9160: 6f 63 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 oc reportSQLiteR 9170: 65 73 6f 75 72 63 65 73 20 7b 20 63 68 61 6e 6e esources { chann 9180: 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d el {quiet false} 9190: 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 {collect true} 91a0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 91b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 91c0: 20 61 6c 6c 20 6f 75 74 70 75 74 20 69 66 20 77 all output if w 91d0: 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 69 6e e are running in 91e0: 20 22 71 75 69 65 74 22 20 6d 6f 64 65 2e 0d 0a "quiet" mode... 91f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 9200: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
9210: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
9220: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- 9230: 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 current memory 9240: 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 in use by SQLite 9250: 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a ... ".. }.. 9260: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 9270: 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b ch {object invok 9280: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 9290: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 92a0: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 92b0: 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 .SQLite.UnsafeNa 92c0: 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 tiveMethods \.. 92d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c sql 92e0: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 ite3_memory_used 92f0: 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 } memory] == 0} 9300: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 9310: 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
9320: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
9330: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 9340: 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
9350: 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  y " bytes\n"]..
9360: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
9370: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
9380: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
9390: 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53  OTE: Maybe the S
93a0: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62  QLite native lib
93b0: 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61  rary is unavaila
93c0: 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d  ble?..        #.
93d0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d  .        set mem
93e0: 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20  ory unknown....
93f0: 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 9400: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 9410: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
9420: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
9430: 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20   $memory \n].. 9440: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 9450: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 .... set re 9460: 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 23 20 sult$memory; #
9470: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d 65 6d  NOTE: Return mem
9480: 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f 20 6f 75  ory in-use to ou
9490: 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20  r caller.....
94a0: 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 94b0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 94c0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
94d0: 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d  ---- maximum mem
94e0: 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51  ory in use by SQ
94f0: 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20  Lite... "..
9500: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
9510: 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69  [catch {object i
9520: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
9530: 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
9540: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
9550: 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
9560: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
9570: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
9580: 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f   sqlite3_memory_
9590: 68 69 67 68 77 61 74 65 72 20 30 7d 20 6d 65 6d  highwater 0} mem
95a0: 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
95b0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  {..        if {!
95c0: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 95d0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 95e0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
95f0: 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62  Args $memory " b 9600: 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 ytes\n"].. 9610: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 9620: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 9630: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 9640: 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 Maybe the SQLite 9650: 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 native library 9660: 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d is unavailable?. 9670: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 9680: 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 9690: 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 nknown.... 96a0: 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
96b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
96c0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 96d0: 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
96e0: 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ory \n]..
96f0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
9700: 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63       if {$collec 9710: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 9720: 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 collectGarbag 9730: 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 e$channel..
9740: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
9750: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 9760: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 9770: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
9780: 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e  urrent memory in
9790: 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 2e   use by the CLR.
97a0: 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  .. "..      }...
97b0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
97c0: 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  h {object invoke
97d0: 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f   GC GetTotalMemo
97e0: 72 79 20 66 61 6c 73 65 7d 20 6d 65 6d 6f 72 79  ry false} memory
97f0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
9800: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
9810: 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d  ing is integer -
9820: 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d  strict $memory]} 9830: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 9840: 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
9850: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9860: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 9870: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
9880: 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e  memory " bytes\n
9890: 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  "]..          }.
98a0: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
98b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
98c0: 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d   memory invalid.
98d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
98e0: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 98f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 9900: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
9910: 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 9920: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 9930: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 9940: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 9950: 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory 9960: 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 unknown.... 9970: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
9980: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
9990: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 99a0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
99b0: 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
99c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
99d0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72  .      return $r 99e0: 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d esult.. }.... 99f0: 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c . proc runSQL 9a00: 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 iteTestPrologue 9a10: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 9a20: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 9a30: 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 p running our cu 9a40: 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 stom prologue if 9a50: 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 the main one ha 9a60: 73 20 62 65 65 6e 20 73 6b 69 70 70 65 64 2e 0d s been skipped.. 9a70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9a80: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 9a90: 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e s ::no(prologue. 9aa0: 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d eagle)]} then {. 9ab0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 9ac0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 9ad0: 20 61 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 all System.Data 9ae0: 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 .SQLite related 9af0: 66 69 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28 64 file handling (d 9b00: 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20 eleting,.. 9b10: 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 69 6e # copyin 9b20: 67 2c 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20 g, and loading) 9b30: 69 66 20 77 65 20 61 72 65 20 73 6f 20 69 6e 73 if we are so ins 9b40: 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 tructed... 9b50: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 9b60: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 9b70: 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 73 29 :no(sqliteFiles) 9b80: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 9b90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9ba0: 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 # NOTE: Skip t 9bb0: 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 rying to delete 9bc0: 61 6e 79 20 66 69 6c 65 73 20 69 66 20 77 65 20 any files if we 9bd0: 61 72 65 20 73 6f 20 69 6e 73 74 72 75 63 74 65 are so instructe 9be0: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d d... #. 9bf0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 9c00: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 9c10: 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 46 69 o(deleteSqliteFi 9c20: 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 9c30: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 9c40: 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 73 71 6c leteAssembly sql 9c50: 69 74 65 33 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 ite3.dll.. 9c60: 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 removeCons 9c70: 74 72 61 69 6e 74 20 66 69 6c 65 5f 73 71 6c 69 traint file_sqli 9c80: 74 65 33 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 te3.dll.... 9c90: 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 9ca0: 41 73 73 65 6d 62 6c 79 20 53 51 4c 69 74 65 2e Assembly SQLite. 9cb0: 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a 20 20 20 Interop.dll.. 9cc0: 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 removeC 9cd0: 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 5f 53 onstraint file_S 9ce0: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c QLite.Interop.dl 9cf0: 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l.... 9d00: 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 tryDeleteAssemb 9d10: 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ly System.Data.S 9d20: 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 QLite.dll.. 9d30: 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e removeCon 9d40: 73 74 72 61 69 6e 74 20 66 69 6c 65 5f 53 79 73 straint file_Sys 9d50: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 9d60: 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 dll.... 9d70: 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 tryDeleteAsse 9d80: 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 mbly System.Data 9d90: 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c .SQLite.Linq.dll 9da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 9db0: 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 66 moveConstraint f 9dc0: 69 6c 65 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e ile_System.Data. 9dd0: 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d SQLite.Linq.dll. 9de0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 9df0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 9e00: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 9e10: 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f kip trying to co 9e20: 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 py any files if 9e30: 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75 we are so instru 9e40: 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 cted... 9e50: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 9e60: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 9e70: 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46 ::no(copySqliteF 9e80: 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 9e90: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 tryC 9ea0: 6f 70 79 41 73 73 65 6d 62 6c 79 20 73 71 6c 69 opyAssembly sqli 9eb0: 74 65 33 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 te3.dll.. 9ec0: 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 tryCopyAsse 9ed0: 6d 62 6c 79 20 53 51 4c 69 74 65 2e 49 6e 74 65 mbly SQLite.Inte 9ee0: 72 6f 70 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 rop.dll.. 9ef0: 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 tryCopyAsse 9f00: 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 mbly System.Data 9f10: 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 .SQLite.dll.. 9f20: 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 tryCopy 9f30: 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e Assembly System. 9f40: 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 Data.SQLite.Linq 9f50: 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 9f60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 }.... # 9f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 9f80: 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 TE: Skip trying 9f90: 74 6f 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65 to load any file 9fa0: 73 20 69 66 20 77 65 20 61 72 65 20 73 6f 20 69 s if we are so i 9fb0: 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 9fc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 9fd0: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 9fe0: 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 ists ::no(loadSq 9ff0: 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 liteFiles)]} the a000: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. a010: 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 tryLoadAssembly a020: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL a030: 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 ite.dll.. a040: 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 tryLoadAsse a050: 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 mbly System.Data a060: 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c .SQLite.Linq.dll a070: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. a080: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... a090: 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. a0a0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
a0b0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
a0c0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
a0d0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
a0e0: 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  file version of
a0f0: 5c 22 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e  \"sqlite3.dll\".
a100: 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
a110: 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73        [file vers
a120: 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
a130: 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e 64  leName sqlite3.d
a140: 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  ll]] \n]..
a150: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
a160: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
a170: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ a180: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA a190: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. a1a0: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file a1b0: 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 51 4c version of \"SQL a1c0: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c ite.Interop.dll\ a1d0: 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 "... " \.. a1e0: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 [file ve a1f0: 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 rsion [getBinary a200: 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e FileName SQLite. a210: 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 20 5c 6e Interop.dll]] \n a220: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a ].. }.... a230: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. a240: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs a250: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
a260: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
a270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
a280: 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e  --- file version
a290: 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74   of \"System.Dat
a2a0: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e  a.SQLite.dll\"..
a2b0: 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  . " \..
a2c0: 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69       [file versi
a2d0: 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  on [getBinaryFil
a2e0: 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74  eName System.Dat
a2f0: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20 5c  a.SQLite.dll]] \
a300: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  n]..        }...
a310: 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b  .        catch {
a320: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
a330: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe a340: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. a350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " a360: 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f ---- file versio a370: 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 n of \"System.Da a380: 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 ta.SQLite.Linq.d a390: 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 ll\"... " \.. a3a0: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file a3b0: 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e version [getBin a3c0: 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 aryFileName Syst a3d0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c em.Data.SQLite.L a3e0: 69 6e 71 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 inq.dll]] \n].. a3f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... a400: 20 20 20 20 73 65 74 20 61 73 73 65 6d 62 6c 69 set assembli a410: 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b es [object invok a420: 65 20 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 e AppDomain.Curr a430: 65 6e 74 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 entDomain GetAss a440: 65 6d 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 emblies].... a450: 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 object forea a460: 63 68 20 61 73 73 65 6d 62 6c 79 20 24 61 73 73 ch assembly$ass
a470: 65 6d 62 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20  emblies {..
a480: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
a490: 20 6d 61 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e   match \{System.
a4a0: 44 61 74 61 2e 53 51 4c 69 74 65 2a 20 24 61 73  Data.SQLite* $as a4b0: 73 65 6d 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d sembly]} then {. a4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu a4d0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
a4e0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
a4f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a500: 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 61 73    "---- found as
a510: 73 65 6d 62 6c 79 3a 20 22 20 24 61 73 73 65 6d  sembly: " $assem a520: 62 6c 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 bly \n].. a530: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. a540: 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 ... catch a550: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp a560: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
a570: 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  nel \..
a580: 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 66 69 6e       "---- defin
a590: 65 20 63 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20  e constants for
a5a0: 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  \"System.Data.SQ
a5b0: 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20  Lite\"... "....
a5c0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
a5d0: 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f  tch {object invo
a5e0: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
a5f0: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
a600: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
a610: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
a620: 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 74  ite3 DefineConst
a630: 61 6e 74 73 7d 20 5c 0d 0a 20 20 20 20 20 20 20  ants} \..
a640: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e             defin
a650: 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30  eConstants] == 0
a660: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a670: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a680: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a690: 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c endArgs [formatL a6a0: 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 ist [lsort \.. a6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64$d
a6c0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 5d  efineConstants]]
a6d0: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
a6e0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
a6f0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a700: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn a710: 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. a720: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... a730: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. a740: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c # NOTE: Now, a750: 20 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 we need to know a760: 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 if the SQLite c a770: 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 ore library is a a780: 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 vailable.. a790: 20 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 # (i.e. a7a0: 62 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 because the mana a7b0: 67 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e ged-only System. a7c0: 44 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 Data.SQLite asse a7d0: 6d 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 mbly can.. a7e0: 20 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 # load w a7f0: 69 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 ithout it; howev a800: 65 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f er, it cannot do a810: 20 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c anything useful a820: 20 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 without.. a830: 20 20 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 # it). a840: 49 66 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 If we are using a850: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 the mixed-mode a a860: 73 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 ssembly and we a a870: 6c 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 lready.. a880: 23 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 # found it a890: 20 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 (above), this s a8a0: 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 hould always suc a8b0: 63 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 ceed... # a8c0: 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF a8d0: 6f 72 53 51 4c 69 74 65 20 24 3a 3a 74 65 73 74 orSQLite$::test
a8e0: 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
a8f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
a900: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
a910: 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33  the sqlite3_win3
a920: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20  2_set_directory
a930: 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69  function is avai
a940: 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  lable...
a950: 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  #..        tputs
a960: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel a970: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. a980: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f a990: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 or function sqli a9a0: 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di a9b0: 72 65 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a rectory... ".... a9c0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat a9d0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. a9e0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv a9f0: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP aa00: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. aa10: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. aa20: 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa aa30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods aa40: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. aa50: 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 sqlite3_win32 aa60: 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30 _set_directory 0 aa70: 20 6e 75 6c 6c 7d 5d 20 3d 3d 20 30 7d 20 74 68 null}] == 0} th aa80: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. aa90: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N aaa0: 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 OTE: Calling the aab0: 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s aac0: 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e et_directory fun aad0: 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a ction does not.. aae0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # aaf0: 20 20 63 61 75 73 65 20 61 6e 20 65 78 63 65 70 cause an excep ab00: 74 69 6f 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c tion; therefore, ab10: 20 69 74 20 6d 75 73 74 20 62 65 20 61 76 61 69 it must be avai ab20: 6c 61 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20 lable (i.e... ab30: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 # e ab40: 76 65 6e 20 74 68 6f 75 67 68 20 69 74 20 73 68 ven though it sh ab50: 6f 75 6c 64 20 72 65 74 75 72 6e 20 61 20 66 61 ould return a fa ab60: 69 6c 75 72 65 20 72 65 74 75 72 6e 20 63 6f 64 ilure return cod ab70: 65 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 e in this.. ab80: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 73 # cas ab90: 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 e)... # aba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 .. addC abb0: 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 74 65 onstraint sqlite abc0: 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire abd0: 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 ctory.... abe0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
abf0: 5f 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a  _channel yes\n..
ac00: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
ac10: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
ac20: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe ac30: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 l no\n.. ac40: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. ac50: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: ac60: 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 Attempt to deter ac70: 6d 69 6e 65 20 69 66 20 74 68 65 20 63 75 73 74 mine if the cust ac80: 6f 6d 20 65 78 74 65 6e 73 69 6f 6e 20 66 75 6e om extension fun ac90: 63 74 69 6f 6e 73 20 77 65 72 65 0d 0a 20 20 20 ctions were.. aca0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d # com acb0: 70 69 6c 65 64 20 69 6e 74 6f 20 74 68 65 20 53 piled into the S acc0: 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as acd0: 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 sembly... ace0: 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 #.. chec acf0: 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 kForSQLiteDefine ad00: 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 Constant$::test
ad10: 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
ad20: 20 20 20 20 20 20 20 20 43 48 45 43 4b 5f 53 54          CHECK_ST
ad30: 41 54 45 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63  ATE....        c
ad40: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66  heckForSQLiteDef
ad50: 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74  ineConstant $::t ad60: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. ad70: 20 20 20 20 20 20 20 20 20 20 20 55 53 45 5f 49 USE_I ad80: 4e 54 45 52 4f 50 5f 44 4c 4c 0d 0a 0d 0a 20 20 NTEROP_DLL.... ad90: 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ ada0: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 LiteDefineConsta adb0: 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e nt$::test_chann
adc0: 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  el \..
add0: 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53    INTEROP_EXTENS
ade0: 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 0d 0a 0d  ION_FUNCTIONS...
adf0: 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
ae00: 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e  rSQLiteDefineCon
ae10: 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68  stant $::test_ch ae20: 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. ae30: 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 45 53 INTEROP_TES ae40: 54 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a 0d 0a 20 T_EXTENSION.... ae50: 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS ae60: 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 QLiteDefineConst ae70: 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ant$::test_chan
ae80: 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  nel \..
ae90: 20 20 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41     SQLITE_STANDA
aea0: 52 44 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  RD....        #.
aeb0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
aec0: 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65   Check the curre
aed0: 6e 74 20 62 75 69 6c 64 20 79 65 61 72 2e 20 20  nt build year.
aee0: 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 20  Basically, this
aef0: 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20 20  indicates..
af00: 20 20 20 23 20 20 20 20 20 20 20 77 68 69 63 68     #       which
af10: 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75   version of MSBu
af20: 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73 75 61  ild and/or Visua
af30: 6c 20 53 74 75 64 69 6f 20 77 61 73 20 75 73 65  l Studio was use
af40: 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20  d to..        #
af50: 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 20 74 68        compile th
af60: 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72  e assembly binar
af70: 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d  ies under test..
af80: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
af90: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes afa0: 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 t_channel \.. afb0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c afc0: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 hecking for Syst afd0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 em.Data.SQLite b afe0: 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a uild year... ".. aff0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 79 65 .. set ye b000: 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 ar [getBuildYear b010: 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f ].. addCo b020: 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append b030: 41 72 67 73 20 62 75 69 6c 64 59 65 61 72 20 24 Args buildYear$
b040: 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 74  year]..        t
b050: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha b060: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs b070: 20 5c 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d \"$year \"\n].
b080: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
b090: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
b0a0: 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  eck the current
b0b0: 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74  build configurat
b0c0: 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f 75 6c  ion.  This shoul
b0d0: 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 20  d normally..
b0e0: 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 65      #       be e
b0f0: 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72  ither "Debug" or
b100: 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20 20   "Release"...
b110: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b120: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch b130: 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. b140: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check b150: 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 ing for System.D b160: 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 ata.SQLite build b170: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 2e configuration.. b180: 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 . ".... s b190: 65 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e et configuration b1a0: 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 [getBuildConfig b1b0: 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 uration].. b1c0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint b1d0: 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c [appendArgs buil b1e0: 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 dConfiguration$
b1f0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a  configuration]..
b200: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: b210: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a b220: 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 63 6f ppendArgs \"$co
b230: 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c 22 5c 6e  nfiguration \"\n
b240: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
b250: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
b260: 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 6e 61  Check for the na
b270: 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f 70 74  tive runtime opt
b280: 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c 64  ion, which would
b290: 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a 20 20   mean we are..
b2a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73        #       us
b2b0: 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f  ing the mixed-mo
b2c0: 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20  de assembly...
b2d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b2e0: 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65   checkForRuntime
b2f0: 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63  Option $::test_c b300: 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d hannel native... b310: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. b320: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f # NOTE: Repo b330: 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 rt the resource b340: 75 73 61 67 65 20 70 72 69 6f 72 20 74 6f 20 72 usage prior to r b350: 75 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73 74 73 unning any tests b360: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. b370: 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 reportSQLi b380: 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 teResources$::t
b390: 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20  est_channel....
b3a0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
b3b0: 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74    # NOTE: Show t
b3c0: 68 65 20 61 63 74 69 76 65 20 74 65 73 74 20 63  he active test c
b3d0: 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20  onstraints...
b3e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b3f0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch b400: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg b410: 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 s "---- constrai b420: 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 nts: " \.. b430: 20 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 [formatLis b440: 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e t [lsort [getCon b450: 73 74 72 61 69 6e 74 73 5d 5d 5d 20 5c 6e 5d 0d straints]]] \n]. b460: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. b470: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh b480: 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 ow when our test b490: 73 20 61 63 74 75 61 6c 6c 79 20 62 65 67 61 6e s actually began b4a0: 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 (now)... b4b0: 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput b4c0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
b4d0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
b4e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
b4f0: 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  -- System.Data.S
b500: 51 4c 69 74 65 20 74 65 73 74 73 20 62 65 67 61  QLite tests bega
b510: 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20  n at " \..
b520: 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72        [clock for
b530: 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e  mat [clock secon
b540: 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  ds]] \n]..
b550: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
b560: 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54   proc runSQLiteT
b570: 65 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b  estEpilogue {} {
b580: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
b590: 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75   # NOTE: Skip ru
b5a0: 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d  nning our custom
b5b0: 20 65 70 69 6c 6f 67 75 65 20 69 66 20 74 68 65   epilogue if the
b5c0: 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 65   main one has be
b5d0: 65 6e 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20  en skipped...
b5e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
b5f0: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
b600: 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65 61 67 6c  no(epilogue.eagl
b610: 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e)]} then {..
b620: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b630: 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65  # NOTE: Show whe
b640: 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 75  n our tests actu
b650: 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e 6f 77 29  ally ended (now)
b660: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
b670: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t b680: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app b690: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. b6a0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 "---- Sys b6b0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite b6c0: 74 65 73 74 73 20 65 6e 64 65 64 20 61 74 20 22 tests ended at " b6d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. b6e0: 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 [clock format [c b6f0: 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c lock seconds]] \ b700: 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d n].... #. b710: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: b720: 20 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 68 65 Also report the b730: 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 resource usage b740: 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 after running th b750: 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 e tests... b760: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 #.. rep b770: 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 ortSQLiteResourc b780: 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e es$::test_chann
b790: 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  el..      }..
b7a0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23   }.....    #####
b7b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b7f0: 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23  ######..    ####
b800: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b810: 23 23 23 23 23 23 23 23 23 20 45 4e 44 20 45 61  ######### END Ea
b820: 67 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23  gle ONLY #######
b830: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b840: 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23  #######..    ###
b850: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b860: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b880: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b890: 23 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d  ########..  }...
b8a0: 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE:
b8b0: 53 61 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66  Save the name of
b8c0: 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63   the directory c
b8d0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66  ontaining this f
b8e0: 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20  ile...  #..  if
b8f0: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
b900: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72  :common_director
b910: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
b920: 73 65 74 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72  set ::common_dir
b930: 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72  ectory [file dir
b940: 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70  name [info scrip
b950: 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d  t]]..  }....  #.
b960: 0a 20 20 23 20 4e 4f 54 45 3a 20 50 72 6f 76 69  .  # NOTE: Provi
b970: 64 65 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  de the System.Da
b980: 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 20 70  ta.SQLite test p
b990: 61 63 6b 61 67 65 20 74 6f 20 74 68 65 20 69 6e  ackage to the in
b9a0: 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 23 0d  terpreter...  #.
b9b0: 0a 20 20 70 61 63 6b 61 67 65 20 70 72 6f 76 69  .  package provi
b9c0: 64 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  de System.Data.S
b9d0: 51 4c 69 74 65 2e 54 65 73 74 20 31 2e 30 0d 0a  QLite.Test 1.0..
b9e0: 7d 0d 0a                                         }..