System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 1f3ab1cfcf2eb02393f069c6f3f1bb0d14c00767:

• File Tests/common.eagle — part of check-in [5759e099be] at 2012-09-20 11:53:22 on branch trunk — Allow opened connections to skip adding the extension functions included in the interop assembly. Support loading of SQLite extensions. Add more notifications that use the new static Changed event. Miscellaneous comment cleanup. Cleanup usage of compile-time options for the .NET Framework version. Fix argument checking for the batch file tools. (user: mistachkin size: 41828)

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 74 68 65 20 63 61 6c 6c 65 72 2e 0d 0a by the 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 74 68 65 20 63 61 6c 6c 65 72  ed by the 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 44 61 74 61 62 61 73 65 44 69 oc getDatabaseDi 2f80: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 rectory {} {.. 2f90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 2fa0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced 2fb0: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 ure returns the 2fc0: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 directory where 2fd0: 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 the test databas 2fe0: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # 2ff0: 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 should be loca 3000: 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 ted. By default 3010: 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 , this just uses 3020: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a the temporary.. 3030: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 3040: 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 rectory configur 3050: 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 ed for this syst 3060: 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 em... #.. 3070: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 3080: 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 5f ists ::database_ 3090: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 30a0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 30b0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 ng length$::dat
30c0: 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d  abase_directory]
30d0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
30e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
30f0: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
3100: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
3110: 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20  abase directory
3120: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
3130: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
3140: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
3150: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
3160: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
3170: 75 72 6e 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c  urn [file normal
3180: 69 7a 65 20 24 3a 3a 64 61 74 61 62 61 73 65 5f  ize $::database_ 3190: 64 69 72 65 63 74 6f 72 79 5d 0d 0a 20 20 20 20 directory].. 31a0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 31b0: 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 return [getT 31c0: 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 emporaryPath].. 31d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 31e0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 41 70 .. proc getAp 31f0: 70 44 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20 pDomainPreamble 3200: 7b 20 7b 70 72 65 66 69 78 20 22 22 7d 20 7b 73 { {prefix ""} {s 3210: 75 66 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 uffix ""} } {.. 3220: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 3230: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 3240: 64 75 72 65 20 72 65 74 75 72 6e 73 20 61 20 74 dure returns a t 3250: 65 73 74 20 73 65 74 75 70 20 73 63 72 69 70 74 est setup script 3260: 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 65 76 suitable for ev 3270: 61 6c 75 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 aluation.. 3280: 23 20 20 20 20 20 20 20 62 79 20 61 20 74 65 73 # by a tes 3290: 74 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 t interpreter cr 32a0: 65 61 74 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c eated in an isol 32b0: 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e ated application 32c0: 20 64 6f 6d 61 69 6e 2e 0d 0a 20 20 20 20 20 20 domain... 32d0: 23 20 20 20 20 20 20 20 54 68 65 20 73 63 72 69 # The scri 32e0: 70 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 pt being returne 32f0: 64 20 77 69 6c 6c 20 62 65 20 73 75 72 72 6f 75 d will be surrou 3300: 6e 64 65 64 20 62 79 20 74 68 65 20 70 72 65 66 nded by the pref 3310: 69 78 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 ix and.. # 3320: 20 20 20 20 20 20 73 75 66 66 69 78 20 22 73 63 suffix "sc 3330: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 22 20 ript fragments" 3340: 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 specified by the 3350: 20 63 61 6c 6c 65 72 2c 20 69 66 20 61 6e 79 2e caller, if any. 3360: 20 20 54 68 65 0d 0a 20 20 20 20 20 20 23 20 20 The.. # 3370: 20 20 20 20 20 65 6e 74 69 72 65 20 73 63 72 69 entire scri 3380: 70 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 pt being returne 3390: 64 20 77 69 6c 6c 20 62 65 20 73 75 62 73 74 69 d will be substi 33a0: 74 75 74 65 64 20 76 69 61 20 5b 73 75 62 73 74 tuted via [subst 33b0: 5d 2c 20 69 6e 0d 0a 20 20 20 20 20 20 23 20 20 ], in.. # 33c0: 20 20 20 20 20 74 68 65 20 63 6f 6e 74 65 78 74 the context 33d0: 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 2e 20 of the caller. 33e0: 20 54 68 69 73 20 73 74 65 70 20 69 73 20 6e 65 This step is ne 33f0: 63 65 73 73 61 72 79 20 73 6f 20 74 68 61 74 20 cessary so that 3400: 73 6f 6d 65 0d 0a 20 20 20 20 20 20 23 20 20 20 some.. # 3410: 20 20 20 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 limited cont 3420: 65 78 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c ext information, 3430: 20 70 72 69 6d 61 72 69 6c 79 20 72 65 6c 61 74 primarily relat 3440: 65 64 20 74 6f 20 74 68 65 20 74 65 73 74 20 62 ed to the test b 3450: 75 69 6c 64 0d 0a 20 20 20 20 20 20 23 20 20 20 uild.. # 3460: 20 20 20 20 64 69 72 65 63 74 6f 72 79 2c 20 63 directory, c 3470: 61 6e 20 62 65 20 74 72 61 6e 73 66 65 72 72 65 an be transferre 3480: 64 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 d to the interpr 3490: 65 74 65 72 20 69 6e 20 74 68 65 20 69 73 6f 6c eter in the isol 34a0: 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 ated.. # 34b0: 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 application 34c0: 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 domain, making i 34d0: 74 20 61 62 6c 65 20 74 6f 20 73 75 63 63 65 73 t able to succes 34e0: 73 66 75 6c 6c 79 20 72 75 6e 20 74 65 73 74 73 sfully run tests 34f0: 20 74 68 61 74 0d 0a 20 20 20 20 20 20 23 20 20 that.. # 3500: 20 20 20 20 20 72 65 71 75 69 72 65 20 6f 6e 65 require one 3510: 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 20 or more of the 3520: 66 69 6c 65 73 20 69 6e 20 74 68 65 20 62 75 69 files in the bui 3530: 6c 64 20 64 69 72 65 63 74 6f 72 79 2e 20 20 43 ld directory. C 3540: 61 6c 6c 65 72 73 0d 0a 20 20 20 20 20 20 23 20 allers.. # 3550: 20 20 20 20 20 20 74 6f 20 74 68 69 73 20 70 72 to this pr 3560: 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 6b ocedure should k 3570: 65 65 70 20 69 6e 20 6d 69 6e 64 20 74 68 61 74 eep in mind that 3580: 20 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74 the test script 3590: 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 being.. # 35a0: 20 20 20 20 20 20 72 65 74 75 72 6e 65 64 20 63 returned c 35b0: 61 6e 6e 6f 74 20 72 65 6c 79 20 6f 6e 20 61 6e annot rely on an 35c0: 79 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 y script library 35d0: 20 70 72 6f 63 65 64 75 72 65 73 20 6e 6f 74 20 procedures not 35e0: 64 65 66 69 6e 65 64 0d 0a 20 20 20 20 20 20 23 defined.. # 35f0: 20 20 20 20 20 20 20 62 79 20 74 68 65 20 45 61 by the Ea 3600: 67 6c 65 2e 4c 69 62 72 61 72 79 20 70 61 63 6b gle.Library pack 3610: 61 67 65 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e age (i.e. "init. 3620: 65 61 67 6c 65 22 29 2e 20 20 41 6c 73 6f 2c 20 eagle"). Also, 3630: 61 6c 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 all.. # 3640: 20 20 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 variable refe 3650: 72 65 6e 63 65 73 20 61 6e 64 20 61 6c 6c 20 22 rences and all " 3660: 6e 65 73 74 65 64 22 20 63 6f 6d 6d 61 6e 64 73 nested" commands 3670: 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69 6e 0d (i.e. those in. 3680: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 3690: 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 29 2c quare brackets), 36a0: 20 75 6e 6c 65 73 73 20 74 68 65 79 20 61 72 65 unless they are 36b0: 20 73 70 65 63 69 61 6c 6c 79 20 71 75 6f 74 65 specially quote 36c0: 64 2c 20 77 69 6c 6c 20 65 6e 64 20 75 70 0d 0a d, will end up.. 36d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 # be 36e0: 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20 69 6e ing evaluated in 36f0: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of 3700: 74 68 65 20 63 61 6c 6c 69 6e 67 20 69 6e 74 65 the calling inte 3710: 72 70 72 65 74 65 72 20 61 6e 64 20 6e 6f 74 0d rpreter and not. 3720: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 3730: 68 65 20 74 65 73 74 20 69 6e 74 65 72 70 72 65 he test interpre 3740: 74 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 74 ter created in t 3750: 68 65 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c he isolated appl 3760: 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2e 0d ication domain.. 3770: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 3780: 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 return [uplevel 3790: 31 20 5b 6c 69 73 74 20 73 75 62 73 74 20 5b 61 1 [list subst [a 37a0: 70 70 65 6e 64 41 72 67 73 20 24 70 72 65 66 69 ppendArgs$prefi
37b0: 78 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  x {..        if
37c0: 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69  {[hasRuntimeOpti
37d0: 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e  on native]} then
37e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
37f0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
3800: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
3810: 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69  e AddRuntimeOpti
3820: 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  on native..
3830: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
3840: 73 65 74 20 3a 3a 70 61 74 68 20 7b 24 3a 3a 70  set ::path {$::p 3850: 61 74 68 7d 0d 0a 20 20 20 20 20 20 20 20 73 65 ath}.. se 3860: 74 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 7b 5b t ::test_year {[ 3870: 67 65 74 42 75 69 6c 64 59 65 61 72 5d 7d 0d 0a getBuildYear]}.. 3880: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 set ::te 3890: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st_configuration 38a0: 20 7b 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 {[getBuildConfi 38b0: 67 75 72 61 74 69 6f 6e 5d 7d 0d 0a 20 20 20 20 guration]}.. 38c0: 20 20 7d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a }$suffix]]]..
38d0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
38e0: 6f 63 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46  oc tryCopyBuildF
38f0: 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d  ile { fileName }
3900: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
3910: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 77 65     # NOTE: If we
3920: 20 63 61 6e 6e 6f 74 20 63 6f 70 79 20 74 68 65   cannot copy the
3930: 20 61 73 73 65 6d 62 6c 79 20 74 68 65 6e 20 69   assembly then i
3940: 74 20 69 73 20 70 72 6f 62 61 62 6c 79 20 61 6c  t is probably al
3950: 72 65 61 64 79 20 6c 6f 61 64 65 64 2e 0d 0a 20  ready loaded...
3960: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
3970: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65  t sourceFileName
3980: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
3990: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  me $fileName]... 39a0: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c . if {![fil 39b0: 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 e exists$source
39c0: 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  FileName]} then
39d0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
39e0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 39f0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 3a00: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 3a10: 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e - skipped copyin 3a20: 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 g build file \"" 3a30: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
3a40: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
3a50: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  "\", it does not
3a60: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20   exist\n"]....
3a70: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20        return..
3a80: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73      }....      s
3a90: 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  et targetFileNam
3aa0: 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  e [getBinaryFile
3ab0: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  Name $fileName]. 3ac0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca 3ad0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 3ae0: 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 file copy -forc 3af0: 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d e$sourceFileNam
3b00: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  e $targetFileNam 3b10: 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b e}] == 0} then { 3b20: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 3b30: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
3b40: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
3b50: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
3b60: 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69   copied build fi
3b70: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou 3b80: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 rceFileName "\" 3b90: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 to \"" \.. 3ba0: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c$targetFil
3bb0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
3bc0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
3bd0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 3be0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 3bf0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 3c00: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c "---- fail 3c10: 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c 64 ed to copy build 3c20: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 file from \""$
3c30: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c  sourceFileName \
3c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c  ..            "\
3c50: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74  " to \"" $target 3c60: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a FileName \"\n].. 3c70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 3c80: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 ... proc tryD 3c90: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 3ca0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a { fileName } {.. 3cb0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 3cc0: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c me [getBinaryFil 3cd0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d eName$fileName]
3ce0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
3cf0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 3d00: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 3d10: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
3d20: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
3d30: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
3d40: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
3d50: 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20  kipped deleting
3d60: 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20  binary file \""
3d70: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  $fileName \.. 3d80: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 "\", it 3d90: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c does not exist\ 3da0: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 n"].... r 3db0: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a eturn.. }.. 3dc0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 3dd0: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 ch {file delete 3de0: 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30$fileName}] == 0
3df0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
3e00: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 3e10: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 3e20: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 3e30: 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 "---- deleted 3e40: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 binary file \"" 3e50: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d$fileName \"\n]
3e60: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
3e70: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
3e80: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 3e90: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 3ea0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 3eb0: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 3ec0: 65 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 e binary file \" 3ed0: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e "$fileName \"\n
3ee0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
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 41 73 73 65 6d 62 6c 79 20 7b  ryCopyAssembly {
3f10: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 64 62 20 74   fileName {pdb t
3f20: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
3f30: 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65  tryCopyBuildFile
3f40: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName.... 3f50: 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 if {$pdb} th
3f60: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72  en {..        tr
3f70: 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 5b  yCopyBuildFile [
3f80: 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65  appendArgs [file
3f90: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e   rootname $fileN 3fa0: 61 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20 20 ame] .pdb].. 3fb0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 3fc0: 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 proc tryDelet 3fd0: 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 eAssembly { file 3fe0: 4e 61 6d 65 20 7b 70 64 62 20 74 72 75 65 7d 20 Name {pdb true} 3ff0: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 } {.. tryDe 4000: 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 leteBinaryFile$
4010: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20  fileName....
4020: 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e    if {$pdb} then 4030: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44 {.. tryD 4040: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 4050: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c [appendArgs [fil 4060: 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 e rootname$file
4070: 4e 61 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20  Name] .pdb]..
4080: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
4090: 20 20 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64      proc tryLoad
40a0: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e  Assembly { fileN
40b0: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  ame } {..      s
40c0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74  et fileName [get
40d0: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $40e0: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... 40f0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 if {[catch {s 4100: 65 74 20 61 73 73 65 6d 62 6c 79 20 5c 0d 0a 20 et assembly \.. 4110: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 [ob 4120: 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 ject load -loadt 4130: 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 ype File -alias 4140: 24 66 69 6c 65 4e 61 6d 65 5d 7d 5d 20 3d 3d 20$fileName]}] ==
4150: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
4160: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
4170: 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 64 20 74  NOTE: Now, add t
4180: 68 65 20 6e 65 63 65 73 73 61 72 79 20 74 65 73  he necessary tes
4190: 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20  t constraint...
41a0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
41b0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
41c0: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b  [file rootname [
41d0: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN 41e0: 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ame]].... 41f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 4200: 54 45 3a 20 47 72 61 62 20 74 68 65 20 69 6d 61 TE: Grab the ima 4210: 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 ge runtime versi 4220: 6f 6e 20 66 72 6f 6d 20 74 68 65 20 61 73 73 65 on from the asse 4230: 6d 62 6c 79 20 62 65 63 61 75 73 65 0d 0a 20 20 mbly because.. 4240: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se 4250: 76 65 72 61 6c 20 74 65 73 74 73 20 72 65 6c 79 veral tests rely 4260: 20 6f 6e 20 69 74 20 68 61 76 69 6e 67 20 61 20 on it having a 4270: 63 65 72 74 61 69 6e 20 76 61 6c 75 65 2e 0d 0a certain value... 4280: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 4290: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 42a0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 [appendArgs [fi 42b0: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
42c0: 65 5d 20 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  e] _ \..
42d0: 20 20 20 20 5b 24 61 73 73 65 6d 62 6c 79 20 49      [$assembly I 42e0: 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 mageRuntimeVersi 42f0: 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 on]].... 4300: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 4310: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 66 75 E: Return the fu 4320: 6c 6c 20 70 61 74 68 20 6f 66 20 74 68 65 20 6c ll path of the l 4330: 6f 61 64 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 oaded file... 4340: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4350: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 return$fileName
4360: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
4370: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
4380: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
4390: 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 20   checkForSQLite
43a0: 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20  { channel } {..
43b0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 43c0: 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 nel "---- checki 43d0: 6e 67 20 66 6f 72 20 63 6f 72 65 20 53 51 4c 69 ng for core SQLi 43e0: 74 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d te library... ". 43f0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca 4400: 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f tch {object invo 4410: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 4420: 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 blic System.Data 4430: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 4440: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 4450: 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 7d 20 SQLiteVersion} 4460: 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 version] == 0} t 4470: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 4480: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 4490: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 : Attempt to que 44a0: 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f ry the Fossil so 44b0: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 urce identifier 44c0: 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a for the SQLite.. 44d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 44e0: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 core library... 44f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4500: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 if {[catch {ob 4510: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 4520: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 gs +NonPublic Sy 4530: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 4540: 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 .SQLite3 \.. 4550: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 SQLi 4560: 74 65 53 6f 75 72 63 65 49 64 7d 20 73 6f 75 72 teSourceId} sour 4570: 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ceId]} then {.. 4580: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 4590: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We 45a0: 20 66 61 69 6c 65 64 20 74 6f 20 71 75 65 72 79 failed to query 45b0: 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 the Fossil sour 45c0: 63 65 20 69 64 65 6e 74 69 66 69 65 72 2e 0d 0a ce identifier... 45d0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 45e0: 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 set sourc 45f0: 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 eId unknown.. 4600: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 4610: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 4620: 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 OTE: Yes, the SQ 4630: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar 4640: 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 y appears to be 4650: 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 available... 4660: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 #.. a 4670: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c ddConstraint SQL 4680: 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 ite.... t 4690: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
46a0: 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28  ppendArgs "yes (
46b0: 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24  " $version " "$
46c0: 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d  sourceId ")\n"].
46d0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
46e0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $46f0: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 channel no\n.. 4700: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 4710: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF 4720: 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f orSQLiteDefineCo 4730: 6e 73 74 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c nstant { channel 4740: 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 name } {.. 4750: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
4760: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
4770: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
4780: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74  hecking for Syst
4790: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64  em.Data.SQLite d
47a0: 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c  efine constant \
47b0: 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  "" $name \.. 47c0: 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d "\"... "]. 47d0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca 47e0: 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f tch {object invo 47f0: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 4800: 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 blic System.Data 4810: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 .SQLite.SQLite3 4820: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 4830: 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 DefineConstants 4840: 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 } defineConstant 4850: 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. 4860: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 . if {[ls 4870: 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f earch -exact -no 4880: 63 61 73 65 20 24 64 65 66 69 6e 65 43 6f 6e 73 case$defineCons
4890: 74 61 6e 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20  tants $name] != 48a0: 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 -1} then {.. 48b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 48c0: 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 # NOTE: Yes, 48d0: 74 68 69 73 20 64 65 66 69 6e 65 20 63 6f 6e 73 this define cons 48e0: 74 61 6e 74 20 77 61 73 20 65 6e 61 62 6c 65 64 tant was enabled 48f0: 20 77 68 65 6e 20 74 68 65 20 6d 61 6e 61 67 65 when the manage 4900: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 d.. # 4910: 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 assembly wa 4920: 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 s compiled... 4930: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4940: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 4950: 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 64 65 t [appendArgs de 4960: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 fineConstant.Sys 4970: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 4980: 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20$name]....
4990: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 49a0: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 nel yes\n.. 49b0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 49c0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
49d0: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..
49e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
49f0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
4a00: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72  puts $channel er 4a10: 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a ror\n.. }.. 4a20: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 4a30: 6f 63 20 67 65 74 44 61 74 65 54 69 6d 65 46 6f oc getDateTimeFo 4a40: 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 rmat {} {.. 4a50: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 4a60: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 : This procedure 4a70: 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 simply returns 4a80: 74 68 65 20 22 64 65 66 61 75 6c 74 22 20 44 61 the "default" Da 4a90: 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 75 73 teTime format us 4aa0: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # 4ab0: 20 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 by the test su 4ac0: 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ite... #.. 4ad0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 4ae0: 78 69 73 74 73 20 3a 3a 64 61 74 65 74 69 6d 65 xists ::datetime 4af0: 5f 66 6f 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 _format] && \.. 4b00: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 4b10: 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 65 74 length$::datet
4b20: 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d  ime_format] > 0}
4b30: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
4b40: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
4b50: 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d  TE: Return the m
4b60: 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64  anually overridd
4b70: 65 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  en value for the
4b80: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
4b90: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
4ba0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 4bb0: 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d datetime_format. 4bc0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 4bd0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 4be0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu 4bf0: 72 6e 20 61 6e 20 49 53 4f 38 36 30 31 20 44 61 rn an ISO8601 Da 4c00: 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f teTime format co 4c10: 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 mpatible with SQ 4c20: 4c 69 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 Lite,.. # 4c30: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 4c40: 74 61 2e 53 51 4c 69 74 65 2c 20 61 6e 64 20 73 ta.SQLite, and s 4c50: 75 69 74 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e uitable for roun 4c60: 64 2d 74 72 69 70 70 69 6e 67 20 77 69 74 68 20 d-tripping with 4c70: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 4c80: 20 20 20 20 20 44 61 74 65 54 69 6d 65 20 63 6c DateTime cl 4c90: 61 73 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 ass of the frame 4ca0: 77 6f 72 6b 2e 20 20 49 66 20 74 68 69 73 20 76 work. If this v 4cb0: 61 6c 75 65 20 69 73 20 63 68 61 6e 67 65 64 2c alue is changed, 4cc0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 4cd0: 20 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 20 various tests 4ce0: 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 may fail... 4cf0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 4d00: 74 75 72 6e 20 22 79 79 79 79 2d 4d 4d 2d 64 64 turn "yyyy-MM-dd 4d10: 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 HH:mm:ss.FFFFFF 4d20: 46 4b 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 FK".. }.. 4d30: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 4d40: 20 65 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 enumerableToLis 4d50: 74 20 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d t { enumerable } 4d60: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 {.. set re 4d70: 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 sult [list].... 4d80: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 4d90: 20 6c 65 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 length$enumera
4da0: 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e  ble] == 0 || $en 4db0: 75 6d 65 72 61 62 6c 65 20 65 71 20 22 6e 75 6c umerable eq "nul 4dc0: 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 l"} then {.. 4dd0: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
4de0: 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  lt..      }....
4df0: 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65       object fore
4e00: 61 63 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20  ach -alias item
4e10: 24 65 6e 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20  $enumerable {.. 4e20: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 4e30: 6e 67 20 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d ng length$item]
4e40: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
4e50: 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
4e60: 72 65 73 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f  result [$item To 4e70: 53 74 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 String].. 4e80: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 4e90: 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
4ea0: 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ult..    }.....
4eb0: 20 20 20 70 72 6f 63 20 63 61 74 63 68 41 6e 64     proc catchAnd
4ec0: 52 65 74 75 72 6e 20 7b 20 73 63 72 69 70 74 20  Return { script
4ed0: 7b 73 74 61 63 6b 54 72 61 63 65 20 66 61 6c 73  {stackTrace fals
4ee0: 65 7d 20 7b 73 74 72 69 63 74 20 74 72 75 65 7d  e} {strict true}
4ef0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
4f00: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61       # NOTE: Eva
4f10: 6c 75 61 74 65 20 74 68 65 20 73 63 72 69 70 74  luate the script
4f20: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
4f30: 20 63 61 6c 6c 65 72 20 69 6e 20 74 68 65 69 72   caller in their
4f40: 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20   context,..
4f50: 20 23 20 20 20 20 20 20 20 63 61 70 74 75 72 69   #       capturi
4f60: 6e 67 20 62 6f 74 68 20 74 68 65 20 72 65 73 75  ng both the resu
4f70: 6c 74 20 61 6e 64 20 74 68 65 20 72 65 74 75 72  lt and the retur
4f80: 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23  n code...      #
4f90: 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 64 65  ..      set code
4fa0: 20 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c   [catch {uplevel
4fb0: 20 31 20 24 73 63 72 69 70 74 7d 20 72 65 73 75   1 $script} resu 4fc0: 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a lt].... #.. 4fd0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 # NOTE: Di 4fe0: 64 20 74 68 65 20 73 63 72 69 70 74 20 70 72 6f d the script pro 4ff0: 76 69 64 65 64 20 62 79 20 74 68 65 20 63 61 6c vided by the cal 5000: 6c 65 72 20 4e 4f 54 20 72 61 69 73 65 20 61 6e ler NOT raise an 5010: 20 65 72 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 error?.. # 5020: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 73 74 72 .. if {$str
5030: 69 63 74 20 26 26 20 24 63 6f 64 65 20 3d 3d 20  ict && $code == 5040: 30 20 7c 7c 20 21 24 73 74 72 69 63 74 20 26 26 0 || !$strict &&
5050: 20 24 63 6f 64 65 20 21 3d 20 31 7d 20 74 68 65   $code != 1} the 5060: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 5070: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 5080: 53 75 63 63 65 73 73 2e 20 20 52 65 74 75 72 6e Success. Return 5090: 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 a list with the 50a0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 return code and 50b0: 20 74 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 the result... 50c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 50d0: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 return [list$c
50e0: 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20  ode $result].. 50f0: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 } elseif {$s
5100: 74 61 63 6b 54 72 61 63 65 7d 20 74 68 65 6e 20  tackTrace} then
5110: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
5120: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61        # NOTE: Fa
5130: 69 6c 75 72 65 2e 20 20 54 68 65 20 63 61 6c 6c  ilure.  The call
5140: 65 72 20 77 61 6e 74 73 20 61 20 66 75 6c 6c 20  er wants a full
5150: 73 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 20  stack trace (if
5160: 61 70 70 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20  applicable),..
5170: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
5180: 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68  turn a list with
5190: 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65   the return code
51a0: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result
51b0: 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20  verbatim...
51c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
51d0: 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65  turn [list $code 51e0: 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20$result]..
51f0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
5200: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
5210: 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20  NOTE: Failure.
5220: 54 68 65 20 63 61 6c 6c 65 72 20 64 6f 65 73 20  The caller does
5230: 6e 6f 74 20 77 61 6e 74 20 61 20 66 75 6c 6c 20  not want a full
5240: 73 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 0d  stack trace (if.
5250: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
5260: 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 20 72 65   applicable), re
5270: 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68  turn a list with
5280: 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65   the return code
5290: 2c 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20  , the error..
52a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 64       #       cod
52b0: 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 70  e for the interp
52c0: 72 65 74 65 72 2c 20 61 6e 64 20 74 68 65 20 65  reter, and the e
52d0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 75 70 20  rror message up
52e0: 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..
52f0: 23 20 20 20 20 20 20 20 70 6f 69 6e 74 20 77 68  #       point wh
5300: 65 72 65 20 74 68 65 20 73 74 61 63 6b 20 74 72  ere the stack tr
5310: 61 63 65 20 73 68 6f 75 6c 64 20 73 74 61 72 74  ace should start
5320: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
5330: 20 20 20 20 20 20 73 65 74 20 69 6e 64 65 78 20        set index
5340: 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20 22 20  [string first "
5350: 20 20 61 74 20 22 20 24 72 65 73 75 6c 74 5d 3b    at " $result]; 5360: 20 23 20 48 41 43 4b 3a 20 52 65 6c 69 61 62 6c # HACK: Reliabl 5370: 65 3f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 e?.... re 5380: 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 turn [list$code
5390: 20 24 3a 3a 65 72 72 6f 72 43 6f 64 65 20 5b 65   $::errorCode [e 53a0: 78 70 72 20 7b 24 69 6e 64 65 78 20 21 3d 20 2d xpr {$index != -
53b0: 31 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  1 ? \..
53c0: 20 20 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20     [string trim
53d0: 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 72  [string range $r 53e0: 65 73 75 6c 74 20 30 20 24 69 6e 64 65 78 5d 5d esult 0$index]]
53f0: 20 3a 20 24 72 65 73 75 6c 74 7d 5d 5d 0d 0a 20   : $result}]].. 5400: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 5410: 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 .. proc compi 5420: 6c 65 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a leCSharpWith {.. 5430: 20 20 20 20 20 20 20 20 20 20 20 20 74 65 78 74 text 5440: 20 6d 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 memory symbols 5450: 73 74 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 strict resultsVa 5460: 72 4e 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e rName errorsVarN 5470: 61 6d 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 ame fileNames.. 5480: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 20 args 5490: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 54a0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 # NOTE: Sinc 54b0: 65 20 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74 e we are going t 54c0: 6f 20 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f o use this metho 54d0: 64 20 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73 d name a lot, as 54e0: 73 69 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 20 sign it to a.. 54f0: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 # vari 5500: 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 20 able first... 5510: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 5520: 61 64 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 add ReferencedAs 5530: 73 65 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a semblies.Add.... 5540: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 5550: 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68 NOTE: Create th 5560: 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74 e base command t 5570: 6f 20 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61 o evaluate and a 5580: 64 64 20 74 68 65 20 70 72 6f 70 65 72 74 79 20 dd the property 5590: 73 65 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 20 settings.. 55a0: 23 20 20 20 20 20 20 20 74 68 61 74 20 61 72 65 # that are 55b0: 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e almost always n 55c0: 65 65 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69 eeded by our uni 55d0: 74 20 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68 t tests (i.e. th 55e0: 65 20 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 20 e System.. 55f0: 23 20 20 20 20 20 20 20 61 6e 64 20 53 79 73 74 # and Syst 5600: 65 6d 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79 em.Data assembly 5610: 20 72 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 references)... 5620: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 5630: 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 t command [list 5640: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24 74 compileCSharp$t
5650: 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79 6d  ext $memory$sym
5660: 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65 73  bols $strict res 5670: 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 ults \.. 5680: 20 20 65 72 72 6f 72 73 20 24 61 64 64 20 53 79 errors$add Sy
5690: 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53 79  stem.dll $add Sy 56a0: 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 61 stem.Data.dll$a
56b0: 64 64 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 64 6c  dd System.Xml.dl
56c0: 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  l]....      #..
56d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64       # NOTE: Add
56e0: 20 61 6c 6c 20 74 68 65 20 70 72 6f 76 69 64 65   all the provide
56f0: 64 20 66 69 6c 65 20 6e 61 6d 65 73 20 61 73 20  d file names as
5700: 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e  assembly referen
5710: 63 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ces...      #..
5720: 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
5730: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 73  eName $fileNames 5740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 {.. lapp 5750: 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 64 64 end command$add
5760: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
5770: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  ame $fileName].. 5780: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 5790: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 57a0: 3a 20 41 64 64 20 74 68 65 20 65 78 74 72 61 20 : Add the extra 57b0: 61 72 67 75 6d 65 6e 74 73 2c 20 69 66 20 61 6e arguments, if an 57c0: 79 2c 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e y, to the comman 57d0: 64 20 74 6f 20 65 76 61 6c 75 61 74 65 2e 0d 0a d to evaluate... 57e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 #.. e 57f0: 76 61 6c 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d val lappend comm 5800: 61 6e 64 20 24 61 72 67 73 0d 0a 0d 0a 20 20 20 and$args....
5810: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
5820: 54 45 3a 20 41 6c 69 61 73 20 74 68 65 20 63 6f  TE: Alias the co
5830: 6d 70 69 6c 65 72 20 6c 6f 63 61 6c 20 72 65 73  mpiler local res
5840: 75 6c 74 73 20 61 6e 64 20 65 72 72 6f 72 73 20  ults and errors
5850: 76 61 72 69 61 62 6c 65 73 20 74 6f 20 74 68 65  variables to the
5860: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5870: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 70  variable names p
5880: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
5890: 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d  aller...      #.
58a0: 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $58b0: 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 72 resultsVarName r 58c0: 65 73 75 6c 74 73 0d 0a 20 20 20 20 20 20 75 70 esults.. up 58d0: 76 61 72 20 31 20 24 65 72 72 6f 72 73 56 61 72 var 1$errorsVar
58e0: 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a 0d 0a 20  Name errors....
58f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
5900: 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74  NOTE: Evaluate t
5910: 68 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 5b  he constructed [
5920: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 5d 20 63  compileCSharp] c
5930: 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65 74 75 72  ommand and retur
5940: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  n the..      #
5950: 20 20 20 20 20 72 65 73 75 6c 74 2e 0d 0a 20 20       result...
5960: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61      #..      eva
5970: 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20  l $command.. 5980: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 }..... proc i 5990: 73 4d 65 6d 6f 72 79 44 62 20 7b 20 66 69 6c 65 sMemoryDb { file 59a0: 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 Name } {.. 59b0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 59c0: 20 49 73 20 74 68 65 20 73 70 65 63 69 66 69 65 Is the specifie 59d0: 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 d database file 59e0: 6e 61 6d 65 20 72 65 61 6c 6c 79 20 61 6e 20 69 name really an i 59f0: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 n-memory databas 5a00: 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e?.. #.. 5a10: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 return [expr 5a20: 7b 24 66 69 6c 65 4e 61 6d 65 20 65 71 20 22 3a {$fileName eq ":
5a30: 6d 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20  memory:" || \..
5a40: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
5a50: 20 72 61 6e 67 65 20 24 66 69 6c 65 4e 61 6d 65   range $fileName 5a60: 20 30 20 31 32 5d 20 65 71 20 22 66 69 6c 65 3a 0 12] eq "file: 5a70: 3a 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20 :memory:"}].. 5a80: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 5a90: 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 20 20 20 setupDb {.. 5aa0: 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 fileName 5ab0: 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 74 65 54 {mode ""} {dateT 5ac0: 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d 20 7b 64 imeFormat ""} {d 5ad0: 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 22 7d 20 ateTimeKind ""} 5ae0: 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 20 20 20 {flags ""}.. 5af0: 20 20 20 20 20 20 20 20 7b 65 78 74 72 61 20 22 {extra " 5b00: 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 "} {qualify true 5b10: 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 } {delete true} 5b20: 7b 75 72 69 20 66 61 6c 73 65 7d 20 7b 76 61 72 {uri false} {var 5b30: 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 Name db} } {.. 5b40: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5b50: 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 OTE: First, see 5b60: 69 66 20 74 68 65 20 63 61 6c 6c 65 72 20 68 61 if the caller ha 5b70: 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 s requested an i 5b80: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 n-memory databas 5b90: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 5ba0: 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 set isMemory 5bb0: 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c [isMemoryDb$fil
5bc0: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
5bd0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
5be0: 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65   For now, all te
5bf0: 73 74 20 64 61 74 61 62 61 73 65 73 20 75 73 65  st databases use
5c00: 64 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  d by the test su
5c10: 69 74 65 20 61 72 65 20 70 6c 61 63 65 64 20 69  ite are placed i
5c20: 6e 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20  nto..      #
5c30: 20 20 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79     the temporary
5c40: 20 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61 63   directory.  Eac
5c50: 68 20 64 61 74 61 62 61 73 65 20 75 73 65 64 20  h database used
5c60: 62 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c 64  by a test should
5c70: 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
5c80: 20 20 20 63 6c 65 61 6e 65 64 20 75 70 20 62 79     cleaned up by
5c90: 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e 67   that test using
5ca0: 20 74 68 65 20 22 63 6c 65 61 6e 75 70 44 62 22   the "cleanupDb"
5cb0: 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f   procedure, belo
5cc0: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
5cd0: 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72     if {!$isMemor 5ce0: 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 y &&$qualify} t
5cf0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
5d00: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
5d10: 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
5d20: 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66  aseDirectory] [f
5d30: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa 5d40: 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d me]].. }... 5d50: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5d60: 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 # NOTE: By defau 5d70: 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70 lt, delete any p 5d80: 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 re-existing data 5d90: 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61 base with the sa 5da0: 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 me file.. # 5db0: 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 69 name if i 5dc0: 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73 t currently exis 5dd0: 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ts... #.. 5de0: 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f if {!$isMemo
5df0: 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26  ry && $delete && 5e00: 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 [file exists$f
5e10: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
5e20: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
5e30: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
5e40: 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 61  empt to delete a
5e50: 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  ny pre-existing
5e60: 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68  database with th
5e70: 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20  e same file..
5e80: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d       #       nam
5e90: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
5ea0: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
5eb0: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $5ec0: 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d fileName} error] 5ed0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 5ee0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 5ef0: 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 # NOTE: We some 5f00: 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 how failed to de 5f10: 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 lete the file, r 5f20: 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... 5f30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5f40: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
5f50: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
5f60: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
5f70: 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
5f80: 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64  ING: failed to d
5f90: 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66  elete database f
5fa0: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam 5fb0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 5fc0: 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73 65 "\" during se 5fd0: 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e tup, error: " \n 5fe0: 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
5ff0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
6000: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
6010: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
6020: 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
6030: 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
6040: 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
6050: 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 0d 0a 20  ontext of the..
6060: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
6070: 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65  ler.  The handle
6080: 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20 64   to the opened d
6090: 61 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20  atabase will be
60a0: 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20  stored there...
60b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70       #..      up
60c0: 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64  var 1 $varName d 60d0: 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 b.... #.. 60e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 # NOTE: Star 60f0: 74 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 63 t building the c 6100: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string 6110: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 . The only requ 6120: 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 ired portion.. 6130: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t 6140: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st 6150: 72 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 61 ring is the data 6160: 20 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 63 source, which c 6170: 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 ontains the.. 6180: 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 # datab 6190: 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 74 ase file name it 61a0: 73 65 6c 66 2e 20 20 49 66 20 74 68 65 20 63 61 self. If the ca 61b0: 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 73 ller wants to us 61c0: 65 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 20 e a URI as.. 61d0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 61 # the da 61e0: 74 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 74 ta source, use t 61f0: 68 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 he FullUri conne 6200: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f ction string pro 6210: 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 20 perty to.. 6220: 23 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 # prevent 6230: 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 20 the data source 6240: 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 6e string from bein 6250: 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 g mangled... 6260: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
6270: 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  uri} then {..
6280: 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74       set connect
6290: 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b 66  ion {FullUri=${f 62a0: 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 ileName}}.. 62b0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 62c0: 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f set connectio 62d0: 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d 24 n {Data Source=$
62e0: 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20  {fileName}}..
62f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
6300: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
6310: 69 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65 64  ince this proced
6320: 75 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63 69  ure has no speci
6330: 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20  al knowledge of
6340: 77 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  what the default
6350: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6360: 73 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20 74  setting is for t
6370: 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63 6f  he ToFullPath co
6380: 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
6390: 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73 0d  propery, always.
63a0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
63b0: 64 64 20 74 68 65 20 76 61 6c 75 65 20 77 65 20  dd the value we
63c0: 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74 68  know about to th
63d0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
63e0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ing...      #..
63f0: 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e       append conn
6400: 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50  ection {;ToFullP
6410: 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d 0d  ath=${qualify}}. 6420: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 6430: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 # NOTE: If the 6440: 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 caller specifie 6450: 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 d a journal mode 6460: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 , add the necess 6470: 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 ary portion.. 6480: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th 6490: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str 64a0: 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ing now... 64b0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st 64c0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 ring length$mod
64d0: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
64e0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63          append c
64f0: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72  onnection {;Jour
6500: 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d  nal Mode=${mode} 6510: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 6520: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 6530: 4f 54 45 3a 20 49 66 20 74 68 65 20 63 61 6c 6c OTE: If the call 6540: 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44 er specified a D 6550: 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c 20 ateTime format, 6560: 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 add the necessar 6570: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 6580: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 portion of the 6590: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 65a0: 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d g now... #. 65b0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 65c0: 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 ng length$dateT
65d0: 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d 20  imeFormat] > 0}
65e0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
65f0: 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  append connectio
6600: 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d  n {;DateTimeForm
6610: 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f 72  at=${dateTimeFor 6620: 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a mat}}.. }.. 6630: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6640: 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 # NOTE: If the 6650: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified 6660: 20 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2c a DateTimeKind, 6670: 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 add the necessa 6680: 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 ry portion.. 6690: 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 # of the 66a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 66b0: 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # 66c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 66d0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 ing length$date
66e0: 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20 74  TimeKind] > 0} t
66f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
6700: 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ppend connection
6710: 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d   {;DateTimeKind=
6720: 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d 7d  ${dateTimeKind}} 6730: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 6740: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 6750: 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 TE: If there are 6760: 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 any global (per 6770: 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 test run) conne 6780: 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 ction flags curr 6790: 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 ently.. # 67a0: 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 set, use th 67b0: 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 em now (i.e. by 67c0: 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 combining them w 67d0: 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 ith the ones for 67e0: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 this.. # 67f0: 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 connection) 6800: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 6810: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 6820: 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f ts ::connection_ 6830: 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 20 flags] && \.. 6840: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 6850: 65 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 ength$::connect
6860: 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d 20  ion_flags] > 0}
6870: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
6880: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
6890: 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67  E: Show (and log
68a0: 29 20 74 68 61 74 20 77 65 20 64 65 74 65 63 74  ) that we detect
68b0: 65 64 20 73 6f 6d 65 20 67 6c 6f 62 61 6c 20 63  ed some global c
68c0: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e  onnection flags.
68d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
68e0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 68f0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 6900: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 6910: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 "---- glob 6920: 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c al connection fl 6930: 61 67 73 20 64 65 74 65 63 74 65 64 3a 20 22 20 ags detected: " 6940: 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c$::connection_fl
6950: 61 67 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ags \n]....
6960: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
6970: 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 6e  NOTE: Combine an
6980: 64 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68 65  d/or replace the
6990: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
69a0: 73 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 20  s and then show
69b0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  the..        #
69c0: 20 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e 0d       new value..
69d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
69e0: 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63      set flags [c
69f0: 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61  ombineFlags $fla 6a00: 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e gs$::connection
6a10: 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 20  _flags]....
6a20: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 6a30: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 6a40: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 6a50: 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e "---- combin 6a60: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c ed connection fl 6a70: 61 67 73 20 61 72 65 3a 20 22 20 24 66 6c 61 67 ags are: "$flag
6a80: 73 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  s \n]..      }..
6a90: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
6aa0: 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20   # NOTE: If the
6ab0: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64  caller specified
6ac0: 20 61 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   a SQLiteConnect
6ad0: 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 74 68  ionFlags, add th
6ae0: 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20  e necessary..
6af0: 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69     #       porti
6b00: 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63  on of the connec
6b10: 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e  tion string now.
6b20: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
6b30: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
6b40: 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 7d  gth $flags] > 0} 6b50: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 6b60: 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti 6b70: 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c 61 on {;Flags=${fla
6b80: 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  gs}}..      }...
6b90: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
6ba0: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63  # NOTE: If the c
6bb0: 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20  aller specified
6bc0: 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f 61 64  an extra payload
6bd0: 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   to the connecti
6be0: 6f 6e 20 73 74 72 69 6e 67 2c 0d 0a 20 20 20 20  on string,..
6bf0: 20 20 23 20 20 20 20 20 20 20 61 70 70 65 6e 64    #       append
6c00: 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20   it now...
6c10: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
6c20: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 74  ring length $ext 6c30: 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ra] > 0} then {. 6c40: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 . append 6c50: 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 65 connection \;$e
6c60: 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  xtra..      }...
6c70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
6c80: 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68 65  # NOTE: Open the
6c90: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
6ca0: 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 6e  tion now, placin
6cb0: 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61 6e  g the opaque han
6cc0: 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  dle value..
6cd0: 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68   #       into th
6ce0: 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63 69  e variable speci
6cf0: 66 69 65 64 20 62 79 20 74 68 65 20 63 61 6c 6c  fied by the call
6d00: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
6d10: 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c 20      set db [sql
6d20: 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69 74  open -type SQLit
6d30: 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65 63  e [subst $connec 6d40: 74 69 6f 6e 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c tion]].. }... 6d50: 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e .. proc clean 6d60: 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 upDb { fileName 6d70: 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f {varName db} {co 6d80: 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 llect true} {qua 6d90: 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 lify true}.. 6da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6db0: 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d {delete true} } 6dc0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 6dd0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 6de0: 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 pt to force all 6df0: 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 pending "garbage 6e00: 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 " objects to be 6e10: 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 collected,.. 6e20: 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 # includ 6e30: 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 ing SQLite state 6e40: 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 ments and backup 6e50: 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 objects; this s 6e60: 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 hould allow.. 6e70: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 # the u 6e80: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 nderlying databa 6e90: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 se file to be de 6ea0: 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d leted... #. 6eb0: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c . if {$coll
6ec0: 65 63 74 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ect && \..
6ed0: 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65      [catch {obje
6ee0: 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74  ct invoke GC Get
6ef0: 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65  TotalMemory true
6f00: 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b  } error]} then {
6f10: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
6f20: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 6f30: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 6f40: 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 6f50: 47 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 67 G: failed full g 6f60: 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f arbage collectio 6f70: 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 n, error: " \.. 6f80: 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 6f90: 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
6fa0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
6fb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
6fc0: 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69  fer to the speci
6fd0: 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65  fied variable (e
6fe0: 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65  .g. "db") in the
6ff0: 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 0d   context of the.
7000: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
7010: 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64  aller.  The hand
7020: 6c 65 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64  le to the opened
7030: 20 64 61 74 61 62 61 73 65 20 69 73 20 73 74 6f   database is sto
7040: 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20  red there...
7050: 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72    #..      upvar
7060: 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a   1 $varName db.. 7070: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 7080: 20 23 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 # NOTE: Close t 7090: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f he connection to 70a0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f the database no 70b0: 77 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 w. This should 70c0: 61 6c 6c 6f 77 20 75 73 20 74 6f 0d 0a 20 20 20 allow us to.. 70d0: 20 20 20 23 20 20 20 20 20 20 20 64 65 6c 65 74 # delet 70e0: 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 e the underlying 70f0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d database file.. 7100: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 7110: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 7120: 20 64 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b db] && [catch { 7130: 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 sql close$db} e
7140: 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  rror]} then {..
7150: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
7160: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d    # NOTE: We som
7170: 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63  ehow failed to c
7180: 6c 6f 73 65 20 74 68 65 20 64 61 74 61 62 61 73  lose the databas
7190: 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a  e, report why...
71a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
71b0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 71c0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 71d0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 71e0: 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 71f0: 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f G: failed to clo 7200: 73 65 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 se database \"" 7210: 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20$db "\", error:
7220: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
7230: 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 7240: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 7250: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7260: 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 TE: First, see i 7270: 66 20 74 68 65 20 63 61 6c 6c 65 72 20 68 61 73 f the caller has 7280: 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e requested an in 7290: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 -memory database 72a0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 72b0: 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b set isMemory [ 72c0: 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 isMemoryDb$file
72d0: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23  Name]....      #
72e0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
72f0: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70  Build the full p
7300: 61 74 68 20 74 6f 20 74 68 65 20 64 61 74 61 62  ath to the datab
7310: 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20  ase file name.
7320: 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73  For now, all tes
7330: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
7340: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files
7350: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68  are stored in th
7360: 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  e temporary dire
7370: 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d  ctory...      #.
7380: 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d  .      if {!$isM 7390: 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 emory &&$qualif
73a0: 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  y} then {..
73b0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
73c0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
73d0: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
73e0: 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  ] [file tail $fi 73f0: 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 leName]].. 7400: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 7410: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 7420: 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 k if the file st 7430: 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 ill exists... 7440: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 7450: 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 !$isMemory && $d 7460: 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 elete && [file e 7470: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
7480: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
7490: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
74a0: 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69  OTE: Skip deleti
74b0: 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ng database file
74c0: 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65  s if somebody se
74d0: 74 73 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20  ts the global..
74e0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76         #       v
74f0: 61 72 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65  ariable to preve
7500: 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  nt it...
7510: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  #..        if {!
7520: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
7530: 6f 28 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 29  o(cleanupDbFile)
7540: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
7550: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7560: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
7570: 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20  t to delete the
7580: 74 65 73 74 20 64 61 74 61 62 61 73 65 20 66 69  test database fi
7590: 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20  le now...
75a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
75b0: 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63  if {[set code [c
75c0: 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74  atch {file delet
75d0: 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72  e $fileName} err 75e0: 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 or]]} then {.. 75f0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 7600: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 7610: 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c We somehow fail 7620: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 ed to delete the 7630: 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 file, report wh 7640: 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y... 7650: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 #.. t 7660: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
7670: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
7680: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
7690: 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
76a0: 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  G: failed to del
76b0: 65 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  ete database fil
76c0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName 76d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 76e0: 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c "\" during cl 76f0: 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 eanup, error: " 7700: 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
7710: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
7720: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
7730: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
7740: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
7750: 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70  how that we skip
7760: 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65  ped deleting the
7770: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...
7780: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
7790: 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20  et code 0....
77a0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 77b0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 77c0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 77d0: 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 77e0: 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 WARNING: skipped 77f0: 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 deleting databa 7800: 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c se file \""$fil
7810: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
7820: 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e         "\" durin
7830: 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20  g cleanup\n"]..
7840: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
7850: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
7860: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
7870: 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f  OTE: The file do
7880: 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75  es not exist, su
7890: 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20  ccess!..
78a0: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  #..        set c
78b0: 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a  ode 0..      }..
78c0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $78d0: 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a code.. }..... 78e0: 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 proc cleanup 78f0: 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 File { fileName 7900: 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b {collect true} { 7910: 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b force false} } { 7920: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 7930: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 7940: 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 to force all pe 7950: 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20 nding "garbage" 7960: 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f objects to be co 7970: 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 llected,.. 7980: 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e # includin 7990: 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65 g SQLite stateme 79a0: 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f nts and backup o 79b0: 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f bjects; this sho 79c0: 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 uld allow.. 79d0: 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64 # the und 79e0: 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 erlying database 79f0: 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 file to be dele 7a00: 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ted... #.. 7a10: 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 if {$collec
7a20: 74 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  t && \..
7a30: 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74    [catch {object
7a40: 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f   invoke GC GetTo
7a50: 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 7d 20  talMemory true}
7a60: 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
7a70: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 7a80: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 7a90: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 7aa0: 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 7ab0: 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 67 61 72 failed full gar 7ac0: 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c bage collection, 7ad0: 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 error: " \.. 7ae0: 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 \n\t$e
7af0: 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
7b00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
7b10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
7b20: 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 74  k if the file st
7b30: 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20  ill exists...
7b40: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
7b50: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 7b60: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 7b70: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 7b80: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 7b90: 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 deleting test f 7ba0: 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 iles if somebody 7bb0: 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61 6c sets the global 7bc0: 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 variable.. 7bd0: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 70 72 # to pr 7be0: 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 event it... 7bf0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 7c00: 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69 6e {$force || ![in
7c10: 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
7c20: 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20 74 68  leanupFile)]} th
7c30: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
7c40: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
7c50: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
7c60: 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20  delete the test
7c70: 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  file now...
7c80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7c90: 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 20    if {[set code
7ca0: 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c  [catch {file del
7cb0: 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65  ete $fileName} e 7cc0: 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a rror]]} then {.. 7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 7ce0: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 7cf0: 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 7d00: 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 iled to delete t 7d10: 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 he file, report 7d20: 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 why... 7d30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 7d40: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
7d50: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
7d60: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
7d70: 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
7d80: 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64  ING: failed to d
7d90: 65 6c 65 74 65 20 74 65 73 74 20 66 69 6c 65 20  elete test file
7da0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d  \"" $fileName \. 7db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 7dc0: 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 "\" during clea 7dd0: 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e nup, error: " \n 7de0: 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
7df0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
7e00: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
7e10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
7e20: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f       # NOTE: Sho
7e30: 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65  w that we skippe
7e40: 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66  d deleting the f
7e50: 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ile...
7e60: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
7e70: 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20   code 0....
7e80: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 7e90: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 7ea0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 7eb0: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 7ec0: 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 RNING: skipped d 7ed0: 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69 6c eleting test fil 7ee0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
7ef0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
7f00: 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61   "\" during clea
7f10: 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  nup\n"]..
7f20: 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
7f30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
7f40: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
7f50: 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74  he file does not
7f60: 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21   exist, success!
7f70: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
7f80: 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d       set code 0.
7f90: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
7fa0: 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a    return $code.. 7fb0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7fc0: 6f 63 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 oc reportSQLiteR 7fd0: 65 73 6f 75 72 63 65 73 20 7b 20 63 68 61 6e 6e esources { chann 7fe0: 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d el {quiet false} 7ff0: 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 {collect true} 8000: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 8010: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 8020: 20 61 6c 6c 20 6f 75 74 70 75 74 20 69 66 20 77 all output if w 8030: 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 69 6e e are running in 8040: 20 22 71 75 69 65 74 22 20 6d 6f 64 65 2e 0d 0a "quiet" mode... 8050: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 8060: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
8070: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
8080: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- 8090: 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 current memory 80a0: 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 in use by SQLite 80b0: 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a ... ".. }.. 80c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 80d0: 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b ch {object invok 80e0: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 80f0: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 8100: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 8110: 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 .SQLite.UnsafeNa 8120: 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 tiveMethods \.. 8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c sql 8140: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 ite3_memory_used 8150: 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 } memory] == 0} 8160: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 8170: 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
8180: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
8190: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 81a0: 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
81b0: 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  y " bytes\n"]..
81c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
81d0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
81e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
81f0: 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53  OTE: Maybe the S
8200: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62  QLite native lib
8210: 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61  rary is unavaila
8220: 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d  ble?..        #.
8230: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d  .        set mem
8240: 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20  ory unknown....
8250: 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 8260: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 8270: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
8280: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
8290: 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20   $memory \n].. 82a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 82b0: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 .... set re 82c0: 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 23 20 sult$memory; #
82d0: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d 65 6d  NOTE: Return mem
82e0: 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f 20 63 61  ory in-use to ca
82f0: 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 20 69  ller.....      i
8300: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 8310: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 8320: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
8330: 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20   maximum memory
8340: 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65  in use by SQLite
8350: 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a  ... "..      }..
8360: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
8370: 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ch {object invok
8380: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
8390: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
83a0: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
83b0: 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
83c0: 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20  tiveMethods \..
83d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
83e0: 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68  ite3_memory_high
83f0: 77 61 74 65 72 20 30 7d 20 6d 65 6d 6f 72 79 5d  water 0} memory]
8400: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
8410: 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 8420: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 8430: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
8440: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
8450: 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73   $memory " bytes 8460: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. 8470: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 8480: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8490: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 # NOTE: Mayb 84a0: 65 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 e the SQLite nat 84b0: 69 76 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 ive library is u 84c0: 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 navailable?.. 84d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 84e0: 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f set memory unkno 84f0: 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 wn.... if 8500: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
8510: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
8520: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 8530: 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
8540: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
8550: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
8560: 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74   if {$collect} t 8570: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 8580: 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 f {[catch {objec 8590: 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 t invoke GC GetT 85a0: 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 7d otalMemory true} 85b0: 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. 85c0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 85d0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
85e0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
85f0: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
8600: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 66 75 6c  NING: failed ful
8610: 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63  l garbage collec
8620: 74 69 6f 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c  tion, error: " \
8630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
8640: 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 8650: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 8660: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 8670: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
8680: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
8690: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  $channel "---- c 86a0: 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e urrent memory in 86b0: 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 2e use by the CLR. 86c0: 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d .. ".. }... 86d0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc 86e0: 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 h {object invoke 86f0: 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f GC GetTotalMemo 8700: 72 79 20 66 61 6c 73 65 7d 20 6d 65 6d 6f 72 79 ry false} memory 8710: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 8720: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 8730: 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d ing is integer - 8740: 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d strict$memory]}
8750: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
8760: 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 8770: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 8780: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
8790: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $87a0: 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e memory " bytes\n 87b0: 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d "].. }. 87c0: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else 87d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 87e0: 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d memory invalid. 87f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 8800: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
8810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
8820: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 8830: 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
8840: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
8850: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
8860: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
8870: 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79        set memory
8880: 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20   unknown....
8890: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 88a0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 88b0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
88c0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 88d0: 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 emory \n].. 88e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 88f0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 . return$r
8900: 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  esult..    }....
8910: 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c  .    proc runSQL
8920: 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20  iteTestPrologue
8930: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
8940: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
8950: 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75  p running our cu
8960: 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66  stom prologue if
8970: 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61   the main one ha
8980: 73 20 62 65 65 6e 20 73 6b 69 70 70 65 64 2e 0d  s been skipped..
8990: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
89a0: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
89b0: 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e  s ::no(prologue.
89c0: 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  eagle)]} then {.
89d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
89e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
89f0: 20 61 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61   all System.Data
8a00: 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20  .SQLite related
8a10: 66 69 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28 64  file handling (d
8a20: 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20  eleting,..
8a30: 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 69 6e    #       copyin
8a40: 67 2c 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20  g, and loading)
8a50: 69 66 20 77 65 20 61 72 65 20 73 6f 20 69 6e 73  if we are so ins
8a60: 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20  tructed...
8a70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
8a80: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
8a90: 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 73 29  :no(sqliteFiles)
8aa0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
8ab0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
8ac0: 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74    # NOTE: Skip t
8ad0: 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 65 20  rying to delete
8ae0: 61 6e 79 20 66 69 6c 65 73 20 69 66 20 77 65 20  any files if we
8af0: 61 72 65 20 73 6f 20 69 6e 73 74 72 75 63 74 65  are so instructe
8b00: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  d...          #.
8b10: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
8b20: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
8b30: 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 46 69  o(deleteSqliteFi
8b40: 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
8b50: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
8b60: 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 73 71 6c  leteAssembly sql
8b70: 69 74 65 33 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  ite3.dll..
8b80: 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73        removeCons
8b90: 74 72 61 69 6e 74 20 66 69 6c 65 5f 73 71 6c 69  traint file_sqli
8ba0: 74 65 33 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20  te3.dll....
8bb0: 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
8bc0: 41 73 73 65 6d 62 6c 79 20 53 51 4c 69 74 65 2e  Assembly SQLite.
8bd0: 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a 20 20 20  Interop.dll..
8be0: 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43           removeC
8bf0: 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 5f 53  onstraint file_S
8c00: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c  QLite.Interop.dl
8c10: 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l....
8c20: 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62   tryDeleteAssemb
8c30: 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ly System.Data.S
8c40: 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20  QLite.dll..
8c50: 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e         removeCon
8c60: 73 74 72 61 69 6e 74 20 66 69 6c 65 5f 53 79 73  straint file_Sys
8c70: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
8c80: 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  dll....
8c90: 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65     tryDeleteAsse
8ca0: 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
8cb0: 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
8cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
8cd0: 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 66  moveConstraint f
8ce0: 69 6c 65 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e  ile_System.Data.
8cf0: 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d  SQLite.Linq.dll.
8d00: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
8d10: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
8d20: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
8d30: 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f  kip trying to co
8d40: 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20  py any files if
8d50: 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75  we are so instru
8d60: 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  cted...
8d70: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
8d80: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
8d90: 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46  ::no(copySqliteF
8da0: 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
8db0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
8dc0: 6f 70 79 41 73 73 65 6d 62 6c 79 20 73 71 6c 69  opyAssembly sqli
8dd0: 74 65 33 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  te3.dll..
8de0: 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
8df0: 6d 62 6c 79 20 53 51 4c 69 74 65 2e 49 6e 74 65  mbly SQLite.Inte
8e00: 72 6f 70 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  rop.dll..
8e10: 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
8e20: 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
8e30: 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20  .SQLite.dll..
8e40: 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
8e50: 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
8e60: 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
8e70: 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  .dll..
8e80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  }....          #
8e90: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
8ea0: 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20  TE: Skip trying
8eb0: 74 6f 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65  to load any file
8ec0: 73 20 69 66 20 77 65 20 61 72 65 20 73 6f 20 69  s if we are so i
8ed0: 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20  nstructed...
8ee0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8ef0: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
8f00: 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71  ists ::no(loadSq
8f10: 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65  liteFiles)]} the
8f20: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
8f30: 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79   tryLoadAssembly
8f40: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
8f50: 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  ite.dll..
8f60: 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65       tryLoadAsse
8f70: 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
8f80: 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
8f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
8fa0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
8fb0: 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
8fc0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 8fd0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 8fe0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 8ff0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 9000: 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 9010: 5c 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 \"SQLite.Interop 9020: 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 .dll\"... " \.. 9030: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 9040: 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 le version [getB 9050: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 51 inaryFileName SQ 9060: 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c Lite.Interop.dll 9070: 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. 9080: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat 9090: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 90a0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
90b0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
90c0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
90d0: 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
90e0: 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65  rsion of \"Syste
90f0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
9100: 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20  l\"... " \..
9110: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
9120: 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61  version [getBina
9130: 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65  ryFileName Syste
9140: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
9150: 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  l]] \n]..
9160: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61   }....        ca
9170: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
9180: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 9190: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 91a0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 91b0: 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 "---- file v 91c0: 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 ersion of \"Syst 91d0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c em.Data.SQLite.L 91e0: 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c inq.dll\"... " \ 91f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 9200: 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 [file version [g 9210: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 9220: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 9230: 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 5c ite.Linq.dll]] \ 9240: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d n].. }... 9250: 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 73 73 . set ass 9260: 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63 74 20 emblies [object 9270: 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61 69 6e invoke AppDomain 9280: 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e 20 47 .CurrentDomain G 9290: 65 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d 0a 0d etAssemblies]... 92a0: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 . object 92b0: 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c 79 foreach assembly 92c0: 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d 0a$assemblies {..
92d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
92e0: 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b 53 79  tring match \{Sy
92f0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
9300: 2a 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20 74 68  * $assembly]} th 9310: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 9320: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
9330: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
9340: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
9350: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75         "---- fou
9360: 6e 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20 24  nd assembly: " $9370: 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 assembly \n].. 9380: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 9390: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 93a0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 93b0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
93c0: 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
93d0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
93e0: 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73  define constants
93f0: 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44 61   for \"System.Da
9400: 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20 22  ta.SQLite\"... "
9410: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
9420: 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74   {[catch {object
9430: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
9440: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
9450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
9460: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
9470: 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65  e.SQLite3 Define
9480: 43 6f 6e 73 74 61 6e 74 73 7d 20 5c 0d 0a 20 20  Constants} \..
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
94a0: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d  defineConstants]
94b0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
94c0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
94d0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 94e0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f [appendArgs [fo 94f0: 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 rmatList [lsort 9500: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 9510: 20 20 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61$defineConsta
9520: 6e 74 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  nts]] \n]..
9530: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
9540: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
9550: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 9560: 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 unknown\n.. 9570: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 9580: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 9590: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 95a0: 20 4e 6f 77 2c 20 77 65 20 6e 65 65 64 20 74 6f Now, we need to 95b0: 20 6b 6e 6f 77 20 69 66 20 74 68 65 20 53 51 4c know if the SQL 95c0: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 95d0: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 is available.. 95e0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28 # ( 95f0: 69 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 65 i.e. because the 9600: 20 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79 20 53 79 managed-only Sy 9610: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 9620: 20 61 73 73 65 6d 62 6c 79 20 63 61 6e 0d 0a 20 assembly can.. 9630: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c # l 9640: 6f 61 64 20 77 69 74 68 6f 75 74 20 69 74 3b 20 oad without it; 9650: 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 6e however, it cann 9660: 6f 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 ot do anything u 9670: 73 65 66 75 6c 20 77 69 74 68 6f 75 74 0d 0a 20 seful without.. 9680: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 # i 9690: 74 29 2e 20 20 49 66 20 77 65 20 61 72 65 20 75 t). If we are u 96a0: 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d sing the mixed-m 96b0: 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 61 6e 64 ode assembly and 96c0: 20 77 65 20 61 6c 72 65 61 64 79 0d 0a 20 20 20 we already.. 96d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 75 # fou 96e0: 6e 64 20 69 74 20 28 61 62 6f 76 65 29 2c 20 74 nd it (above), t 96f0: 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 his should alway 9700: 73 20 73 75 63 63 65 65 64 2e 0d 0a 20 20 20 20 s succeed... 9710: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 #.. c 9720: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 20 24 3a heckForSQLite$:
9730: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
9740: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
9750: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
9760: 6b 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33  k if the sqlite3
9770: 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
9780: 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73  tory function is
9790: 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20   available...
97a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
97b0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 97c0: 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 97d0: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check 97e0: 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e ing for function 97f0: 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s 9800: 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 et_directory... 9810: 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ".... if 9820: 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 {[catch {object 9830: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 9840: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 9850: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 9860: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U 9870: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho 9880: 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ds \.. 9890: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 sqlite3_wi 98a0: 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 98b0: 79 20 30 20 6e 75 6c 6c 7d 5d 20 3d 3d 20 30 7d y 0 null}] == 0} 98c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 98d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 98e0: 23 20 4e 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20 # NOTE: Calling 98f0: 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 9900: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 9910: 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f function does no 9920: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 t.. # 9930: 20 20 20 20 20 63 61 75 73 65 20 61 6e 20 65 78 cause an ex 9940: 63 65 70 74 69 6f 6e 3b 20 74 68 65 72 65 66 6f ception; therefo 9950: 72 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 61 re, it must be a 9960: 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 0d 0a vailable (i.e... 9970: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 9980: 20 20 65 76 65 6e 20 74 68 6f 75 67 68 20 69 74 even though it 9990: 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 61 should return a 99a0: 20 66 61 69 6c 75 72 65 20 72 65 74 75 72 6e 20 failure return 99b0: 63 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a 20 20 code in this.. 99c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 99d0: 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 case)... 99e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 #.. a 99f0: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c ddConstraint sql 9a00: 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d 9a10: 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 irectory.... 9a20: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
9a30: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 79 65 73 5c  est_channel yes\
9a40: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  n..        } els
9a50: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  e {..          t
9a60: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 9a70: 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 nnel no\n.. 9a80: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 9a90: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 9aa0: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 E: Attempt to de 9ab0: 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 63 termine if the c 9ac0: 75 73 74 6f 6d 20 65 78 74 65 6e 73 69 6f 6e 20 ustom extension 9ad0: 66 75 6e 63 74 69 6f 6e 73 20 77 65 72 65 0d 0a functions were.. 9ae0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 9af0: 63 6f 6d 70 69 6c 65 64 20 69 6e 74 6f 20 74 68 compiled into th 9b00: 65 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 e SQLite interop 9b10: 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 assembly... 9b20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 #.. c 9b30: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 heckForSQLiteDef 9b40: 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 ineConstant$::t
9b50: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
9b60: 20 20 20 20 20 20 20 20 20 20 20 43 48 45 43 4b             CHECK
9b70: 5f 53 54 41 54 45 0d 0a 0d 0a 20 20 20 20 20 20  _STATE....
9b80: 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
9b90: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24  DefineConstant $9ba0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 9bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 53 .. US 9bc0: 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 0d 0a 0d E_INTEROP_DLL... 9bd0: 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f . checkFo 9be0: 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e rSQLiteDefineCon 9bf0: 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 stant$::test_ch
9c00: 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
9c10: 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 54       INTEROP_EXT
9c20: 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53  ENSION_FUNCTIONS
9c30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63  ....        chec
9c40: 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65  kForSQLiteDefine
9c50: 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 74  Constant $::test 9c60: 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 9c70: 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f INTEROP_ 9c80: 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 0d 0a TEST_EXTENSION.. 9c90: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 9ca0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 # NOTE: Rep 9cb0: 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 ort the resource 9cc0: 20 75 73 61 67 65 20 70 72 69 6f 72 20 74 6f 20 usage prior to 9cd0: 72 75 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73 74 running any test 9ce0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 9cf0: 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c reportSQL 9d00: 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a iteResources$::
9d10: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a  test_channel....
9d20: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
9d30: 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
9d40: 74 68 65 20 61 63 74 69 76 65 20 74 65 73 74 20  the active test
9d50: 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20  constraints...
9d60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9d70: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 9d80: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 9d90: 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 gs "---- constra 9da0: 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 ints: " \.. 9db0: 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69 [formatLi 9dc0: 73 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f st [lsort [getCo 9dd0: 6e 73 74 72 61 69 6e 74 73 5d 5d 5d 20 5c 6e 5d nstraints]]] \n] 9de0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 9df0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 9e00: 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 how when our tes 9e10: 74 73 20 61 63 74 75 61 6c 6c 79 20 62 65 67 61 ts actually bega 9e20: 6e 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 n (now)... 9e30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 9e40: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
9e50: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
9e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
9e70: 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  --- System.Data.
9e80: 53 51 4c 69 74 65 20 74 65 73 74 73 20 62 65 67  SQLite tests beg
9e90: 61 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20  an at " \..
9ea0: 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f         [clock fo
9eb0: 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f  rmat [clock seco
9ec0: 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  nds]] \n]..
9ed0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
9ee0: 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65    proc runSQLite
9ef0: 54 65 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d 20  TestEpilogue {}
9f00: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
9f10: 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72    # NOTE: Skip r
9f20: 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f  unning our custo
9f30: 6d 20 65 70 69 6c 6f 67 75 65 20 69 66 20 74 68  m epilogue if th
9f40: 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62  e main one has b
9f50: 65 65 6e 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20  een skipped...
9f60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
9f70: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
9f80: 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65 61 67  :no(epilogue.eag
9f90: 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  le)]} then {..
9fa0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9fb0: 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68   # NOTE: Show wh
9fc0: 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74  en our tests act
9fd0: 75 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e 6f 77  ually ended (now
9fe0: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  )...        #..
9ff0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: a000: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap a010: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. a020: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 "---- Sy a030: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite a040: 20 74 65 73 74 73 20 65 6e 64 65 64 20 61 74 20 tests ended at a050: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. a060: 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b [clock format [ a070: 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 clock seconds]] a080: 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 \n].... # a090: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE a0a0: 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 68 : Also report th a0b0: 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 e resource usage a0c0: 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 after running t a0d0: 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 he tests... a0e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re a0f0: 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 portSQLiteResour a100: 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ces$::test_chan
a110: 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  nel..      }..
a120: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23    }.....    ####
a130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a160: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a170: 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23  #######..    ###
a180: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a190: 23 23 23 23 23 23 23 23 23 23 20 45 4e 44 20 45  ########## END E
a1a0: 61 67 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23  agle ONLY ######
a1b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a1c0: 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23  ########..    ##
a1d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a1e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a1f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a200: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a210: 23 23 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a  #########..  }..
a220: 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
a230: 20 53 61 76 65 20 74 68 65 20 6e 61 6d 65 20 6f   Save the name o
a240: 66 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  f the directory
a250: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20  containing this
a260: 66 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66  file...  #..  if
a270: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
a280: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
a290: 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ry]} then {..
a2a0: 20 73 65 74 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69   set ::common_di
a2b0: 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69  rectory [file di
a2c0: 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69  rname [info scri
a2d0: 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23  pt]]..  }....  #
a2e0: 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 50 72 6f 76  ..  # NOTE: Prov
a2f0: 69 64 65 20 74 68 65 20 53 79 73 74 65 6d 2e 44  ide the System.D
a300: 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 20  ata.SQLite test
a310: 70 61 63 6b 61 67 65 20 74 6f 20 74 68 65 20 69  package to the i
a320: 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 23  nterpreter...  #
a330: 0d 0a 20 20 70 61 63 6b 61 67 65 20 70 72 6f 76  ..  package prov
a340: 69 64 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ide System.Data.
a350: 53 51 4c 69 74 65 2e 54 65 73 74 20 31 2e 30 0d  SQLite.Test 1.0.
a360: 0a 7d 0d 0a                                      .}..