System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 91d18f50d047cc4dae20304ff75f9b5fd71ed03d:

• File Tests/common.eagle — part of check-in [c16bb56cfd] at 2013-06-21 05:39:00 on branch virtualTables — Move the native memory allocation wrapper methods into the new SQLiteMemory class. (user: mistachkin size: 78182)

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b  etBuildYear {} {
0340: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0350: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
0360: 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74 69  the "year" setti
0370: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
0380: 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75 73  ridden by the us
0390: 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  er (e.g...
03a0: 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63  #       on the c
03b0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
03c0: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
03d0: 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 68 20  l exactly which
03e0: 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  set of..      #
03f0: 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 20 77        binaries w
0400: 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74  e are testing, t
0410: 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 75 73  hose produced us
0420: 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c 20 53  ing the Visual S
0430: 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20  tudio..      #
0440: 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c       2005, 2008,
0450: 20 32 30 31 30 2c 20 6f 72 20 32 30 31 32 20 62   2010, or 2012 b
0460: 75 69 6c 64 20 73 79 73 74 65 6d 73 2e 20 20 54  uild systems.  T
0470: 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20  o override this
0480: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20  value..      #
0490: 20 20 20 20 20 76 69 61 20 74 68 65 20 63 6f 6d       via the com
04a0: 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72  mand line, enter
04b0: 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c   a command simil
04c0: 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  ar to one of the
04d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
04e0: 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f  following (all o
04f0: 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20  n one line):..
0500: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20      #..      #
0510: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e       EagleShell.
0520: 65 78 65 20 2d 70 72 65 49 6e 69 74 69 61 6c 69  exe -preInitiali
0530: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61  ze "set test_yea
0540: 72 20 32 30 30 35 22 0d 0a 20 20 20 20 20 20 23  r 2005"..      #
0550: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e           -file .
0560: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67  \path\to\all.eag
0570: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  le..      #..
0580: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0590: 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65 49 6e  Shell.exe -preIn
05a0: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
05b0: 73 74 5f 79 65 61 72 20 32 30 30 38 22 0d 0a 20  st_year 2008"..
05c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
05d0: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
05e0: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
05f0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0600: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
0610: 2d 70 72 65 49 6e 69 74 69 61 6c 69 7a 65 20 22  -preInitialize "
0620: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
0630: 31 30 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  10"..      #
0640: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
0650: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
0660: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0670: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0680: 6c 2e 65 78 65 20 2d 70 72 65 49 6e 69 74 69 61  l.exe -preInitia
0690: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
06a0: 65 61 72 20 32 30 31 32 22 0d 0a 20 20 20 20 20  ear 2012"..
06b0: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
06c0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
06d0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
06e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
06f0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65  leShell.exe -pre
0700: 49 6e 69 74 69 61 6c 69 7a 65 20 22 75 6e 73 65  Initialize "unse
0710: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65  t -nocomplain te
0720: 73 74 5f 79 65 61 72 22 0d 0a 20 20 20 20 20 20  st_year"..
0730: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20  #         -file
0740: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
0750: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  gle..      #..
0760: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
0770: 69 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72  ists ::test_year
0780: 5d 20 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e  ] && [string len
0790: 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 72  gth $::test_year 07a0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 07b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 07c0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 07d0: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 07e0: 20 79 65 61 72 2e 20 20 49 66 20 74 68 69 73 20 year. If this 07f0: 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20 variable is not 0800: 73 65 74 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 set, the.. 0810: 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c # defaul 0820: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 t value will be 0830: 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72 based on whether 0840: 20 6f 72 20 6e 6f 74 20 45 61 67 6c 65 20 68 61 or not Eagle ha 0850: 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 20 20 s been.. 0860: 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 64 # compiled 0870: 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c 52 against the CLR 0880: 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 76 34 2e v2.0 or CLR v4. 0890: 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 0... #.. 08a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
08b0: 3a 74 65 73 74 5f 79 65 61 72 0d 0a 20 20 20 20  :test_year..
08c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
08d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
08e0: 20 4e 4f 54 45 3a 20 49 66 20 45 61 67 6c 65 20   NOTE: If Eagle
08f0: 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c 65  has been compile
0900: 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c  d against the CL
0910: 52 20 76 34 2e 30 2c 20 75 73 65 20 22 32 30 31  R v4.0, use "201
0920: 30 22 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23  0" by..        #
0930: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 28         default (
0940: 77 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 30  we could use "20
0950: 31 32 22 20 69 6e 20 74 68 61 74 20 63 61 73 65  12" in that case
0960: 20 61 73 20 77 65 6c 6c 29 20 61 73 20 74 68 65   as well) as the
0970: 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23   test..        #
0980: 20 20 20 20 20 20 20 79 65 61 72 3b 20 6f 74 68         year; oth
0990: 65 72 77 69 73 65 2c 20 75 73 65 20 22 32 30 30  erwise, use "200
09a0: 38 22 20 62 79 20 64 65 66 61 75 6c 74 20 28 77  8" by default (w
09b0: 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 30 30  e could use "200
09c0: 35 22 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 23  5" in..        #
09d0: 20 20 20 20 20 20 20 74 68 61 74 20 63 61 73 65         that case
09e0: 20 61 73 20 77 65 6c 6c 29 2e 20 20 49 66 20 61   as well).  If a
09f0: 6e 6f 74 68 65 72 20 6d 61 6a 6f 72 20 5b 69 6e  nother major [in
0a00: 63 6f 6d 70 61 74 69 62 6c 65 5d 20 76 65 72 73  compatible] vers
0a10: 69 6f 6e 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  ion of..
0a20: 23 20 20 20 20 20 20 20 74 68 65 20 43 4c 52 20  #       the CLR
0a30: 69 73 20 72 65 6c 65 61 73 65 64 2c 20 74 68 69  is released, thi
0a40: 73 20 63 68 65 63 6b 20 77 69 6c 6c 20 68 61 76  s check will hav
0a50: 65 20 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e  e to be changed.
0a60: 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 23    The..        #
0a70: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 74         default t
0a80: 65 73 74 20 79 65 61 72 20 74 6f 20 75 73 65 20  est year to use
0a90: 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72  for a particular
0aa0: 20 43 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79   CLR version may
0ab0: 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20   be..        #
0ac0: 20 20 20 20 20 6f 76 65 72 72 69 64 64 65 6e 20       overridden
0ad0: 62 79 20 73 65 74 74 69 6e 67 20 74 68 65 20 67  by setting the g
0ae0: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 22  lobal variable "
0af0: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 24  test_year_clr_v$0b00: 58 22 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 X",.. # 0b10: 20 20 20 20 20 77 68 65 72 65 20 22 24 58 22 20 where "$X"
0b20: 6d 61 79 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20  may [currently]
0b30: 62 65 20 65 69 74 68 65 72 20 22 32 22 20 6f 72  be either "2" or
0b40: 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23   "4"...        #
0b50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68  ..        if {[h
0b60: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d  aveConstraint im
0b70: 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74  ageRuntime40]} t
0b80: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
0b90: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
0ba0: 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c  s ::test_year_cl
0bb0: 72 5f 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20  r_v4] && \..
0bc0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
0bd0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74  g length $::test 0be0: 5f 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 _year_clr_v4] > 0bf0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 0c00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 0c10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 0c20: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 0c30: 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 68 test year for th 0c40: 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 e CLR v4.0... 0c50: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 0c60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
0c70: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f  ::test_year_clr_
0c80: 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  v4..          }
0c90: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0ca0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
0cb0: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
0cc0: 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74 20  he default test
0cd0: 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52  year for the CLR
0ce0: 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20   v4.0...
0cf0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
0d00: 20 20 20 72 65 74 75 72 6e 20 32 30 31 30 3b 20     return 2010;
0d10: 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61  # TODO: Good "fa
0d20: 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f  llback" default?
0d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
0d40: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
0d50: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
0d60: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
0d70: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20  st_year_clr_v2]
0d80: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
0d90: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
0da0: 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f  th $::test_year_ 0db0: 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 clr_v2] > 0} the 0dc0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 0dd0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 0de0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 0df0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 79 specified test y 0e00: 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 ear for the CLR 0e10: 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 v2.0... 0e20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 0e30: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 return$::test
0e40: 5f 79 65 61 72 5f 63 6c 72 5f 76 32 0d 0a 20 20  _year_clr_v2..
0e50: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
0e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
0e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
0e80: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66  OTE: Use the def
0e90: 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20 66  ault test year f
0ea0: 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e  or the CLR v2.0.
0eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
0ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
0ed0: 75 72 6e 20 32 30 30 38 3b 20 23 20 54 4f 44 4f  urn 2008; # TODO
0ee0: 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b  : Good "fallback
0ef0: 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20  " default?..
0f00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
0f10: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
0f20: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
0f30: 67 65 74 42 75 69 6c 64 59 65 61 72 73 20 7b 7d  getBuildYears {}
0f40: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
0f50: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
0f60: 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65  f the list of te
0f70: 73 74 20 79 65 61 72 73 20 68 61 73 20 62 65 65  st years has bee
0f80: 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20  n overridden by
0f90: 74 68 65 20 75 73 65 72 0d 0a 20 20 20 20 20 20  the user..
0fa0: 23 20 20 20 20 20 20 20 28 65 2e 67 2e 20 6f 6e  #       (e.g. on
0fb0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
0fc0: 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  e)...      #..
0fd0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
0fe0: 69 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72  ists ::test_year
0ff0: 73 5d 20 26 26 20 5b 6c 6c 65 6e 67 74 68 20 24  s] && [llength $1000: 3a 3a 74 65 73 74 5f 79 65 61 72 73 5d 20 3e 20 ::test_years] > 1010: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1020: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1030: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 1040: 65 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 20 ecified list of 1050: 74 65 73 74 20 79 65 61 72 73 2e 0d 0a 20 20 20 test years... 1060: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1070: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 return$::test_y
1080: 65 61 72 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ears..      } el
1090: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
10a0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
10b0: 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   Use the default
10c0: 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79 65   list of test ye
10d0: 61 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ars...        #.
10e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
10f0: 5b 6c 69 73 74 20 32 30 30 35 20 32 30 30 38 20  [list 2005 2008
1100: 32 30 31 30 20 32 30 31 32 5d 0d 0a 20 20 20 20  2010 2012]..
1110: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
1120: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
1130: 50 6c 61 74 66 6f 72 6d 20 7b 20 6e 61 74 69 76  Platform { nativ
1140: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20  e } {..      if
1150: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
1160: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 26  test_platform] &
1170: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
1180: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 1190: 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 :test_platform] 11a0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 11b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 11c0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 11d0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 70 specified test p 11e0: 6c 61 74 66 6f 72 6d 2e 20 20 49 66 20 74 68 69 latform. If thi 11f0: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f s variable is no 1200: 74 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 t set,.. 1210: 23 20 20 20 20 20 20 20 74 68 65 20 64 65 66 61 # the defa 1220: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 ult value will b 1230: 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6d e based on the m 1240: 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 achine architect 1250: 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ure... #. 1260: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1270: 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f [expr {$native ?
1280: 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72   $::test_platfor 1290: 6d 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 m : ""}].. 12a0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 12b0: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d 61 exists ::test_ma 12c0: 63 68 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20 20 chine] && \.. 12d0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 12e0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d 61 ength$::test_ma
12f0: 63 68 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 6e  chine] > 0} then
1300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
1310: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46         # NOTE: F
1320: 6f 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73  or native builds
1330: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61  , return the pla
1340: 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65  tform name corre
1350: 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20  sponding to..
1360: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
1370: 20 74 65 73 74 20 6d 61 63 68 69 6e 65 20 61 72   test machine ar
1380: 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65  chitecture; othe
1390: 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e  rwise, return an
13a0: 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20   empty..
13b0: 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d  #       string..
13c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
13d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72      return [expr
13e0: 20 7b 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63   {$native ? [mac 13f0: 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 hineToPlatform$
1400: 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20  ::test_machine]
1410: 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20  : ""}]..      }
1420: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
1430: 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66  ists ::tcl_platf
1440: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74  orm(machine)]} t
1450: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1460: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1470: 3a 20 46 6f 72 20 6e 61 74 69 76 65 20 62 75 69  : For native bui
1480: 6c 64 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20  lds, return the
1490: 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f  platform name co
14a0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a  rresponding to..
14b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
14c0: 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 68  the machine arch
14d0: 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77  itecture; otherw
14e0: 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65  ise, return an e
14f0: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20  mpty string...
1500: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1510: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24   return [expr {$1520: 6e 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 native ? \.. 1530: 20 20 20 20 20 20 20 20 5b 6d 61 63 68 69 6e 65 [machine 1540: 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 ToPlatform$::tc
1550: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69  l_platform(machi
1560: 6e 65 29 5d 20 3a 20 22 22 7d 5d 0d 0a 20 20 20  ne)] : ""}]..
1570: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1580: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1590: 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61 63 68 69  # NOTE: No machi
15a0: 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 20  ne architecture
15b0: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65  is available, re
15c0: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74  turn an empty st
15d0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23  ring...        #
15e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
15f0: 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20   ""..      }..
1600: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1610: 20 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75   getBuildConfigu
1620: 72 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20  ration {} {..
1630: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1640: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22  TE: See if the "
1650: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73  configuration" s
1660: 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20  etting has been
1670: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68  overridden by th
1680: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
1690: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74   user (e.g. on t
16a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29  he command line)
16b0: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f  .  This helps co
16c0: 6e 74 72 6f 6c 20 65 78 61 63 74 6c 79 0d 0a 20  ntrol exactly..
16d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69       #       whi
16e0: 63 68 20 73 65 74 20 6f 66 20 62 69 6e 61 72 69  ch set of binari
16f0: 65 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e  es we are testin
1700: 67 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75  g (i.e. those bu
1710: 69 6c 74 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ilt in the..
1720: 20 20 23 20 20 20 20 20 20 20 22 44 65 62 75 67    #       "Debug
1730: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 62  " or "Release" b
1740: 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69  uild configurati
1750: 6f 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69  ons).  To overri
1760: 64 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23  de this..      #
1770: 20 20 20 20 20 20 20 76 61 6c 75 65 20 76 69 61         value via
1780: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
1790: 65 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61  e, enter a comma
17a0: 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e  nd similar to on
17b0: 65 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20  e of..      #
17c0: 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e      the followin
17d0: 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69  g (all on one li
17e0: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ne):..      #..
17f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
1800: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65  leShell.exe -pre
1810: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
1820: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
1830: 6f 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20  on Debug"..
1840: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
1850: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
1860: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
1870: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
1880: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65  leShell.exe -pre
1890: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
18a0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
18b0: 6f 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20  on Release"..
18c0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69     #         -fi
18d0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c  le .\path\to\all
18e0: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d  .eagle..      #.
18f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45  .      #       E
1900: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66  agleShell.exe -f
1910: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c  ile .\path\to\al
1920: 6c 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74  l.eagle -preTest
1930: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1940: 20 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70    "unset -nocomp
1950: 6c 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67  lain test_config
1960: 75 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20  uration"..
1970: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
1980: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
1990: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20  _configuration]
19a0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
19b0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $19c0: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 ::test_configura 19d0: 74 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tion] > 0} then 19e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 19f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 1a00: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 1a10: 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 test configurati 1a20: 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 on. The default 1a30: 20 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20 value used.. 1a40: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 # for 1a50: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 this variable i 1a60: 73 20 74 79 70 69 63 61 6c 6c 79 20 22 52 65 6c s typically "Rel 1a70: 65 61 73 65 22 2c 20 61 73 20 73 65 74 20 62 79 ease", as set by 1a80: 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20 the test.. 1a90: 20 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65 # suite 1aa0: 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 itself... 1ab0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 1ac0: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 urn$::test_conf
1ad0: 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20  iguration..
1ae0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1af0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
1b00: 4e 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20  NOTE: Normally,
1b10: 77 65 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 69  we will never hi
1b20: 74 20 74 68 69 73 20 63 61 73 65 20 62 65 63 61  t this case beca
1b30: 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
1b40: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
1b50: 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 66 69        test confi
1b60: 67 75 72 61 74 69 6f 6e 20 76 61 72 69 61 62 6c  guration variabl
1b70: 65 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 20  e is always set
1b80: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74  by the test suit
1b90: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
1ba0: 20 20 20 69 74 73 65 6c 66 3b 20 68 6f 77 65 76     itself; howev
1bb0: 65 72 2c 20 69 74 20 63 61 6e 20 62 65 20 6f 76  er, it can be ov
1bc0: 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 74  erridden using t
1bd0: 68 65 20 75 6e 73 65 74 20 63 6f 6d 6d 61 6e 64  he unset command
1be0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1bf0: 20 20 66 72 6f 6d 20 74 68 65 20 2d 70 72 65 54    from the -preT
1c00: 65 73 74 20 6f 70 74 69 6f 6e 20 74 6f 20 74 68  est option to th
1c10: 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
1c20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1c30: 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 61 67 6c    return $::eagl 1c40: 65 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6e 66 69 e_platform(confi 1c50: 67 75 72 61 74 69 6f 6e 29 0d 0a 20 20 20 20 20 guration).. 1c60: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 1c70: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 proc getBuildC 1c80: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 7b 7d onfigurations {} 1c90: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 1ca0: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 # NOTE: See i 1cb0: 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65 f the list of te 1cc0: 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st configuration 1cd0: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 s has been overr 1ce0: 69 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 idden by.. 1cf0: 23 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72 # the user 1d00: 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f (e.g. on the co 1d10: 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 mmand line)... 1d20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 1d30: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 1d40: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 1d50: 6f 6e 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ons] && \.. 1d60: 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a [llength$:
1d70: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74  :test_configurat
1d80: 69 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ions] > 0} then
1d90: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1da0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1db0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1dc0: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e  list of test con
1dd0: 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20  figurations...
1de0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1df0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f   return $::test_ 1e00: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0d 0a configurations.. 1e10: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1e20: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1e30: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 # NOTE: Use t 1e40: 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 he default list 1e50: 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 of test configur 1e60: 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 ations... 1e70: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 1e80: 72 6e 20 5b 6c 69 73 74 20 44 65 62 75 67 20 52 rn [list Debug R 1e90: 65 6c 65 61 73 65 5d 0d 0a 20 20 20 20 20 20 7d elease].. } 1ea0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1eb0: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 42 61 73 proc getBuildBas 1ec0: 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d eDirectory {} {. 1ed0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1ee0: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f # NOTE: Figure o 1ef0: 75 74 20 74 68 65 20 62 61 73 65 20 64 69 72 65 ut the base dire 1f00: 63 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20 ctory where all 1f10: 74 68 65 20 62 75 69 6c 64 73 20 73 68 6f 75 6c the builds shoul 1f20: 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 d be.. # 1f30: 20 20 20 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 located. Th 1f40: 69 73 20 77 69 6c 6c 20 62 65 20 74 68 65 20 64 is will be the d 1f50: 69 72 65 63 74 6f 72 79 20 74 68 61 74 20 63 6f irectory that co 1f60: 6e 74 61 69 6e 73 20 74 68 65 20 61 63 74 75 61 ntains the actua 1f70: 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 l.. # 1f80: 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 build output di 1f90: 72 65 63 74 6f 72 79 20 28 65 2e 67 2e 20 70 61 rectory (e.g. pa 1fa0: 72 65 6e 74 20 6f 66 20 22 62 69 6e 22 29 2e 0d rent of "bin").. 1fb0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1fc0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 1fd0: 20 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 ::build_base_di 1fe0: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 1ff0: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 2000: 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 length$::build
2010: 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d  _base_directory]
2020: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
2030: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2040: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
2050: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69  ation of the bui
2060: 6c 64 20 62 61 73 65 20 64 69 72 65 63 74 6f 72  ld base director
2070: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
2080: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
2090: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
20a0: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74  e, use it verbat
20b0: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
20c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $20d0: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 ::build_base_dir 20e0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } 20f0: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 elseif {[info ex 2100: 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 ists ::common_di 2110: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 2120: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 2130: 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f length$::commo
2140: 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30  n_directory] > 0
2150: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2160: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2170: 4f 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c 6c 62  OTE: Next, fallb
2180: 61 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e  ack to the paren
2190: 74 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74  t directory of t
21a0: 68 65 20 6f 6e 65 20 63 6f 6e 74 61 69 6e 69 6e  he one containin
21b0: 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  g..        #
21c0: 20 20 20 74 68 69 73 20 66 69 6c 65 20 28 69 2e     this file (i.
21d0: 65 2e 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65  e. "common.eagle
21e0: 22 29 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65  "), if available
21f0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2200: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69        return [fi
2210: 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 63 6f  le dirname $::co 2220: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 0d mmon_directory]. 2230: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 2240: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 2250: 70 61 74 68 5d 20 26 26 20 5c 0d 0a 20 20 20 20 path] && \.. 2260: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 2270: 6e 67 74 68 20 24 3a 3a 70 61 74 68 5d 20 3e 20 ngth$::path] >
2280: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
2290: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
22a0: 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66  NOTE: Finally, f
22b0: 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 70  allback to the p
22c0: 61 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20  arent directory
22d0: 6f 66 20 74 68 65 20 45 61 67 6c 65 54 65 73 74  of the EagleTest
22e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
22f0: 20 20 70 61 74 68 2e 20 20 54 68 65 20 45 61 67    path.  The Eag
2300: 6c 65 54 65 73 74 20 70 61 63 6b 61 67 65 20 67  leTest package g
2310: 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 74  uarantees that t
2320: 68 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20  his variable..
2330: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69        #       wi
2340: 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 74 68 65  ll be set to the
2350: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
2360: 69 6e 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  ining the first
2370: 66 69 6c 65 20 74 6f 0d 0a 20 20 20 20 20 20 20  file to..
2380: 20 23 20 20 20 20 20 20 20 65 78 65 63 75 74 65   #       execute
2390: 20 74 68 65 20 5b 72 75 6e 54 65 73 74 50 72 6f   the [runTestPro
23a0: 6c 6f 67 75 65 5d 20 73 63 72 69 70 74 20 6c 69  logue] script li
23b0: 62 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 2e  brary procedure.
23c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
23d0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c       return [fil
23e0: 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74  e dirname $::pat 23f0: 68 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 h].. } else 2400: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 2410: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e # NOTE: N 2420: 6f 20 70 61 74 68 20 69 73 20 61 76 61 69 6c 61 o path is availa 2430: 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 ble, return an e 2440: 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 20 54 68 mpty string. Th 2450: 69 73 20 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 is point.. 2460: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 2470: 20 6e 6f 74 20 62 65 20 72 65 61 63 68 65 64 2e not be reached. 2480: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2490: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 24a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 24b0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6a 6f 69 6e ... proc join 24c0: 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b BuildDirectory { 24d0: 20 6e 61 74 69 76 65 20 70 61 74 68 20 79 65 61 native path yea 24e0: 72 20 70 6c 61 74 66 6f 72 6d 20 63 6f 6e 66 69 r platform confi 24f0: 67 75 72 61 74 69 6f 6e 20 7d 20 7b 0d 0a 20 20 guration } {.. 2500: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 2510: 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 OTE: Figure out 2520: 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20 and then return 2530: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 the fully qualif 2540: 69 65 64 20 70 61 74 68 20 74 6f 20 74 68 65 20 ied path to the 2550: 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 23 20 20 build.. # 2560: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 62 directory b 2570: 61 73 65 64 20 6f 6e 20 61 6c 6c 20 74 68 65 20 ased on all the 2580: 61 72 67 75 6d 65 6e 74 73 20 70 72 6f 76 69 64 arguments provid 2590: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 25a0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 25b0: 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 if {$native} t
25c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
25d0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e  eturn [file join
25e0: 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72   $path bin$year
25f0: 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66   $platform$conf
2600: 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20  iguration]..
2610: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
2620: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65      return [file
2630: 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20   join $path bin 2640: 24 79 65 61 72 20 24 63 6f 6e 66 69 67 75 72 61$year $configura 2650: 74 69 6f 6e 20 62 69 6e 5d 0d 0a 20 20 20 20 20 tion bin].. 2660: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 2670: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 44 proc getBuildD 2680: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. 2690: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 26a0: 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 NOTE: See if the 26b0: 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d "native" runtim 26c0: 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 65 e option has bee 26d0: 6e 20 73 65 74 2e 20 20 49 66 20 73 6f 2c 20 75 n set. If so, u 26e0: 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 se the.. # 26f0: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 directory 2700: 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f for the mixed-mo 2710: 64 65 20 61 73 73 65 6d 62 6c 79 20 28 61 2e 6b de assembly (a.k 2720: 2e 61 2e 20 74 68 65 20 6e 61 74 69 76 65 20 69 .a. the native i 2730: 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 23 20 nterop.. # 2740: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 29 2e assembly). 2750: 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 To enable this 2760: 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 option via the 2770: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e command line, en 2780: 74 65 72 20 61 0d 0a 20 20 20 20 20 20 23 20 20 ter a.. # 2790: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 73 69 6d command sim 27a0: 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20 74 ilar to one of t 27b0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c he following (al 27c0: 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d l on one line):. 27d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 27e0: 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 # EagleShe 27f0: 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c 69 ll.exe -initiali 2800: 7a 65 20 2d 72 75 6e 74 69 6d 65 4f 70 74 69 6f ze -runtimeOptio 2810: 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 n native.. 2820: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 # -file 2830: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 .\path\to\all.ea 2840: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 gle.. #.. 2850: 20 20 20 20 23 20 20 20 20 20 20 20 54 6f 20 65 # To e 2860: 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f nable this optio 2870: 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e n via the comman 2880: 64 20 6c 69 6e 65 20 70 72 69 6f 72 20 74 6f 20 d line prior to 2890: 74 68 65 20 22 62 65 74 61 20 31 36 22 0d 0a 20 the "beta 16".. 28a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 6c # rel 28b0: 65 61 73 65 20 6f 66 20 45 61 67 6c 65 2c 20 74 ease of Eagle, t 28c0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d he following com 28d0: 6d 61 6e 64 20 6d 75 73 74 20 62 65 20 75 73 65 mand must be use 28e0: 64 20 69 6e 73 74 65 61 64 0d 0a 20 20 20 20 20 d instead.. 28f0: 20 23 20 20 20 20 20 20 20 28 61 6c 73 6f 20 61 # (also a 2900: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a ll on one line): 2910: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 2920: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 # EagleSh 2930: 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c ell.exe -initial 2940: 69 7a 65 20 2d 70 6f 73 74 49 6e 69 74 69 61 6c ize -postInitial 2950: 69 7a 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ize.. # 2960: 20 20 20 20 20 22 6f 62 6a 65 63 74 20 69 6e 76 "object inv 2970: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e oke Interpreter. 2980: 47 65 74 41 63 74 69 76 65 20 41 64 64 52 75 6e GetActive AddRun 2990: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 timeOption nativ 29a0: 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 e".. # 29b0: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 -file .\path 29c0: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 \to\all.eagle.. 29d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 29e0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 29f0: 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 :build_directory 2a00: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 2a10: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 2a20: 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74$::build_direct
2a30: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
2a40: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2a50: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
2a60: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
2a70: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
2a80: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
2a90: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23  dden;..        #
2aa0: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65         therefore
2ab0: 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69  , use it verbati
2ac0: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  m...        #..
2ad0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 2ae0: 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 :build_directory 2af0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 2b00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2b10: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 2b20: 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e the "native" run 2b30: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 73 time option is s 2b40: 65 74 2c 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f et, the mixed-mo 2b50: 64 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 de assembly.. 2b60: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is 2b70: 62 65 69 6e 67 20 74 65 73 74 65 64 2e 20 20 49 being tested. I 2b80: 6e 20 74 68 61 74 20 63 61 73 65 2c 20 74 68 65 n that case, the 2b90: 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75 69 path to the bui 2ba0: 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 ld directory.. 2bb0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 # wi 2bc0: 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 70 ll contain the p 2bd0: 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 61 6e 64 latform name and 2be0: 20 61 6c 6c 20 74 68 65 20 62 69 6e 61 72 69 65 all the binarie 2bf0: 73 20 75 6e 64 65 72 20 74 65 73 74 0d 0a 20 20 s under test.. 2c00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 # sh 2c10: 6f 75 6c 64 20 62 65 20 70 72 65 73 65 6e 74 20 ould be present 2c20: 69 6e 20 74 68 61 74 20 64 69 72 65 63 74 6f 72 in that director 2c30: 79 2e 20 20 49 66 20 74 68 65 20 22 6e 61 74 69 y. If the "nati 2c40: 76 65 22 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 ve" runtime.. 2c50: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 70 74 # opt 2c60: 69 6f 6e 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 ion is not set, 2c70: 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 the build direct 2c80: 6f 72 79 20 77 69 6c 6c 20 62 65 20 63 6f 6e 73 ory will be cons 2c90: 69 64 65 72 65 64 20 74 6f 20 62 65 0d 0a 20 20 idered to be.. 2ca0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 70 # "p 2cb0: 6c 61 74 66 6f 72 6d 2d 6e 65 75 74 72 61 6c 22 latform-neutral" 2cc0: 2c 20 77 69 74 68 20 74 68 65 20 6e 6f 74 61 62 , with the notab 2cd0: 6c 65 20 65 78 63 65 70 74 69 6f 6e 20 6f 66 20 le exception of 2ce0: 61 6e 79 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 any native.. 2cf0: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 # asse 2d00: 6d 62 6c 79 20 28 65 2e 67 2e 20 22 53 51 4c 69 mbly (e.g. "SQLi 2d10: 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 22 29 te.Interop.dll") 2d20: 20 63 6f 70 69 65 64 20 74 68 65 72 65 20 64 75 copied there du 2d30: 72 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 ring the.. 2d40: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 # build 2d50: 70 72 6f 63 65 73 73 20 69 74 73 65 6c 66 2e 20 process itself. 2d60: 20 49 66 20 74 68 65 20 62 75 69 6c 64 20 70 72 If the build pr 2d70: 6f 63 65 73 73 20 73 6f 6d 65 68 6f 77 20 64 6f ocess somehow do 2d80: 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 es not.. 2d90: 23 20 20 20 20 20 20 20 63 6f 70 79 20 74 68 65 # copy the 2da0: 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 79 native assembly 2db0: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f for this platfo 2dc0: 72 6d 2c 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 rm, most of the 2dd0: 74 65 73 74 73 0d 0a 20 20 20 20 20 20 20 20 23 tests.. # 2de0: 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 73 75 in the su 2df0: 69 74 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 ite will simply 2e00: 62 65 20 73 6b 69 70 70 65 64 2e 20 20 47 65 6e be skipped. Gen 2e10: 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c erally speaking, 2e20: 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 there.. 2e30: 23 20 20 20 20 20 20 20 61 72 65 20 74 77 6f 20 # are two 2e40: 77 61 79 73 20 74 6f 20 62 75 69 6c 64 20 74 68 ways to build th 2e50: 65 20 62 69 6e 61 72 69 65 73 20 77 68 65 6e 20 e binaries when 2e60: 70 72 65 70 61 72 69 6e 67 20 74 6f 20 72 75 6e preparing to run 2e70: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 2e80: 20 20 20 20 20 20 74 65 73 74 20 73 75 69 74 65 test suite 2e90: 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 :.. #.. 2ea0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 31 2e # 1. 2eb0: 20 42 75 69 6c 64 20 74 68 65 20 73 65 70 61 72 Build the separ 2ec0: 61 74 65 20 6d 61 6e 61 67 65 64 20 61 6e 64 20 ate managed and 2ed0: 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 69 65 native assemblie 2ee0: 73 20 75 73 69 6e 67 20 73 6f 6d 65 0d 0a 20 20 s using some.. 2ef0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 2f00: 20 63 6f 6d 6d 61 6e 64 73 20 73 69 6d 69 6c 61 commands simila 2f10: 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 r to:.. # 2f20: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2f30: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 build.bat$
2f40: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4d  {Configuration}M
2f50: 61 6e 61 67 65 64 4f 6e 6c 79 20 24 7b 50 6c 61  anagedOnly ${Pla 2f60: 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 tform}.. 2f70: 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 # build 2f80: 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 .bat${Configura
2f90: 74 69 6f 6e 7d 4e 61 74 69 76 65 4f 6e 6c 79 20  tion}NativeOnly
2fa0: 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20  ${Platform}.. 2fb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2fc0: 23 20 20 20 20 20 20 20 20 20 20 57 68 65 72 65 # Where 2fd0: 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e${Configuration
2fe0: 7d 20 69 73 20 65 69 74 68 65 72 20 22 44 65 62  } is either "Deb
2ff0: 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22  ug" or "Release"
3000: 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20   and..        #
3010: 20 20 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66           ${Platf 3020: 6f 72 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 orm} is either " 3030: 57 69 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e Win32" or "x64". 3040: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 3050: 20 20 20 20 20 23 20 20 20 20 20 20 20 32 2e 20 # 2. 3060: 42 75 69 6c 64 20 74 68 65 20 6d 69 78 65 64 2d Build the mixed- 3070: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 75 73 mode assembly us 3080: 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 ing a command si 3090: 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20 milar to:.. 30a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 30b0: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62 build.b 30c0: 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 at${Configurati
30d0: 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d  on} ${Platform}. 30e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 30f0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 57 # W 3100: 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61 here${Configura
3110: 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20  tion} is either
3120: 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65  "Debug" or "Rele
3130: 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20  ase" and..
3140: 20 20 23 20 20 20 20 20 20 20 20 20 20 24 7b 50    #          ${P 3150: 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68 latform} is eith 3160: 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78 er "Win32" or "x 3170: 36 34 22 2e 20 20 49 66 20 74 68 69 73 20 63 6f 64". If this co 3180: 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 20 mmand is.. 3190: 20 20 23 20 20 20 20 20 20 20 20 20 20 75 73 65 # use 31a0: 64 2c 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 d, various tests 31b0: 20 74 68 61 74 20 72 65 71 75 69 72 65 20 73 75 that require su 31c0: 70 70 6c 65 6d 65 6e 74 61 72 79 20 6d 61 6e 61 pplementary mana 31d0: 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ged.. # 31e0: 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 69 assembli 31f0: 65 73 20 28 65 2e 67 2e 20 4c 49 4e 51 29 20 6d es (e.g. LINQ) m 3200: 61 79 20 62 65 20 73 6b 69 70 70 65 64 20 75 6e ay be skipped un 3210: 6c 65 73 73 20 74 68 6f 73 65 20 62 69 6e 61 72 less those binar 3220: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ies.. # 3230: 20 20 20 20 20 20 20 20 61 72 65 20 73 75 62 73 are subs 3240: 65 71 75 65 6e 74 6c 79 20 63 6f 70 69 65 64 20 equently copied 3250: 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65 63 74 into the correct 3260: 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e directory (i.e. 3270: 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 by.. # 3280: 20 20 20 20 20 20 20 20 22 74 65 73 74 5f 61 6c "test_al 3290: 6c 2e 62 61 74 22 29 2e 0d 0a 20 20 20 20 20 20 l.bat")... 32a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 #.. # 32b0: 20 20 20 20 20 4e 6f 74 65 20 74 68 61 74 20 61 Note that a 32c0: 6c 6c 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 ll of the build 32d0: 63 6f 6d 6d 61 6e 64 73 20 61 62 6f 76 65 20 77 commands above w 32e0: 69 6c 6c 20 64 65 66 61 75 6c 74 20 74 6f 20 75 ill default to u 32f0: 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20 sing.. # 3300: 20 20 20 20 20 20 74 68 65 20 6c 61 74 65 73 74 the latest 3310: 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 version of MSBu 3320: 69 6c 64 20 61 76 61 69 6c 61 62 6c 65 20 61 6e ild available an 3330: 64 20 74 68 65 20 22 74 65 73 74 5f 79 65 61 72 d the "test_year 3340: 22 20 6d 61 79 0d 0a 20 20 20 20 20 20 20 20 23 " may.. # 3350: 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f 20 62 need to b 3360: 65 20 61 64 6a 75 73 74 65 64 20 61 63 63 6f 72 e adjusted accor 3370: 64 69 6e 67 6c 79 20 74 6f 20 61 63 74 75 61 6c dingly to actual 3380: 6c 79 20 72 75 6e 20 74 68 65 20 74 65 73 74 20 ly run the test 3390: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 suite... 33a0: 23 20 20 20 20 20 20 20 52 65 66 65 72 20 74 6f # Refer to 33b0: 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 69 6e the comments in 33c0: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20 [getBuildYear] 33d0: 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 for more informa 33e0: 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20 20 20 20 20 tion on.. 33f0: 20 23 20 20 20 20 20 20 20 68 6f 77 20 74 6f 20 # how to 3400: 73 65 74 20 74 68 69 73 20 76 61 72 69 61 62 6c set this variabl 3410: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 3420: 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 set nativ 3430: 65 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 e [hasRuntimeOpt 3440: 69 6f 6e 20 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 ion native].... 3450: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6a return [j 3460: 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 oinBuildDirector 3470: 79 20 24 6e 61 74 69 76 65 20 5b 67 65 74 42 75 y$native [getBu
3480: 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79  ildBaseDirectory
3490: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..
34a0: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20   [getBuildYear]
34b0: 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72  [getBuildPlatfor
34c0: 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65 74 42  m $native] [getB 34d0: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f uildConfiguratio 34e0: 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 n]].. }.. 34f0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 3500: 20 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d getBuildFileNam 3510: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b e { fileName } { 3520: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 3530: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 # NOTE: Returns 3540: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 the specified f 3550: 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69 ile name as if i 3560: 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69 t were located i 3570: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 n the.. # 3580: 20 20 20 20 20 62 75 69 6c 64 20 64 69 72 65 63 build direc 3590: 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e 67 tory, discarding 35a0: 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 69 any directory i 35b0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 nformation prese 35c0: 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 nt.. # 35d0: 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 in the file na 35e0: 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 62 me as provided b 35f0: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 y our caller... 3600: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re 3610: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 turn [file nativ 3620: 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 ename \.. 3630: 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 [file join [g 3640: 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 etBuildDirectory 3650: 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 ] [file tail$fi
3660: 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d  leName]]]..    }
3670: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
3680: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79  tBinaryDirectory
3690: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
36a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
36b0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
36c0: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f  urns the directo
36d0: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73  ry where the tes
36e0: 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20  t application..
36f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73       #       its
3700: 65 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45 61  elf (i.e. the Ea
3710: 67 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f  gle shell) is lo
3720: 63 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c  cated.  This wil
3730: 6c 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20 20  l be used as..
3740: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
3750: 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20  destination for
3760: 74 68 65 20 63 6f 70 69 65 64 20 53 79 73 74 65  the copied Syste
3770: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61  m.Data.SQLite na
3780: 74 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20 20  tive and..
3790: 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20  #       managed
37a0: 61 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e  assemblies (i.e.
37b0: 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69 73   because this is
37c0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77 20   one of the few
37d0: 70 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23 20  places..      #
37e0: 20 20 20 20 20 20 77 68 65 72 65 20 74 68 65 20        where the
37f0: 43 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c  CLR will actuall
3800: 79 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20  y find and load
3810: 74 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d  them properly)..
3820: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3830: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
3840: 20 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74   ::binary_direct
3850: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
3860: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
3870: 67 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69  gth $::binary_di 3880: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 3890: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 38a0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 38b0: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 38c0: 20 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 65 the binary dire 38d0: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f ctory has been o 38e0: 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 verridden;.. 38f0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 # ther 3900: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 efore, use it ve 3910: 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 rbatim... 3920: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 3930: 72 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 rn$::binary_dir
3940: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20  ectory..      }
3950: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
3960: 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e  return [info bin
3970: 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ary]..      }..
3980: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
3990: 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e  c getBinaryFileN
39a0: 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d  ame { fileName }
39b0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
39c0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72     # NOTE: Retur
39d0: 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64  ns the specified
39e0: 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66   file name as if
39f0: 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64   it were located
3a00: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23   in the..      #
3a10: 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64 69         binary di
3a20: 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64  rectory, discard
3a30: 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72  ing any director
3a40: 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72  y information pr
3a50: 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20  esent..      #
3a60: 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65       in the file
3a70: 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65   name as provide
3a80: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e  d by our caller.
3a90: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
3aa0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61   return [file na
3ab0: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  tivename \..
3ac0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
3ad0: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
3ae0: 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c  tory] [file tail
3af0: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20   $fileName]]].. 3b00: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 3b10: 63 20 67 65 74 43 6f 72 65 42 69 6e 61 72 79 46 c getCoreBinaryF 3b20: 69 6c 65 4e 61 6d 65 20 7b 20 7b 73 74 61 6e 64 ileName { {stand 3b30: 61 72 64 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a ard false} } {.. 3b40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 3b50: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 NOTE: Returns t 3b60: 68 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f 72 he full path for 3b70: 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 the file contai 3b80: 6e 69 6e 67 20 74 68 65 20 63 6f 72 65 20 53 51 ning the core SQ 3b90: 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 Lite.. # 3ba0: 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f 64 65 library code 3bb0: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f for this platfo 3bc0: 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 rm... #.. 3bd0: 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 if {[hasRunt 3be0: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native 3bf0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 3c00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 3c10: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 NOTE: Return the 3c20: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 3c30: 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d mbly file name.. 3c40: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 3c50: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 3c60: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 nativename \.. 3c70: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 3c80: 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 join [getBinary 3c90: 44 69 72 65 63 74 6f 72 79 5d 20 53 79 73 74 65 Directory] Syste 3ca0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl 3cb0: 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 l]].. } els 3cc0: 65 69 66 20 7b 24 73 74 61 6e 64 61 72 64 7d 20 eif {$standard}
3cd0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
3ce0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
3cf0: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  E: Return the na
3d00: 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61  tive-only standa
3d10: 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  rd SQLite librar
3d20: 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20  y file name...
3d30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
3d40: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61   return [file na
3d50: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  tivename \..
3d60: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f          [file jo
3d70: 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72  in [getBinaryDir
3d80: 65 63 74 6f 72 79 5d 20 73 71 6c 69 74 65 33 2e  ectory] sqlite3.
3d90: 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65  dll]]..      } e
3da0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
3db0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
3dc0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74  : Return the nat
3dd0: 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70  ive-only interop
3de0: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e   assembly file n
3df0: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ame...        #.
3e00: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3e10: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
3e20: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
3e30: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
3e40: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20  inaryDirectory]
3e50: 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64  SQLite.Interop.d
3e60: 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ll]]..      }..
3e70: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
3e80: 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63  c getCommonDirec
3e90: 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  tory {} {..
3ea0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
3eb0: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
3ec0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72   returns the dir
3ed0: 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65  ectory where the
3ee0: 20 74 65 73 74 20 73 63 72 69 70 74 73 0d 0a 20   test scripts..
3ef0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f       #       sho
3f00: 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20  uld be located.
3f10: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69   By default, thi
3f20: 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73 20 74  s just returns t
3f30: 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20  he Eagle..
3f40: 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64  #       binary d
3f50: 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20  irectory...
3f60: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
3f70: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d  nfo exists ::com
3f80: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26  mon_directory] &
3f90: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
3fa0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 3fb0: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 :common_director 3fc0: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a y] > 0} then {.. 3fd0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 3fe0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c # NOTE: The l 3ff0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 ocation of the c 4000: 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79 20 ommon directory 4010: 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 has been set;.. 4020: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 4030: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 4040: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 4050: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
4060: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
4070: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
4080: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
4090: 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72  :vendor_director
40a0: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
40b0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
40c0: 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65  h $::vendor_dire 40d0: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e ctory] > 0} then 40e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 40f0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 4100: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 he location of t 4110: 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 63 74 he vendor direct 4120: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 ory has been set 4130: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 4140: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 4150: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 e it... # 4160: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 4170: 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63$::vendor_direc
4180: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tory..      } el
4190: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
41a0: 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79  ts ::tcl_library
41b0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
41c0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
41d0: 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d   $::tcl_library] 41e0: 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 > 0 && \.. 41f0: 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69 72 [file isdir 4200: 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c 69 ectory$::tcl_li
4210: 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  brary]} then {..
4220: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
4230: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 76     # NOTE: The v
4240: 61 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 65  ariable with the
4250: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
4260: 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20   script library
4270: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
4280: 20 20 20 20 73 65 74 20 61 6e 64 20 61 70 70 65      set and appe
4290: 61 72 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c  ars to be a real
42a0: 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e   directory (i.e.
42b0: 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a 20   not embedded..
42c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77         #       w
42d0: 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b 20 74  ithin a file); t
42e0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
42f0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
4300: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 4310: 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20 20 tcl_library.. 4320: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 4330: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4340: 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b # NOTE: Fallback 4350: 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 to the director 4360: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 y containing the 4370: 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20 20 executable... 4380: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4390: 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 return [info bi 43a0: 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a nary].. }.. 43b0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 43c0: 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 44 69 oc getDatabaseDi 43d0: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 rectory {} {.. 43e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 43f0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced 4400: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 ure returns the 4410: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 directory where 4420: 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 the test databas 4430: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # 4440: 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 should be loca 4450: 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 ted. By default 4460: 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 , this just uses 4470: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a the temporary.. 4480: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 4490: 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 rectory configur 44a0: 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 ed for this syst 44b0: 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 em... #.. 44c0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 44d0: 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 5f ists ::database_ 44e0: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 44f0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 4500: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 ng length$::dat
4510: 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d  abase_directory]
4520: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
4530: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4540: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
4550: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74  ation of the dat
4560: 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20  abase directory
4570: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
4580: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
4590: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
45a0: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
45b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
45c0: 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73 65 5f  urn $::database_ 45d0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 45e0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f } elseif {[info 45f0: 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 exists ::scratc 4600: 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 h_directory] && 4610: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 4620: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 ring length$::s
4630: 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79  cratch_directory
4640: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
4650: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4660: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
4670: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63  cation of the sc
4680: 72 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20  ratch directory
4690: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
46a0: 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20  den;..        #
46b0: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c        therefore,
46c0: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
46d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
46e0: 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64  urn $::scratch_d 46f0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 4700: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 4710: 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d return [getTem 4720: 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 poraryPath].. 4730: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 4740: 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 6d 70 proc getTemp 4750: 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b oraryDirectory { 4760: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 4770: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 4780: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur 4790: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 ns the directory 47a0: 20 77 68 65 72 65 20 74 68 65 20 74 65 6d 70 6f where the tempo 47b0: 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 20 20 rary files.. 47c0: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 47d0: 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 be located. By 47e0: 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a default, this j 47f0: 75 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d ust uses the tem 4800: 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 porary.. # 4810: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 directory 4820: 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 configured for t 4830: 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 his system... 4840: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 4850: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 4860: 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f emporary_directo 4870: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 4880: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 4890: 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f th$::temporary_
48a0: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
48b0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
48c0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
48d0: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
48e0: 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  of the temporary
48f0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
4900: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
4910: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
4920: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
4930: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
4940: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $4950: 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 ::temporary_dire 4960: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 4970: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 lseif {[info exi 4980: 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 sts ::scratch_di 4990: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 49a0: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 49b0: 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 length$::scrat
49c0: 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ch_directory] >
49d0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
49e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
49f0: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
4a00: 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 63  on of the scratc
4a10: 68 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20  h directory has
4a20: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
4a30: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4a40: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
4a50: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
4a60: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
4a70: 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63  $::scratch_direc 4a80: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 4a90: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 se {.. re 4aa0: 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 turn [getTempora 4ab0: 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d ryPath].. } 4ac0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 4ad0: 70 72 6f 63 20 67 65 74 54 65 73 74 4f 76 65 72 proc getTestOver 4ae0: 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20 7b 20 ridesPreamble { 4af0: 7b 65 78 74 72 61 56 61 72 4e 61 6d 65 73 20 22 {extraVarNames " 4b00: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 "} } {.. se 4b10: 74 20 76 61 72 4e 61 6d 65 73 20 5b 6c 69 73 74 t varNames [list 4b20: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. 4b30: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 # NOTE: If a 4b40: 76 61 69 6c 61 62 6c 65 2c 20 73 74 61 72 74 20 vailable, start 4b50: 77 69 74 68 20 74 68 65 20 6d 61 73 74 65 72 20 with the master 4b60: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 6f 76 65 list of test ove 4b70: 72 72 69 64 65 0d 0a 20 20 20 20 20 20 23 20 20 rride.. # 4b80: 20 20 20 20 20 76 61 72 69 61 62 6c 65 73 2e 0d variables.. 4b90: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 4ba0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 4bb0: 20 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 ::test_override 4bc0: 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 s] && \.. 4bd0: 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 [llength$::t
4be0: 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 3e  est_overrides] >
4bf0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
4c00: 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64      eval lappend
4c10: 20 76 61 72 4e 61 6d 65 73 20 24 3a 3a 74 65 73   varNames $::tes 4c20: 74 5f 6f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 t_overrides.. 4c30: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 4c40: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 4c50: 66 20 72 65 71 75 65 73 74 65 64 20 62 79 20 6f f requested by o 4c60: 75 72 20 63 61 6c 6c 65 72 2c 20 61 64 64 20 61 ur caller, add a 4c70: 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 ny additional va 4c80: 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 riable.. # 4c90: 20 20 20 20 20 20 6e 61 6d 65 73 20 74 6f 20 63 names to c 4ca0: 6f 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 opy now... 4cb0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c #.. if {[ll 4cc0: 65 6e 67 74 68 20 24 65 78 74 72 61 56 61 72 4e ength$extraVarN
4cd0: 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ames] > 0} then
4ce0: 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20  {..        eval
4cf0: 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73  lappend varNames
4d00: 20 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 0d   $extraVarNames. 4d10: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 4d20: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 4d30: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 73 63 72 E: Build the scr 4d40: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 ipt fragment to 4d50: 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 70 be returned by p 4d60: 72 6f 63 65 73 73 69 6e 67 20 65 61 63 68 0d 0a rocessing each.. 4d70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 # va 4d80: 72 69 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20 riable name and 4d90: 61 64 64 69 6e 67 20 74 68 65 20 6e 65 63 65 63 adding the necec 4da0: 65 73 73 61 72 79 20 73 63 72 69 70 74 20 66 72 essary script fr 4db0: 61 67 6d 65 6e 74 73 20 66 6f 72 0d 0a 20 20 20 agments for.. 4dc0: 20 20 20 23 20 20 20 20 20 20 20 65 61 63 68 20 # each 4dd0: 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 one... #.. 4de0: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result 4df0: 22 22 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 "".... fore 4e00: 61 63 68 20 76 61 72 4e 61 6d 65 20 24 76 61 72 ach varName$var
4e10: 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
4e20: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
4e30: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 71 75  TE: Build the qu
4e40: 61 6c 69 66 69 65 64 20 67 6c 6f 62 61 6c 20 76  alified global v
4e50: 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20  ariable name...
4e60: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4e70: 20 20 73 65 74 20 66 75 6c 6c 56 61 72 4e 61 6d    set fullVarNam
4e80: 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 3a 3a  e [appendArgs ::
4e90: 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20   $varName].... 4ea0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4eb0: 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 # NOTE: Does th 4ec0: 65 20 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 e variable exist 4ed0: 20 69 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 in this interpr 4ee0: 65 74 65 72 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 eter context?.. 4ef0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4f00: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 4f10: 74 73 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d ts$fullVarName]
4f20: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
4f30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
4f40: 20 23 20 4e 4f 54 45 3a 20 41 70 70 65 6e 64 20   # NOTE: Append
4f50: 61 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e  a script fragmen
4f60: 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  t to the result
4f70: 74 68 61 74 20 77 69 6c 6c 20 63 6f 72 72 65 63  that will correc
4f80: 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23  tly..          #
4f90: 20 20 20 20 20 20 20 63 6f 70 79 20 61 6e 79 20         copy any
4fa0: 63 6f 6e 74 61 69 6e 65 64 20 76 61 6c 75 65 20  contained value
4fb0: 74 6f 20 61 6e 6f 74 68 65 72 20 69 6e 74 65 72  to another inter
4fc0: 70 72 65 74 65 72 20 63 6f 6e 74 65 78 74 2e 0d  preter context..
4fd0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
4fe0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 72          append r
4ff0: 65 73 75 6c 74 20 5c 6e 20 22 73 65 74 20 22 20  esult \n "set "
5000: 24 66 75 6c 6c 56 61 72 4e 61 6d 65 20 22 20 5c  $fullVarName " \ 5010: 7b 22 20 5b 73 65 74 20 24 66 75 6c 6c 56 61 72 {" [set$fullVar
5020: 4e 61 6d 65 5d 20 5c 7d 0d 0a 20 20 20 20 20 20  Name] \}..
5030: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
5040: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
5050: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 72 65   NOTE: If the re
5060: 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  sult contains on
5070: 65 20 6f 72 20 6d 6f 72 65 20 73 63 72 69 70 74  e or more script
5080: 20 66 72 61 67 6d 65 6e 74 73 2c 20 61 70 70 65   fragments, appe
5090: 6e 64 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20  nd a..      #
50a0: 20 20 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20 20      newline...
50b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
50c0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
50d0: 24 72 65 73 75 6c 74 5d 20 3e 20 30 7d 20 74 68  $result] > 0} th 50e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 en {.. ap 50f0: 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 0d 0a pend result \n.. 5100: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 5110: 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d return$result.
5120: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
5130: 72 6f 63 20 67 65 74 41 70 70 44 6f 6d 61 69 6e  roc getAppDomain
5140: 50 72 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66  Preamble { {pref
5150: 69 78 20 22 22 7d 20 7b 73 75 66 66 69 78 20 22  ix ""} {suffix "
5160: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  "} } {..      #.
5170: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
5180: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65  his procedure re
5190: 74 75 72 6e 73 20 61 20 74 65 73 74 20 73 65 74  turns a test set
51a0: 75 70 20 73 63 72 69 70 74 20 66 72 61 67 6d 65  up script fragme
51b0: 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 0d  nt suitable for.
51c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65  .      #       e
51d0: 76 61 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e 20  valuation by an
51e0: 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61  interpreter crea
51f0: 74 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74  ted in an isolat
5200: 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a  ed application..
5210: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 6f        #       do
5220: 6d 61 69 6e 2e 20 20 54 68 65 20 73 63 72 69 70  main.  The scrip
5230: 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67  t fragment being
5240: 20 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62   returned will b
5250: 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 0d  e surrounded by.
5260: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
5270: 68 65 20 70 72 65 66 69 78 20 61 6e 64 20 73 75  he prefix and su
5280: 66 66 69 78 20 22 73 63 72 69 70 74 20 66 72 61  ffix "script fra
5290: 67 6d 65 6e 74 73 22 20 73 70 65 63 69 66 69 65  gments" specifie
52a0: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c  d by our caller,
52b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
52c0: 69 66 20 61 6e 79 2e 20 20 54 68 65 20 65 6e 74  if any.  The ent
52d0: 69 72 65 20 73 63 72 69 70 74 20 62 65 69 6e 67  ire script being
52e0: 20 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62   returned will b
52f0: 65 20 73 75 62 73 74 69 74 75 74 65 64 20 76 69  e substituted vi
5300: 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  a..      #
5310: 20 5b 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 65   [subst], in the
5320: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20   context of our
5330: 63 61 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 62  caller, before b
5340: 65 69 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a  eing returned...
5350: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 54 68        #       Th
5360: 69 73 20 73 74 65 70 20 69 73 20 6e 65 63 65 73  is step is neces
5370: 73 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d  sary so that som
5380: 65 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78  e limited contex
5390: 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a  t information,..
53a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
53b0: 69 6d 61 72 69 6c 79 20 72 65 6c 61 74 65 64 20  imarily related
53c0: 74 6f 20 74 68 65 20 74 65 73 74 69 6e 67 20 64  to the testing d
53d0: 69 72 65 63 74 6f 72 69 65 73 2c 20 63 61 6e 20  irectories, can
53e0: 62 65 20 74 72 61 6e 73 66 65 72 72 65 64 0d 0a  be transferred..
53f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
5400: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
5410: 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64   in the isolated
5420: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d   application dom
5430: 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a  ain, making it..
5440: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 62        #       ab
5450: 6c 65 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c  le to successful
5460: 6c 79 20 72 75 6e 20 74 65 73 74 73 20 74 68 61  ly run tests tha
5470: 74 20 72 65 71 75 69 72 65 20 6f 6e 65 20 6f 72  t require one or
5480: 20 6d 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 20   more of the..
5490: 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65      #       file
54a0: 73 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20  s in one of the
54b0: 74 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72  testing director
54c0: 69 65 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 68  ies.  Callers sh
54d0: 6f 75 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20  ould keep in..
54e0: 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 6e 64      #       mind
54f0: 20 74 68 61 74 20 74 68 65 20 74 65 73 74 20 73   that the test s
5500: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62  cript fragment b
5510: 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 63 61  eing returned ca
5520: 6e 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20  nnot rely on..
5530: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 79 20      #       any
5540: 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70  script library p
5550: 72 6f 63 65 64 75 72 65 73 20 74 68 61 74 20 61  rocedures that a
5560: 72 65 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20  re not provided
5570: 62 79 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20  by the Eagle..
5580: 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72      #       libr
5590: 61 72 79 20 70 61 63 6b 61 67 65 20 28 69 2e 65  ary package (i.e
55a0: 2e 20 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c  . "init.eagle"),
55b0: 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 65   including those
55c0: 20 70 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 20   provided by..
55d0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
55e0: 45 61 67 6c 65 20 74 65 73 74 20 70 61 63 6b 61  Eagle test packa
55f0: 67 65 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 66  ge, unless the f
5600: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ile containing t
5610: 68 65 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20  hem is loaded..
5620: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e       #       man
5630: 75 61 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f  ually via some o
5640: 74 68 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 28  ther mechanism (
5650: 65 2e 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e  e.g. by includin
5660: 67 20 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20  g appropriate..
5670: 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 70 61       #       [pa
5680: 63 6b 61 67 65 20 72 65 71 75 69 72 65 5d 20 6f  ckage require] o
5690: 72 20 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61  r [source] comma
56a0: 6e 64 73 20 69 6e 20 74 68 65 20 70 72 65 66 69  nds in the prefi
56b0: 78 20 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 20  x or suffix..
56c0: 20 20 20 23 20 20 20 20 20 20 20 73 63 72 69 70     #       scrip
56d0: 74 20 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 41  t fragments).  A
56e0: 6c 73 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c  lso, all variabl
56f0: 65 20 72 65 66 65 72 65 6e 63 65 73 20 61 6e 64  e references and
5700: 20 61 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20   all nested..
5710: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61     #       comma
5720: 6e 64 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20  nds (i.e. those
5730: 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65  in square bracke
5740: 74 73 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ts) contained in
5750: 20 74 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20   the final..
5760: 20 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74    #       script
5770: 20 66 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65   fragment will e
5780: 6e 64 20 75 70 20 62 65 69 6e 67 20 65 76 61 6c  nd up being eval
5790: 75 61 74 65 64 20 69 6e 20 74 68 65 20 63 6f 6e  uated in the con
57a0: 74 65 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 20  text of the..
57b0: 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 69     #       calli
57c0: 6e 67 20 69 6e 74 65 72 70 72 65 74 65 72 20 61  ng interpreter a
57d0: 6e 64 20 6e 6f 74 20 74 68 65 20 74 61 72 67 65  nd not the targe
57e0: 74 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72  t interpreter cr
57f0: 65 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20  eated in the..
5800: 20 20 20 20 23 20 20 20 20 20 20 20 69 73 6f 6c      #       isol
5810: 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e  ated application
5820: 20 64 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74   domain unless t
5830: 68 65 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20  he dollar signs
5840: 61 6e 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20  and/or square..
5850: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 72 61       #       bra
5860: 63 6b 65 74 73 20 61 72 65 20 73 70 65 63 69 61  ckets are specia
5870: 6c 6c 79 20 71 75 6f 74 65 64 20 77 69 74 68 20  lly quoted with
5880: 62 61 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20  backslashes...
5890: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
58a0: 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b  urn [uplevel 1 [
58b0: 6c 69 73 74 20 73 75 62 73 74 20 5b 61 70 70 65  list subst [appe
58c0: 6e 64 41 72 67 73 20 24 70 72 65 66 69 78 20 7b  ndArgs $prefix { 58d0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 .. if {[h 58e0: 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 asRuntimeOption 58f0: 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d native]} then {. 5900: 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 5910: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 t invoke Interpr 5920: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 41 eter.GetActive A 5930: 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 ddRuntimeOption 5940: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 native.. 5950: 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67 65 74 54 }.. } [getT 5960: 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 estOverridesPrea 5970: 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61 74 68 20 mble [list path 5980: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d 5d 20 24 test_channel]]$
5990: 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 20 20 7d  suffix]]]..    }
59a0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
59b0: 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20  yCopyBinaryFile
59c0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 6e 65 77 46  { fileName {newF
59d0: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  ileName ""} } {.
59e0: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63  .      set sourc
59f0: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69  eFileName [getBi
5a00: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69  naryFileName $fi 5a10: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 leName].... 5a20: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis 5a30: 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ts$sourceFileNa
5a40: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
5a50: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 5a60: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 5a70: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 5a80: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 "---- skip 5a90: 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e 61 ped copying bina 5aa0: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 ry file \""$sou
5ab0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  rceFileName \..
5ac0: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
5ad0: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
5ae0: 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  t\n"]....
5af0: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d   return..      }
5b00: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73  ....      if {[s
5b10: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65  tring length $ne 5b20: 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 wFileName] > 0} 5b30: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 5b40: 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 set targetFileNa 5b50: 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 me [getBuildFile 5b60: 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d Name$newFileNam
5b70: 65 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  e]..      } else
5b80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
5b90: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b  targetFileName [
5ba0: 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
5bb0: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20   $fileName].. 5bc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 5bd0: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 5be0: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 file c 5bf0: 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 opy -force$sour
5c00: 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67  ceFileName $targ 5c10: 65 74 46 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 etFileName}] == 5c20: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 5c30: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
5c40: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
5c50: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
5c60: 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64      "---- copied
5c70: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f   binary file fro
5c80: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c  m \"" $sourceFil 5c90: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 eName "\" to \"" 5ca0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 5cb0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20$targetFileName
5cc0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
5cd0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
5ce0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 5cf0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 5d00: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 5d10: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 "---- failed to 5d20: 63 6f 70 79 20 62 69 6e 61 72 79 20 66 69 6c 65 copy binary file 5d30: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 from \""$sourc
5d40: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  eFileName \..
5d50: 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20           "\" to
5d60: 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e  \"" $targetFileN 5d70: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. 5d80: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 5d90: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 75 proc tryCopyBu 5da0: 69 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 ildFile { fileNa 5db0: 6d 65 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 me {newFileName 5dc0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 ""} } {.. s 5dd0: 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d et sourceFileNam 5de0: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e e [getBuildFileN 5df0: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a ame$fileName]..
5e00: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69  ..      if {![fi
5e10: 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63  le exists $sourc 5e20: 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e eFileName]} then 5e30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 5e40: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
5e50: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
5e60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
5e70: 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69  -- skipped copyi
5e80: 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22  ng build file \"
5e90: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam 5ea0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 5eb0: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f "\", it does no 5ec0: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 t exist\n"].... 5ed0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 return.. 5ee0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 5ef0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 5f00: 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d th$newFileName]
5f10: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
5f20: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74        set target
5f30: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e  FileName [getBin
5f40: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77  aryFileName $new 5f50: 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 FileName].. 5f60: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 5f70: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c set targetFil 5f80: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 eName [getBinary 5f90: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 FileName$fileNa
5fa0: 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  me]..      }....
5fb0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
5fc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
5fd0: 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72    file copy -for
5fe0: 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  ce $sourceFileNa 5ff0: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 me$targetFileNa
6000: 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  me}] == 0} then
6010: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
6020: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 6030: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 6040: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 6050: 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 - copied build f 6060: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f ile from \""$so
6070: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22  urceFileName "\"
6080: 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20   to \"" \..
6090: 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69         $targetFi 60a0: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. 60b0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 60c0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
60d0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
60e0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
60f0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69         "---- fai
6100: 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c  led to copy buil
6110: 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20  d file from \""
6120: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName 6130: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 6140: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 \" to \""$targe
6150: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  tFileName \"\n].
6160: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
6170: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79  ....    proc try
6180: 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
6190: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d   { fileName } {.
61a0: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e  .      set fileN
61b0: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
61c0: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 61d0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 ].... if {! 61e0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
61f0: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
6200: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $6210: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 6220: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 6230: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 6240: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting 6250: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 binary file \"" 6260: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
6270: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69            "\", i
6280: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
6290: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  \n"]....
62a0: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d  return..      }.
62b0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
62c0: 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65  tch {file delete
62d0: 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20   $fileName}] == 62e0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 62f0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
6300: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
6310: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
6320: 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65      "---- delete
6330: 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22  d binary file \"
6340: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  " $fileName \"\n 6350: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 6360: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 6370: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
6380: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
6390: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
63a0: 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65  - failed to dele
63b0: 74 65 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c  te binary file \
63c0: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ 63d0: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. 63e0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 63f0: 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 tryDeleteBuildFi 6400: 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 le { fileName } 6410: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c {.. set fil 6420: 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 eName [getBuildF 6430: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ileName$fileNam
6440: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  e]....      if {
6450: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  ![file exists $f 6460: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 6470: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 6480: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
6490: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
64a0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
64b0: 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e   skipped deletin
64c0: 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22  g build file \""
64d0: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20   $fileName \.. 64e0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 "\", i 64f0: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist 6500: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n"].... 6510: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d return.. }. 6520: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca 6530: 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 tch {file delete 6540: 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20$fileName}] ==
6550: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
6560: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 6570: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 6580: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 6590: 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 "---- delete 65a0: 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 d build file \"" 65b0: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d$fileName \"\n]
65c0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
65d0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
65e0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 65f0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 6600: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 6610: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 6620: 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 e build file \"" 6630: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d$fileName \"\n]
6640: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
6650: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
6660: 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b 20  yCopyAssembly {
6670: 66 69 6c 65 4e 61 6d 65 20 7b 70 64 62 20 74 72  fileName {pdb tr
6680: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  ue} } {..      t
6690: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
66a0: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20  $fileName.... 66b0: 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 if {$pdb} the
66c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79  n {..        try
66d0: 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 5b 61  CopyBuildFile [a
66e0: 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20  ppendArgs [file
66f0: 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61  rootname $fileNa 6700: 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20 20 20 me] .pdb].. 6710: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 6720: 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 proc tryDelete 6730: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e Assembly { fileN 6740: 61 6d 65 20 7b 70 64 62 20 74 72 75 65 7d 20 7d ame {pdb true} } 6750: 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 6c {.. tryDel 6760: 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 eteBinaryFile$f
6770: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20 20  ileName....
6780: 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20   if {$pdb} then 6790: 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44 65 {.. tryDe 67a0: 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 5b leteBinaryFile [ 67b0: 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 appendArgs [file 67c0: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e rootname$fileN
67d0: 61 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20 20  ame] .pdb]..
67e0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
67f0: 20 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 41     proc tryLoadA
6800: 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61  ssembly { fileNa
6810: 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  me } {..      se
6820: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  t fileName [getB
6830: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f 6840: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... 6850: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 65 if {[catch {se 6860: 74 20 61 73 73 65 6d 62 6c 79 20 5c 0d 0a 20 20 t assembly \.. 6870: 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a [obj 6880: 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 ect load -loadty 6890: 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 24 pe File -alias$
68a0: 66 69 6c 65 4e 61 6d 65 5d 7d 5d 20 3d 3d 20 30  fileName]}] == 0
68b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
68c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
68d0: 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 64 20 74 68  OTE: Now, add th
68e0: 65 20 6e 65 63 65 73 73 61 72 79 20 74 65 73 74  e necessary test
68f0: 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20   constraint...
6900: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
6910: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b   addConstraint [
6920: 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66  file rootname [f
6930: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa 6940: 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 me]].... 6950: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 6960: 45 3a 20 47 72 61 62 20 74 68 65 20 69 6d 61 67 E: Grab the imag 6970: 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f e runtime versio 6980: 6e 20 66 72 6f 6d 20 74 68 65 20 61 73 73 65 6d n from the assem 6990: 62 6c 79 20 62 65 63 61 75 73 65 0d 0a 20 20 20 bly because.. 69a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 76 # sev 69b0: 65 72 61 6c 20 74 65 73 74 73 20 72 65 6c 79 20 eral tests rely 69c0: 6f 6e 20 69 74 20 68 61 76 69 6e 67 20 61 20 63 on it having a c 69d0: 65 72 74 61 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 ertain value... 69e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 69f0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 6a00: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c [appendArgs [fil 6a10: 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
6a20: 5d 20 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ] _ \..
6a30: 20 20 20 5b 24 61 73 73 65 6d 62 6c 79 20 49 6d     [$assembly Im 6a40: 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f ageRuntimeVersio 6a50: 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 n]].... # 6a60: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 6a70: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 66 75 6c : Return the ful 6a80: 6c 20 70 61 74 68 20 6f 66 20 74 68 65 20 6c 6f l path of the lo 6a90: 61 64 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 aded file... 6aa0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 6ab0: 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d eturn$fileName.
6ac0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
6ad0: 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
6ae0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
6af0: 69 73 53 51 4c 69 74 65 52 65 61 64 79 20 7b 7d  isSQLiteReady {}
6b00: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
6b10: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
6b20: 70 72 6f 63 65 64 75 72 65 20 6d 75 73 74 20 72  procedure must r
6b30: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 6f  eturn non-zero o
6b40: 6e 6c 79 20 69 66 20 74 68 65 20 53 51 4c 69 74  nly if the SQLit
6b50: 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  e native..
6b60: 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 20  #       library
6b70: 61 6e 64 20 74 68 65 20 53 79 73 74 65 6d 2e 44  and the System.D
6b80: 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67  ata.SQLite manag
6b90: 65 64 20 61 73 73 65 6d 62 6c 79 20 61 72 65 20  ed assembly are
6ba0: 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20  loaded..      #
6bb0: 20 20 20 20 20 20 61 6e 64 20 72 65 61 64 79 20        and ready
6bc0: 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74  for use by the t
6bd0: 65 73 74 20 73 75 69 74 65 2e 20 20 43 75 72 72  est suite.  Curr
6be0: 65 6e 74 6c 79 2c 20 74 68 69 73 20 70 72 6f 63  ently, this proc
6bf0: 65 64 75 72 65 0d 0a 20 20 20 20 20 20 23 20 20  edure..      #
6c00: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 63       should be c
6c10: 61 6c 6c 65 64 20 6f 6e 6c 79 20 61 66 74 65 72  alled only after
6c20: 20 74 68 65 20 5b 74 72 79 4c 6f 61 64 41 73 73   the [tryLoadAss
6c30: 65 6d 62 6c 79 5d 20 70 72 6f 63 65 64 75 72 65  embly] procedure
6c40: 20 68 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20   has..      #
6c50: 20 20 20 20 62 65 65 6e 20 63 61 6c 6c 65 64 20      been called
6c60: 74 6f 20 70 72 6f 62 65 20 66 6f 72 20 74 68 65  to probe for the
6c70: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
6c80: 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65  ite managed asse
6c90: 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  mbly..      #
6ca0: 20 20 20 20 61 6e 64 20 74 68 65 20 5b 63 68 65      and the [che
6cb0: 63 6b 46 6f 72 53 51 4c 69 74 65 5d 20 70 72 6f  ckForSQLite] pro
6cc0: 63 65 64 75 72 65 20 68 61 73 20 62 65 65 6e 20  cedure has been
6cd0: 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 20  called to probe
6ce0: 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  for..      #
6cf0: 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61     the SQLite na
6d00: 74 69 76 65 20 6c 69 62 72 61 72 79 3b 20 6f 74  tive library; ot
6d10: 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 70 72  herwise, this pr
6d20: 6f 63 65 64 75 72 65 20 77 69 6c 6c 20 73 69 6d  ocedure will sim
6d30: 70 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ply..      #
6d40: 20 20 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e     always return
6d50: 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 23 0d   zero...      #.
6d60: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65  .      return [e
6d70: 78 70 72 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72  xpr {[haveConstr
6d80: 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61  aint System.Data
6d90: 2e 53 51 4c 69 74 65 5d 20 26 26 20 5c 0d 0a 20  .SQLite] && \..
6da0: 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f           [haveCo
6db0: 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 5d  nstraint SQLite]
6dc0: 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  }]..    }.....
6dd0: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53    proc checkForS
6de0: 51 4c 69 74 65 42 75 69 6c 64 73 20 7b 20 63 68  QLiteBuilds { ch
6df0: 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20  annel } {..
6e00: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
6e10: 3a 20 43 68 65 63 6b 20 66 6f 72 20 65 76 65 72  : Check for ever
6e20: 79 20 70 6f 73 73 69 62 6c 65 20 76 61 6c 69 64  y possible valid
6e30: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20   combination of
6e40: 76 61 6c 75 65 73 20 75 73 65 64 20 77 68 65 6e  values used when
6e50: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
6e60: 6c 6f 63 61 74 69 6e 67 20 6f 75 74 20 74 68 65  locating out the
6e70: 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69   build output di
6e80: 72 65 63 74 6f 72 79 2c 20 73 68 6f 77 69 6e 67  rectory, showing
6e90: 20 65 61 63 68 20 61 76 61 69 6c 61 62 6c 65 0d   each available.
6ea0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62  .      #       b
6eb0: 75 69 6c 64 20 76 61 72 69 61 74 69 6f 6e 20 61  uild variation a
6ec0: 6c 6f 6e 67 20 74 68 65 20 77 61 79 2e 0d 0a 20  long the way...
6ed0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f       #..      fo
6ee0: 72 65 61 63 68 20 6e 61 74 69 76 65 20 5b 6c 69  reach native [li
6ef0: 73 74 20 66 61 6c 73 65 20 74 72 75 65 5d 20 7b  st false true] {
6f00: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
6f10: 68 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64  h year [getBuild
6f20: 59 65 61 72 73 5d 20 7b 0d 0a 20 20 20 20 20 20  Years] {..
6f30: 20 20 20 20 66 6f 72 65 61 63 68 20 63 6f 6e 66      foreach conf
6f40: 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75  iguration [getBu
6f50: 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ildConfiguration
6f60: 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  s] {..
6f70: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 6f80: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 6f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6fa0: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f 6fb0: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 or System.Data.S 6fc0: 51 4c 69 74 65 20 62 75 69 6c 64 20 5c 22 22 20 QLite build \"" 6fd0: 5b 65 78 70 72 20 5c 0d 0a 20 20 20 20 20 20 20 [expr \.. 6fe0: 20 20 20 20 20 20 20 20 20 7b 24 6e 61 74 69 76 {$nativ
6ff0: 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20  e ? "native/" :
7000: 22 22 7d 5d 20 24 79 65 61 72 20 2f 20 24 63 6f  ""}] $year /$co
7010: 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 5c 22 2e  nfiguration "\".
7020: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .. "]....
7030: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
7040: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
7050: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 6a  me [file join [j
7060: 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72  oinBuildDirector
7070: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y \..
7080: 20 20 20 20 20 24 6e 61 74 69 76 65 20 5b 67 65       $native [ge 7090: 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 tBuildBaseDirect 70a0: 6f 72 79 5d 20 24 79 65 61 72 20 5b 67 65 74 42 ory]$year [getB
70b0: 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 5c 0d 0a  uildPlatform \..
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
70d0: 24 6e 61 74 69 76 65 5d 20 24 63 6f 6e 66 69 67  $native]$config
70e0: 75 72 61 74 69 6f 6e 5d 20 53 79 73 74 65 6d 2e  uration] System.
70f0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d  Data.SQLite.dll]
7100: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
7110: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
7120: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 7130: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 7140: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
7150: 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20  el yes\n..
7160: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
7170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
7180: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\ 7190: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d n.. } 71a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 71b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 71c0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 71d0: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 proc checkForSQ 71e0: 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7d Lite { channel } 71f0: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 {.. tputs 7200: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
7210: 68 65 63 6b 69 6e 67 20 66 6f 72 20 63 6f 72 65  hecking for core
7220: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
7230: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66  .. "....      if
7240: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
7250: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
7260: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
7270: 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d  NonPublic System
7280: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
7290: 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 20 20 20  ite3 \..
72a0: 20 20 20 20 20 20 53 51 4c 69 74 65 56 65 72 73        SQLiteVers
72b0: 69 6f 6e 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d  ion} version] ==
72c0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
72d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
72e0: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
72f0: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73  o query the Foss
7300: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69  il source identi
7310: 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c  fier for the SQL
7320: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ite..        #
7330: 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72       core librar
7340: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
7350: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
7360: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
7370: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
7380: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
7390: 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61  blic System.Data
73a0: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20  .SQLite.SQLite3
73b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
73c0: 20 20 20 53 51 4c 69 74 65 53 6f 75 72 63 65 49     SQLiteSourceI
73d0: 64 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68  d} sourceId]} th
73e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
73f0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
7400: 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74  OTE: We failed t
7410: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73  o query the Foss
7420: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69  il source identi
7430: 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  fier...
7440: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
7450: 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f  t sourceId unkno
7460: 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  wn..        }...
7470: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
7480: 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c      # NOTE: Yes,
7490: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
74a0: 20 6c 69 62 72 61 72 79 20 61 70 70 65 61 72 73   library appears
74b0: 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65   to be available
74c0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
74d0: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
74e0: 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20  int SQLite....
74f0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 7500: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 7510: 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69 6f "yes ("$versio
7520: 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20  n " " $sourceId 7530: 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 ")\n"].. } 7540: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 7550: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e tputs$channel n
7560: 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  o\n..      }..
7570: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
7580: 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44   checkForSQLiteD
7590: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20  efineConstant {
75a0: 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b  channel name } {
75b0: 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63  ..      tputs $c 75c0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 75d0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 75e0: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f 75f0: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 or System.Data.S 7600: 51 4c 69 74 65 20 64 65 66 69 6e 65 20 63 6f 6e QLite define con 7610: 73 74 61 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 stant \""$name
7620: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 5c 22  \..          "\"
7630: 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ... "]....
7640: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
7650: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
7660: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
7670: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74   +NonPublic Syst
7680: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
7690: 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 20  QLite3 \..
76a0: 20 20 20 20 20 20 20 20 44 65 66 69 6e 65 43 6f          DefineCo
76b0: 6e 73 74 61 6e 74 73 7d 20 64 65 66 69 6e 65 43  nstants} defineC
76c0: 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20  onstants] == 0}
76d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
76e0: 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78  if {[lsearch -ex
76f0: 61 63 74 20 2d 6e 6f 63 61 73 65 20 24 64 65 66  act -nocase $def 7700: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 ineConstants$na
7710: 6d 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20  me] != -1} then
7720: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
7730: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
7740: 3a 20 59 65 73 2c 20 74 68 69 73 20 64 65 66 69  : Yes, this defi
7750: 6e 65 20 63 6f 6e 73 74 61 6e 74 20 77 61 73 20  ne constant was
7760: 65 6e 61 62 6c 65 64 20 77 68 65 6e 20 74 68 65  enabled when the
7770: 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20   managed..
7780: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65      #       asse
7790: 6d 62 6c 79 20 77 61 73 20 63 6f 6d 70 69 6c 65  mbly was compile
77a0: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  d...          #.
77b0: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f  .          addCo
77c0: 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
77d0: 41 72 67 73 20 64 65 66 69 6e 65 43 6f 6e 73 74  Args defineConst
77e0: 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e  ant.System.Data.
77f0: 53 51 4c 69 74 65 2e 20 24 6e 61 6d 65 5d 0d 0a  SQLite. $name].. 7800: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 7810: 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e s$channel yes\n
7820: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
7830: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
7840: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\ 7850: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 n.. }.. 7860: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 7870: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
7880: 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e 0d 0a 20 20  nnel error\n..
7890: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
78a0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 61 74  .    proc getDat
78b0: 65 54 69 6d 65 46 6f 72 6d 61 74 20 7b 7d 20 7b  eTimeFormat {} {
78c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
78d0: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72   # NOTE: This pr
78e0: 6f 63 65 64 75 72 65 20 73 69 6d 70 6c 79 20 72  ocedure simply r
78f0: 65 74 75 72 6e 73 20 74 68 65 20 22 64 65 66 61  eturns the "defa
7900: 75 6c 74 22 20 44 61 74 65 54 69 6d 65 20 66 6f  ult" DateTime fo
7910: 72 6d 61 74 20 75 73 65 64 0d 0a 20 20 20 20 20  rmat used..
7920: 20 23 20 20 20 20 20 20 20 62 79 20 74 68 65 20   #       by the
7930: 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20  test suite...
7940: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
7950: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64  [info exists ::d
7960: 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20  atetime_format]
7970: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
7980: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $7990: 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 ::datetime_forma 79a0: 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a t] > 0} then {.. 79b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 79c0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 # NOTE: Retur 79d0: 6e 20 74 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f n the manually o 79e0: 76 65 72 72 69 64 64 65 6e 20 76 61 6c 75 65 20 verridden value 79f0: 66 6f 72 20 74 68 65 20 44 61 74 65 54 69 6d 65 for the DateTime 7a00: 20 66 6f 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20 format... 7a10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 7a20: 75 72 6e 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f urn$::datetime_
7a30: 66 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20  format..      }
7a40: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
7a50: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
7a60: 45 3a 20 52 65 74 75 72 6e 20 61 6e 20 49 53 4f  E: Return an ISO
7a70: 38 36 30 31 20 44 61 74 65 54 69 6d 65 20 66 6f  8601 DateTime fo
7a80: 72 6d 61 74 20 63 6f 6d 70 61 74 69 62 6c 65 20  rmat compatible
7a90: 77 69 74 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20  with SQLite,..
7aa0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 79        #       Sy
7ab0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
7ac0: 2c 20 61 6e 64 20 73 75 69 74 61 62 6c 65 20 66  , and suitable f
7ad0: 6f 72 20 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e  or round-trippin
7ae0: 67 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20  g with the..
7af0: 20 20 20 20 23 20 20 20 20 20 20 20 44 61 74 65      #       Date
7b00: 54 69 6d 65 20 63 6c 61 73 73 20 6f 66 20 74 68  Time class of th
7b10: 65 20 66 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66  e framework.  If
7b20: 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 63   this value is c
7b30: 68 61 6e 67 65 64 2c 0d 0a 20 20 20 20 20 20 20  hanged,..
7b40: 20 23 20 20 20 20 20 20 20 76 61 72 69 6f 75 73   #       various
7b50: 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c 2e   tests may fail.
7b60: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
7b70: 20 20 20 20 20 72 65 74 75 72 6e 20 22 79 79 79       return "yyy
7b80: 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73  y-MM-dd HH:mm:ss
7b90: 2e 46 46 46 46 46 46 46 4b 22 0d 0a 20 20 20 20  .FFFFFFFK"..
7ba0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
7bb0: 20 20 20 70 72 6f 63 20 65 6e 75 6d 65 72 61 62     proc enumerab
7bc0: 6c 65 54 6f 4c 69 73 74 20 7b 20 65 6e 75 6d 65  leToList { enume
7bd0: 72 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20  rable } {..
7be0: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73   set result [lis
7bf0: 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  t]....      if {
7c00: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $7c10: 65 6e 75 6d 65 72 61 62 6c 65 5d 20 3d 3d 20 30 enumerable] == 0 7c20: 20 7c 7c 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 ||$enumerable
7c30: 65 71 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20  eq "null"} then
7c40: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
7c50: 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20  n $result.. 7c60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 }.... obje 7c70: 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 ct foreach -alia 7c80: 73 20 69 74 65 6d 20 24 65 6e 75 6d 65 72 61 62 s item$enumerab
7c90: 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  le {..        if
7ca0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
7cb0: 20 24 69 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65   $item] > 0} the 7cc0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c n {.. l 7cd0: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 append result [$
7ce0: 69 74 65 6d 20 54 6f 53 74 72 69 6e 67 5d 0d 0a  item ToString]..
7cf0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
7d00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
7d10: 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  rn $result.. 7d20: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 7d30: 61 74 63 68 41 6e 64 52 65 74 75 72 6e 20 7b 20 atchAndReturn { 7d40: 73 63 72 69 70 74 20 7b 73 74 61 63 6b 54 72 61 script {stackTra 7d50: 63 65 20 66 61 6c 73 65 7d 20 7b 73 74 72 69 63 ce false} {stric 7d60: 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 t true} } {.. 7d70: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7d80: 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65 TE: Evaluate the 7d90: 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 65 64 script provided 7da0: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 69 by our caller i 7db0: 6e 20 74 68 65 69 72 20 63 6f 6e 74 65 78 74 2c n their context, 7dc0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7dd0: 63 61 70 74 75 72 69 6e 67 20 62 6f 74 68 20 74 capturing both t 7de0: 68 65 20 72 65 73 75 6c 74 20 61 6e 64 20 74 68 he result and th 7df0: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a e return code... 7e00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 7e10: 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b et code [catch { 7e20: 75 70 6c 65 76 65 6c 20 31 20 24 73 63 72 69 70 uplevel 1$scrip
7e30: 74 7d 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20  t} result]....
7e40: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
7e50: 4f 54 45 3a 20 44 69 64 20 74 68 65 20 73 63 72  OTE: Did the scr
7e60: 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 20  ipt provided by
7e70: 6f 75 72 20 63 61 6c 6c 65 72 20 4e 4f 54 20 72  our caller NOT r
7e80: 61 69 73 65 20 61 6e 20 65 72 72 6f 72 3f 0d 0a  aise an error?..
7e90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
7ea0: 66 20 7b 24 73 74 72 69 63 74 20 26 26 20 24 63  f {$strict &&$c
7eb0: 6f 64 65 20 3d 3d 20 30 20 7c 7c 20 21 24 73 74  ode == 0 || !$st 7ec0: 72 69 63 74 20 26 26 20 24 63 6f 64 65 20 21 3d rict &&$code !=
7ed0: 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   1} then {..
7ee0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
7ef0: 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2e 20   NOTE: Success.
7f00: 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77   Return a list w
7f10: 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63  ith the return c
7f20: 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 75  ode and the resu
7f30: 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  lt...        #..
7f40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
7f50: 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75  list $code$resu
7f60: 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  lt]..      } els
7f70: 65 69 66 20 7b 24 73 74 61 63 6b 54 72 61 63 65  eif {$stackTrace 7f80: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 7f90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 7fa0: 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f OTE: Failure. O 7fb0: 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 ur caller wants 7fc0: 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 a full stack tra 7fd0: 63 65 20 28 69 66 20 61 70 70 6c 69 63 61 62 6c ce (if applicabl 7fe0: 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 e),.. # 7ff0: 20 20 20 20 20 72 65 74 75 72 6e 20 61 20 6c 69 return a li 8000: 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74 75 st with the retu 8010: 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 rn code and the 8020: 72 65 73 75 6c 74 20 76 65 72 62 61 74 69 6d 2e result verbatim. 8030: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 8040: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 8050: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d t$code $result] 8060: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 8070: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 8080: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 # NOTE: Fai 8090: 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 lure. Our calle 80a0: 72 20 64 6f 65 73 20 6e 6f 74 20 77 61 6e 74 20 r does not want 80b0: 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 a full stack tra 80c0: 63 65 20 28 69 66 0d 0a 20 20 20 20 20 20 20 20 ce (if.. 80d0: 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 62 # applicab 80e0: 6c 65 29 2c 20 72 65 74 75 72 6e 20 61 20 6c 69 le), return a li 80f0: 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74 75 st with the retu 8100: 72 6e 20 63 6f 64 65 2c 20 74 68 65 20 65 72 72 rn code, the err 8110: 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 or.. # 8120: 20 20 20 20 63 6f 64 65 20 66 6f 72 20 74 68 65 code for the 8130: 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20 61 6e interpreter, an 8140: 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 d the error mess 8150: 61 67 65 20 75 70 20 74 6f 20 74 68 65 0d 0a 20 age up to the.. 8160: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 # p 8170: 6f 69 6e 74 20 77 68 65 72 65 20 74 68 65 20 73 oint where the s 8180: 74 61 63 6b 20 74 72 61 63 65 20 73 68 6f 75 6c tack trace shoul 8190: 64 20 73 74 61 72 74 2e 0d 0a 20 20 20 20 20 20 d start... 81a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 81b0: 20 69 6e 64 65 78 20 5b 73 74 72 69 6e 67 20 66 index [string f 81c0: 69 72 73 74 20 22 20 20 20 61 74 20 22 20 24 72 irst " at "$r
81d0: 65 73 75 6c 74 5d 3b 20 23 20 48 41 43 4b 3a 20  esult]; # HACK:
81e0: 52 65 6c 69 61 62 6c 65 3f 0d 0a 0d 0a 20 20 20  Reliable?....
81f0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
8200: 74 20 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72  t $code$::error
8210: 43 6f 64 65 20 5b 65 78 70 72 20 7b 24 69 6e 64  Code [expr {$ind 8220: 65 78 20 21 3d 20 2d 31 20 3f 20 5c 0d 0a 20 20 ex != -1 ? \.. 8230: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 8240: 67 20 74 72 69 6d 20 5b 73 74 72 69 6e 67 20 72 g trim [string r 8250: 61 6e 67 65 20 24 72 65 73 75 6c 74 20 30 20 24 ange$result 0 $8260: 69 6e 64 65 78 5d 5d 20 3a 20 24 72 65 73 75 6c index]] :$resul
8270: 74 7d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  t}]]..      }..
8280: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
8290: 63 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57  c compileCSharpW
82a0: 69 74 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ith {..
82b0: 20 20 20 74 65 78 74 20 6d 65 6d 6f 72 79 20 73     text memory s
82c0: 79 6d 62 6f 6c 73 20 73 74 72 69 63 74 20 72 65  ymbols strict re
82d0: 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 65 72 72  sultsVarName err
82e0: 6f 72 73 56 61 72 4e 61 6d 65 20 66 69 6c 65 4e  orsVarName fileN
82f0: 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..
8300: 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20    args } {..
8310: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
8320: 45 3a 20 53 69 6e 63 65 20 77 65 20 61 72 65 20  E: Since we are
8330: 67 6f 69 6e 67 20 74 6f 20 75 73 65 20 74 68 69  going to use thi
8340: 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20 61 20  s method name a
8350: 6c 6f 74 2c 20 61 73 73 69 67 6e 20 69 74 20 74  lot, assign it t
8360: 6f 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20  o a..      #
8370: 20 20 20 76 61 72 69 61 62 6c 65 20 66 69 72 73     variable firs
8380: 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  t...      #..
8390: 20 20 20 73 65 74 20 61 64 64 20 52 65 66 65 72     set add Refer
83a0: 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 73 2e  encedAssemblies.
83b0: 41 64 64 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  Add....      #..
83c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72        # NOTE: Cr
83d0: 65 61 74 65 20 74 68 65 20 62 61 73 65 20 63 6f  eate the base co
83e0: 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74  mmand to evaluat
83f0: 65 20 61 6e 64 20 61 64 64 20 74 68 65 20 70 72  e and add the pr
8400: 6f 70 65 72 74 79 20 73 65 74 74 69 6e 67 73 0d  operty settings.
8410: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
8420: 68 61 74 20 61 72 65 20 61 6c 6d 6f 73 74 20 61  hat are almost a
8430: 6c 77 61 79 73 20 6e 65 65 64 65 64 20 62 79 20  lways needed by
8440: 6f 75 72 20 75 6e 69 74 20 74 65 73 74 73 20 28  our unit tests (
8450: 69 2e 65 2e 20 74 68 65 20 53 79 73 74 65 6d 0d  i.e. the System.
8460: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
8470: 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 20 61  nd System.Data a
8480: 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e 63  ssembly referenc
8490: 65 73 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  es)...      #..
84a0: 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64       set command
84b0: 20 5b 6c 69 73 74 20 63 6f 6d 70 69 6c 65 43 53   [list compileCS
84c0: 68 61 72 70 20 24 74 65 78 74 20 24 6d 65 6d 6f  harp $text$memo
84d0: 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73 74 72  ry $symbols$str
84e0: 69 63 74 20 72 65 73 75 6c 74 73 20 5c 0d 0a 20  ict results \..
84f0: 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 73 20           errors
8500: 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c 6c 20  $add System.dll 8510: 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61 74 61$add System.Data
8520: 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d  .dll $add System 8530: 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 .Xml.dll].... 8540: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 8550: 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 68 65 20 TE: Add all the 8560: 70 72 6f 76 69 64 65 64 20 66 69 6c 65 20 6e 61 provided file na 8570: 6d 65 73 20 61 73 20 61 73 73 65 6d 62 6c 79 20 mes as assembly 8580: 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20 20 references... 8590: 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 #.. fore 85a0: 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 69 ach fileName$fi
85b0: 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
85c0: 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61     lappend comma
85d0: 6e 64 20 24 61 64 64 20 5b 67 65 74 42 69 6e 61  nd $add [getBina 85e0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ryFileName$file
85f0: 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  Name]..      }..
8600: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8610: 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65   # NOTE: Add the
8620: 20 65 78 74 72 61 20 61 72 67 75 6d 65 6e 74 73   extra arguments
8630: 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 65  , if any, to the
8640: 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c   command to eval
8650: 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  uate...      #..
8660: 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65        eval lappe
8670: 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73  nd command $args 8680: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 8690: 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 73 # NOTE: Alias 86a0: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 6f the compiler lo 86b0: 63 61 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 20 cal results and 86c0: 65 72 72 6f 72 73 20 76 61 72 69 61 62 6c 65 73 errors variables 86d0: 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 23 to the.. # 86e0: 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 variable 86f0: 6e 61 6d 65 73 20 70 72 6f 76 69 64 65 64 20 62 names provided b 8700: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 y our caller... 8710: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 #.. up 8720: 76 61 72 20 31 20 24 72 65 73 75 6c 74 73 56 61 var 1$resultsVa
8730: 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 0d 0a 20  rName results..
8740: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 65 72       upvar 1 $er 8750: 72 6f 72 73 56 61 72 4e 61 6d 65 20 65 72 72 6f rorsVarName erro 8760: 72 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 rs.... #.. 8770: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 # NOTE: Eva 8780: 6c 75 61 74 65 20 74 68 65 20 63 6f 6e 73 74 72 luate the constr 8790: 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65 43 53 ucted [compileCS 87a0: 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20 61 6e harp] command an 87b0: 64 20 72 65 74 75 72 6e 20 74 68 65 0d 0a 20 20 d return the.. 87c0: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 75 # resu 87d0: 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 lt... #.. 87e0: 20 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d 61 6e eval$comman
87f0: 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  d..    }.....
8800: 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79 44 62   proc isMemoryDb
8810: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d   { fileName } {.
8820: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
8830: 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 73  # NOTE: Is the s
8840: 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73  pecified databas
8850: 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 65 61 6c  e file name real
8860: 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  ly an in-memory
8870: 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 20 20 20  database?..
8880: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
8890: 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e 61 6d   [expr {$fileNam 88a0: 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 e eq ":memory:" 88b0: 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 || \.. 88c0: 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 66 [string range$f
88d0: 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20 65 71  ileName 0 12] eq
88e0: 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 3a 22   "file::memory:"
88f0: 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  }]..    }.....
8900: 20 20 70 72 6f 63 20 65 78 65 63 75 74 65 53 71    proc executeSq
8910: 6c 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 74 65  l { sql {execute
8920: 20 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 6d 65   none} {fileName
8930: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
8940: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
8950: 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d  th $fileName] == 8960: 20 30 7d 20 74 68 65 6e 20 7b 73 65 74 20 66 69 0} then {set fi 8970: 6c 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d leName :memory:} 8980: 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44 62 20 .. setupDb 8990: 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20$fileName "" ""
89a0: 22 22 20 22 22 20 22 22 20 66 61 6c 73 65 20 66  "" "" "" false f
89b0: 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65  alse false false
89c0: 20 6d 65 6d 44 62 0d 0a 0d 0a 20 20 20 20 20 20   memDb....
89d0: 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  try {..        r
89e0: 65 74 75 72 6e 20 5b 73 71 6c 20 65 78 65 63 75  eturn [sql execu
89f0: 74 65 20 2d 65 78 65 63 75 74 65 20 24 65 78 65  te -execute $exe 8a00: 63 75 74 65 20 24 6d 65 6d 44 62 20 24 73 71 6c cute$memDb $sql 8a10: 5d 0d 0a 20 20 20 20 20 20 7d 20 66 69 6e 61 6c ].. } final 8a20: 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6c ly {.. cl 8a30: 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e 61 6d eanupDb$fileNam
8a40: 65 20 6d 65 6d 44 62 20 66 61 6c 73 65 20 66 61  e memDb false fa
8a50: 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  lse..      }..
8a60: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
8a70: 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 20 20   setupDb {..
8a80: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
8a90: 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 74 65   {mode ""} {date
8aa0: 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d 20 7b  TimeFormat ""} {
8ab0: 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 22 7d  dateTimeKind ""}
8ac0: 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 20 20   {flags ""}..
8ad0: 20 20 20 20 20 20 20 20 20 7b 65 78 74 72 61 20           {extra
8ae0: 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75  ""} {qualify tru
8af0: 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d  e} {delete true}
8b00: 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a 20 20   {uri false}..
8b10: 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70 6f            {tempo
8b20: 72 61 72 79 20 74 72 75 65 7d 20 7b 76 61 72 4e  rary true} {varN
8b30: 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20  ame db} } {..
8b40: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
8b50: 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69  TE: First, see i
8b60: 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73  f our caller has
8b70: 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e   requested an in
8b80: 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
8b90: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
8ba0: 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b    set isMemory [
8bb0: 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65  isMemoryDb $file 8bc0: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 Name].... # 8bd0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 8be0: 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 For now, all tes 8bf0: 74 20 64 61 74 61 62 61 73 65 73 20 75 73 65 64 t databases used 8c00: 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 by the test sui 8c10: 74 65 20 61 72 65 20 70 6c 61 63 65 64 0d 0a 20 te are placed.. 8c20: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 # int 8c30: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 64 o the database d 8c40: 69 72 65 63 74 6f 72 79 2e 20 20 45 61 63 68 20 irectory. Each 8c50: 64 61 74 61 62 61 73 65 20 61 6e 64 20 72 65 6c database and rel 8c60: 61 74 65 64 20 66 69 6c 65 73 0d 0a 20 20 20 20 ated files.. 8c70: 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 62 # used b 8c80: 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c 64 20 y a test should 8c90: 62 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62 79 be cleaned up by 8ca0: 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e 67 that test using 8cb0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 8cc0: 20 20 20 20 22 63 6c 65 61 6e 75 70 44 62 22 20 "cleanupDb" 8cd0: 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f 77 procedure, below 8ce0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 8cf0: 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 if {!$isMemory
8d00: 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68   && $qualify} th 8d10: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 en {.. se 8d20: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 t fileName [file 8d30: 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 join [getDataba 8d40: 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 seDirectory] [fi 8d50: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
8d60: 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  e]]..      }....
8d70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
8d80: 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c   NOTE: By defaul
8d90: 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72  t, delete any pr
8da0: 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  e-existing datab
8db0: 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ase with the sam
8dc0: 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 20  e file..      #
8dd0: 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 69 74        name if it
8de0: 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73 74   currently exist
8df0: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
8e00: 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72     if {!$isMemor 8e10: 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 y &&$delete &&
8e20: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 8e30: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 8e40: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8e50: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 8e60: 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 61 6e mpt to delete an 8e70: 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 y pre-existing d 8e80: 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68 65 atabase with the 8e90: 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 same file.. 8ea0: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 # name 8eb0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 8ec0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 8ed0: 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 {file delete$f
8ee0: 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d  ileName} error]}
8ef0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
8f00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
8f10: 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68  # NOTE: We someh
8f20: 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  ow failed to del
8f30: 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65  ete the file, re
8f40: 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20  port why...
8f50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
8f60: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 8f70: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 8f80: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 8f90: 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 8fa0: 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 NG: failed to de 8fb0: 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66 69 lete database fi 8fc0: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
8fd0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
8fe0: 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73 65 74    "\" during set
8ff0: 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  up, error: " \n\
9000: 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 9010: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 9020: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 9030: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 # NOTE: Refer 9040: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 to the specifie 9050: 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e d variable (e.g. 9060: 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f "db") in the co 9070: 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 ntext of our.. 9080: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c # call 9090: 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 er. The handle 90a0: 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20 64 61 to the opened da 90b0: 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20 73 tabase will be s 90c0: 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 tored there... 90d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 #.. upv 90e0: 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 ar 1$varName db
90f0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
9100: 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 74     # NOTE: Start
9110: 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 63 6f   building the co
9120: 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e  nnection string.
9130: 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 69    The only requi
9140: 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20  red portion..
9150: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68     #       of th
9160: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
9170: 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 61 20  ing is the data
9180: 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 63 6f  source, which co
9190: 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 20  ntains the..
91a0: 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61    #       databa
91b0: 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 74 73  se file name its
91c0: 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 61 6c  elf.  If our cal
91d0: 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 73 65  ler wants to use
91e0: 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 20 20   a URI as..
91f0: 20 23 20 20 20 20 20 20 20 74 68 65 20 64 61 74   #       the dat
9200: 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 74 68  a source, use th
9210: 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 63  e FullUri connec
9220: 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70  tion string prop
9230: 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 20 23  erty to..      #
9240: 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 74         prevent t
9250: 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 20 73  he data source s
9260: 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 6e 67  tring from being
9270: 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 20   mangled...
9280: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 75   #..      if {$u 9290: 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ri} then {.. 92a0: 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 set connecti 92b0: 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b 66 69 on {FullUri=${fi
92c0: 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20  leName}}..
92d0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
92e0: 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e    set connection
92f0: 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b   {Data Source=${ 9300: 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 fileName}}.. 9310: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 9320: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 # NOTE: Si 9330: 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65 64 75 nce this procedu 9340: 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63 69 61 re has no specia 9350: 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20 77 l knowledge of w 9360: 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 0d hat the default. 9370: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 9380: 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20 74 68 etting is for th 9390: 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63 6f 6e e ToFullPath con 93a0: 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 nection string p 93b0: 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73 0d 0a ropery, always.. 93c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 64 # ad 93d0: 64 20 74 68 65 20 76 61 6c 75 65 20 77 65 20 6b d the value we k 93e0: 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74 68 65 now about to the 93f0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 9400: 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ng... #.. 9410: 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 append conne 9420: 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61 ction {;ToFullPa 9430: 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a th=${qualify}}..
9440: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
9450: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20   # NOTE: If our
9460: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64  caller specified
9470: 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c   a journal mode,
9480: 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61   add the necessa
9490: 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20  ry portion..
94a0: 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65    #       of the
94b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
94c0: 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23  ng now...      #
94d0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
94e0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 65  ing length $mode 94f0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 9500: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f append co 9510: 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e nnection {;Journ 9520: 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d al Mode=${mode}}
9530: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
9540: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
9550: 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65  TE: If our calle
9560: 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44 61  r specified a Da
9570: 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c 20 61  teTime format, a
9580: 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  dd the necessary
9590: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
95a0: 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63  portion of the c
95b0: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
95c0: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a   now...      #..
95d0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
95e0: 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69  g length $dateTi 95f0: 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 meFormat] > 0} t 9600: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a 9610: 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e ppend connection 9620: 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 {;DateTimeForma 9630: 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d t=${dateTimeForm
9640: 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  at}}..      }...
9650: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
9660: 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63  # NOTE: If our c
9670: 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20  aller specified
9680: 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2c 20  a DateTimeKind,
9690: 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72  add the necessar
96a0: 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20  y portion..
96b0: 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20   #       of the
96c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
96d0: 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d  g now...      #.
96e0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
96f0: 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54  ng length $dateT 9700: 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20 74 68 imeKind] > 0} th 9710: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 en {.. ap 9720: 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 pend connection 9730: 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d 24 {;DateTimeKind=$
9740: 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d  {dateTimeKind}}.
9750: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
9760: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
9770: 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 65 20  E: If there are
9780: 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 72 20  any global (per
9790: 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e 65 63  test run) connec
97a0: 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 72 65  tion flags curre
97b0: 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  ntly..      #
97c0: 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 68 65      set, use the
97d0: 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 20 63  m now (i.e. by c
97e0: 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 77 69  ombining them wi
97f0: 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f 72 20  th the ones for
9800: 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20  this..      #
9810: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e      connection).
9820: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
9830: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
9840: 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66  s ::connection_f
9850: 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20  lags] && \..
9860: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
9870: 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 74 69  ngth $::connecti 9880: 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 on_flags] > 0} t 9890: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 98a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 98b0: 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 : Show (and log) 98c0: 20 74 68 61 74 20 77 65 20 64 65 74 65 63 74 65 that we detecte 98d0: 64 20 73 6f 6d 65 20 67 6c 6f 62 61 6c 20 63 6f d some global co 98e0: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d nnection flags.. 98f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 9900: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
9910: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
9920: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
9930: 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 61       "---- globa
9940: 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  l connection fla
9950: 67 73 20 64 65 74 65 63 74 65 64 3a 20 22 20 24  gs detected: " $9960: 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 ::connection_fla 9970: 67 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 gs \n].... 9980: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 9990: 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 6e 64 OTE: Combine and 99a0: 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68 65 20 /or replace the 99b0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags 99c0: 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 20 74 and then show t 99d0: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 99e0: 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e 0d 0a new value... 99f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 9a00: 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63 6f set flags [co 9a10: 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 67 mbineFlags$flag
9a20: 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f  s $::connection_ 9a30: 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 flags].... 9a40: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
9a50: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
9a60: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
9a70: 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e 65     "---- combine
9a80: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  d connection fla
9a90: 67 73 20 61 72 65 3a 20 22 20 24 66 6c 61 67 73  gs are: " $flags 9aa0: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d \n].. }... 9ab0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9ac0: 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 # NOTE: If our c 9ad0: 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 aller specified 9ae0: 73 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 some SQLiteConne 9af0: 63 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 ctionFlags, add 9b00: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 9b10: 20 20 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 necessary por 9b20: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e tion of the conn 9b30: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f ection string no 9b40: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 w... #.. 9b50: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 9b60: 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 ength$flags] >
9b70: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
9b80: 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63     append connec
9b90: 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66  tion {;Flags=${f 9ba0: 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d lags}}.. }. 9bb0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 9bc0: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 # NOTE: If our 9bd0: 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 caller specifie 9be0: 64 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f d an extra paylo 9bf0: 61 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 ad to the connec 9c00: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 tion.. # 9c10: 20 20 20 20 73 74 72 69 6e 67 2c 20 61 70 70 65 string, appe 9c20: 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 nd it now... 9c30: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 9c40: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 string length$e
9c50: 78 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20  xtra] > 0} then
9c60: 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  {..        appen
9c70: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20  d connection \;
9c80: 24 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d  $extra.. }. 9c90: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 9ca0: 20 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 # NOTE: Open t 9cb0: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e he database conn 9cc0: 65 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 ection now, plac 9cd0: 69 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 ing the opaque h 9ce0: 61 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 andle value.. 9cf0: 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 # into 9d00: 74 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 the variable spe 9d10: 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 cified by our ca 9d20: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ller... #.. 9d30: 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 set db [sq 9d40: 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c l open -type SQL 9d50: 69 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e ite [subst$conn
9d60: 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20  ection]]....
9d70: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
9d80: 45 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65  E: Configure the
9d90: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
9da0: 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77  tory for the new
9db0: 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61  ly opened databa
9dc0: 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  se..      #
9dd0: 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77    connection now
9de0: 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c   unless our call
9df0: 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a  er forbids it...
9e00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
9e10: 66 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26  f {$temporary && 9e20: 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a ![info exists : 9e30: 3a 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 :no(setTemporary 9e40: 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 Directory)]} the 9e50: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c n {.. sql 9e60: 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 execute$db [ap
9e70: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
9e80: 20 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20          "PRAGMA
9e90: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
9ea0: 74 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54  tory = \"" [getT
9eb0: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72  emporaryDirector
9ec0: 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20  y] \"\;]..
9ed0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
9ee0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61      # NOTE: Alwa
9ef0: 79 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f  ys return the co
9f00: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle
9f10: 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20  upon success...
9f20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
9f30: 74 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d  turn $db.. }. 9f40: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 9f50: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b DbConnection { { 9f60: 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d varName db} } {. 9f70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9f80: 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f # NOTE: Refer to 9f90: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 the specified v 9fa0: 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 ariable (e.g. "d 9fb0: 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 b") in the conte 9fc0: 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 xt of our.. 9fd0: 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e # caller. 9fe0: 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 The handle to 9ff0: 74 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 the database pre a000: 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 viously opened v a010: 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 ia the.. # a020: 20 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 [setupDb] a030: 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 procedure should a040: 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 be stored there a050: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. a060: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
a070: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23  me db....      #
a080: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
a090: 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65  This returns the
a0a0: 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e   ADO.NET IDbConn
a0b0: 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e  ection object in
a0c0: 73 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a  stance for the..
a0d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 70        #       sp
a0e0: 65 63 69 66 69 65 64 20 64 61 74 61 62 73 65 20  ecified databse
a0f0: 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67  handle.  Since g
a100: 65 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65  etting this obje
a110: 63 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a  ct relies upon..
a120: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61        #       Ea
a130: 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67  gle internals, g
a140: 72 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64  reat care should
a150: 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f   be taken to avo
a160: 69 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d  id disposing of.
a170: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
a180: 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74  his object or ot
a190: 68 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 20  herwise putting
a1a0: 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c  it into an inval
a1b0: 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20  id state...
a1c0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
a1d0: 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20  nfo exists db]}
a1e0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a1f0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
a200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
a210: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
a220: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f  gs +NonPublic -o
a230: 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69  bjectflags +NoDi
a240: 73 70 6f 73 65 20 5c 0d 0a 20 20 20 20 20 20 20  spose \..
a250: 20 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20           -alias
a260: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
a270: 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e  ctive.connection
a280: 73 20 49 74 65 6d 20 24 64 62 7d 20 5c 0d 0a 20  s Item $db} \.. a290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r a2a0: 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the a2b0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # a2c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO a2d0: 54 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74 TE: Success, ret a2e0: 75 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f urn the opaque o a2f0: 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 bject handle... a300: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. a310: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
a320: 73 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20  sult..        }
a330: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
a340: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
a350: 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20   NOTE: Failure,
a360: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
a370: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
a380: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a390: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a3a0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a3b0: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR a3c0: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to a3d0: 67 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 get connection h a3e0: 61 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61 andle for databa a3f0: 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 se \"" \.. a400: 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c$db "\",
a410: 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $a420: 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 result \n].. a430: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. a440: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr a450: 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 oc freeDbConnect a460: 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63 ion { {varName c a470: 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a onnection} } {.. a480: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # a490: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 NOTE: Refer to a4a0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 the specified va a4b0: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f riable (e.g. "co a4c0: 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 nnection") in th a4d0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # a4e0: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 context of our a4f0: 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 caller. The opa a500: 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c que object handl a510: 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54 e for an ADO.NET a520: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # a530: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 connection previ a540: 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62 ously returned b a550: 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 y [getDbConnecti a560: 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 on] should be.. a570: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74 6f # sto a580: 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 red there... a590: 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar a5a0: 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 1$varName conn
a5b0: 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  ection....
a5c0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
a5d0: 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f   Attempt to remo
a5e0: 76 65 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62  ve the opaque ob
a5f0: 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d  ject handle from
a600: 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
a610: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
a620: 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65  now.  This [obje
a630: 63 74 20 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c  ct dispose] call
a640: 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c   will not actual
a650: 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68  ly dispose of th
a660: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
a670: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65   underlying obje
a680: 63 74 20 62 65 63 61 75 73 65 20 74 68 65 20 2b  ct because the +
a690: 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 20 77  NoDispose flag w
a6a0: 61 73 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20  as set on it..
a6b0: 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69      #       duri
a6c0: 6e 67 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 74  ng creation of t
a6d0: 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74  he opaque object
a6e0: 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20   handle...
a6f0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
a700: 66 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 63  fo exists connec
a710: 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tion] && \..
a720: 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62        [catch {ob
a730: 6a 65 63 74 20 64 69 73 70 6f 73 65 20 24 63 6f  ject dispose $co a740: 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d nnection} error] a750: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. a760: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N a770: 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 OTE: We somehow a780: 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 failed to remove a790: 20 74 68 65 20 68 61 6e 64 6c 65 2c 20 72 65 70 the handle, rep a7a0: 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 ort why... a7b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu a7c0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
a7d0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
a7e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d  ..            "=
a7f0: 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
a800: 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f  led to remove co
a810: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle
a820: 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  \"" $connection a830: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " a840: 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c \", error: " \n\ a850: 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
a860: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
a870: 0a 20 20 20 20 70 72 6f 63 20 61 64 64 44 62 43  .    proc addDbC
a880: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e  onnection { conn
a890: 65 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20  ection {varName
a8a0: 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  db} } {..      #
a8b0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
a8c0: 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65  Refer to the spe
a8d0: 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20  cified variable
a8e0: 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74  (e.g. "db") in t
a8f0: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75  he context of ou
a900: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
a910: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...
a920: 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  #..      upvar 1
a930: 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a   $varName db.... a940: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # a950: 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 61 20 NOTE: Create a a960: 63 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74 correctly format a970: 74 65 64 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 ted name for the a980: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 database connec a990: 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23 tion to.. # a9a0: 20 20 20 20 20 20 20 62 65 20 61 64 64 65 64 20 be added a9b0: 74 6f 20 74 68 65 20 6c 69 73 74 20 6d 61 6e 61 to the list mana a9c0: 67 65 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 ged by the Eagle a9d0: 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 interpreter... a9e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se a9f0: 74 20 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76 t db [object inv aa00: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP aa10: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. aa20: 20 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e Eagle._Compon aa30: 65 6e 74 73 2e 50 72 69 76 61 74 65 2e 46 6f 72 ents.Private.For aa40: 6d 61 74 4f 70 73 20 44 61 74 61 62 61 73 65 4f matOps DatabaseO aa50: 62 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 bjectName$conne
aa60: 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20  ction \..
aa70: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
aa80: 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  ion [object invo
aa90: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
aaa0: 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d  etActive NextId]
aab0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
aac0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20      # NOTE: Add
aad0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
aae0: 6e 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64  nection provided
aaf0: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 74   by our caller t
ab00: 6f 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20  o the list..
ab10: 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 6f    #       of tho
ab20: 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20  se known to the
ab30: 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65  Eagle interprete
ab40: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  r...      #..
ab50: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
ab60: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
ab70: 69 63 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ic Interpreter.G
ab80: 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74  etActive.connect
ab90: 69 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 20  ions Add \..
aba0: 20 20 20 20 20 20 24 64 62 20 24 63 6f 6e 6e 65        $db$conne
abb0: 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  ction..    }....
abc0: 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75  .    proc cleanu
abd0: 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  pDb { fileName {
abe0: 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f 6c  varName db} {col
abf0: 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 6c  lect true} {qual
ac00: 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 20  ify true}..
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ac20: 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d 20  {delete true} }
ac30: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
ac40: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
ac50: 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70  t to force all p
ac60: 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22  ending "garbage"
ac70: 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63   objects to be c
ac80: 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20  ollected,..
ac90: 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69   #       includi
aca0: 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d  ng SQLite statem
acb0: 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20  ents and backup
acc0: 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68  objects; this sh
acd0: 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20  ould allow..
ace0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e    #       the un
acf0: 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73  derlying databas
ad00: 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c  e file to be del
ad10: 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  eted...      #..
ad20: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65        if {$colle ad30: 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ct} then {.. ad40: 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 collectGarba ad50: 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ge$::test_chann
ad60: 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  el..      }....
ad70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
ad80: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
ad90: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
ada0: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22  iable (e.g. "db"
adb0: 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  ) in the context
adc0: 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23   of our..      #
add0: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20         caller.
ade0: 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68  The handle to th
adf0: 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69  e database previ
ae00: 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61  ously opened via
ae10: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
ae20: 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72      [setupDb] pr
ae30: 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62  ocedure should b
ae40: 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d  e stored there..
ae50: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
ae60: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName ae70: 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a db.... #.. ae80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6c # NOTE: Cl ae90: 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 ose the connecti aea0: 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 on to the databa aeb0: 73 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73 68 se now. This sh aec0: 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a 20 ould allow us.. aed0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to aee0: 64 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65 72 delete the under aef0: 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 lying database f af00: 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ile... #.. af10: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e af20: 78 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63 61 xists db] && [ca af30: 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 tch {sql close$
af40: 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e  db} error]} then
af50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
af60: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57         # NOTE: W
af70: 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64  e somehow failed
af80: 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64 61   to close the da
af90: 74 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20 77  tabase, report w
afa0: 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  hy...        #..
afb0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: afc0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a afd0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. afe0: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W aff0: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t b000: 6f 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73 65 o close database b010: 20 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65 72 \""$db "\", er
b020: 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ror: " \..
b030: 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f        \n\t $erro b040: 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a r \n].. }.. b050: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. b060: 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 # NOTE: First, b070: 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 see if our calle b080: 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20 r has requested b090: 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 an in-memory dat b0a0: 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d abase... #. b0b0: 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d . set isMem b0c0: 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 ory [isMemoryDb b0d0: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20$fileName]....
b0e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
b0f0: 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66  OTE: Build the f
b100: 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65 20  ull path to the
b110: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61  database file na
b120: 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61 6c  me.  For now, al
b130: 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23 20  l test..      #
b140: 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66        database f
b150: 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64 20  iles are stored
b160: 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  in the temporary
b170: 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20   directory...
b180: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
b190: 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71  !$isMemory &&$q
b1a0: 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a  ualify} then {..
b1b0: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
b1c0: 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  Name [file join
b1d0: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
b1e0: 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69  ctory] [file tai
b1f0: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20  l $fileName]].. b200: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... b210: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: b220: 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 Check if the fi b230: 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e le still exists. b240: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. b250: 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 if {!$isMemory
b260: 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b 66  && $delete && [f b270: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 ile exists$file
b280: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
b290: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
b2a0: 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64    # NOTE: Skip d
b2b0: 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65  eleting database
b2c0: 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f   files if somebo
b2d0: 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62  dy sets the glob
b2e0: 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  al..        #
b2f0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f 20      variable to
b300: 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20  prevent it...
b310: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b320: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
b330: 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44 62  s ::no(cleanupDb
b340: 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  File)]} then {..
b350: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
b360: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
b370: 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65  ttempt to delete
b380: 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61   the test databa
b390: 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20  se file now...
b3a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
b3b0: 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f       if {[set co
b3c0: 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20  de [catch {file
b3d0: 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65  delete $fileName b3e0: 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 } error]]} then b3f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {.. # b400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # b410: 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 NOTE: We somehow b420: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet b430: 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f e the file, repo b440: 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... b450: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. b460: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
b470: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
b480: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
b490: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
b4a0: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
b4b0: 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73  o delete databas
b4c0: 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  e file \"" $file b4d0: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. b4e0: 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 "\" duri b4f0: 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f ng cleanup, erro b500: 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
b510: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
b520: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
b530: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  e {..          #
b540: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
b550: 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65  TE: Show that we
b560: 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e   skipped deletin
b570: 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20  g the file...
b580: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
b590: 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a      set code 0..
b5a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
b5b0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe b5c0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. b5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " b5e0: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b ==== WARNING: sk b5f0: 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 64 ipped deleting d b600: 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 atabase file \"" b610: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
b620: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
b630: 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e  during cleanup\n
b640: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  "]..        }..
b650: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
b660: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
b670: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69    # NOTE: The fi
b680: 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  le does not exis
b690: 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20  t, success!..
b6a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b6b0: 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20  set code 0..
b6c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
b6d0: 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d  urn $code.. } b6e0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 ..... proc se b6f0: 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 tupDbInterruptCa b700: 6c 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c llback { channel b710: 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 log } {.. b720: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
b730: 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20  ---- setting up
b740: 64 65 62 75 67 67 65 72 20 69 6e 74 65 72 72 75  debugger interru
b750: 70 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22  pt callback... "
b760: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
b770: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
b780: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
b790: 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  E: Make sure the
b7a0: 20 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72   script debugger
b7b0: 20 61 6e 64 20 74 68 65 20 69 73 6f 6c 61 74 65   and the isolate
b7c0: 64 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 72  d interpreter ar
b7d0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
b7e0: 20 20 20 73 65 74 75 70 20 61 6e 64 20 72 65 61     setup and rea
b7f0: 64 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20  dy for use...
b800: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b810: 64 65 62 75 67 20 73 65 74 75 70 20 74 72 75 65  debug setup true
b820: 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20   true....
b830: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
b840: 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63  TE: Load the nec
b850: 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20  essary packages
b860: 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65  into the isolate
b870: 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  d interpreter...
b880: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
b890: 20 20 20 64 65 62 75 67 20 65 76 61 6c 20 7b 0d     debug eval {.
b8a0: 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61  .          packa
b8b0: 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65  ge require Eagle
b8c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 6b  ..          pack
b8d0: 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c  age require Eagl
b8e0: 65 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 20 20  e.Library..
b8f0: 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71       package req
b900: 75 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d  uire Eagle.Test.
b910: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
b920: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b930: 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68   # NOTE: Copy th
b940: 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69  e necessary vari
b950: 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69  ables into the i
b960: 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65  solated interpre
b970: 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ter...        #.
b980: 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69  .        debug i
b990: 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65  nvoke 0 set ::te
b9a0: 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 61 6e  st_channel $chan b9b0: 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 nel; # NOTE: For b9c0: 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20 20 20 [tputs]... b9d0: 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 debug invoke b9e0: 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 0 set ::test_log b9f0: 20 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a 20 46$log; # NOTE: F
ba00: 6f 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20  or [tlog].....
ba10: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
ba20: 20 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c   # NOTE: Install
ba30: 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 63   the callback sc
ba40: 72 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c 75  ript to be evalu
ba50: 61 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f 6c  ated in the isol
ba60: 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20  ated..        #
ba70: 20 20 20 20 20 20 69 6e 74 65 72 70 72 65 74 65        interprete
ba80: 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74 65  r when this inte
ba90: 72 70 72 65 74 65 72 20 69 73 20 69 6e 74 65 72  rpreter is inter
baa0: 72 75 70 74 65 64 20 62 79 20 73 63 72 69 70 74  rupted by script
bab0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
bac0: 20 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20    cancellation,
bad0: 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  etc...        #.
bae0: 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 63  .        debug c
baf0: 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b 7b  allback apply {{
bb00: 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 20  sender e} {..
bb10: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
bb20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
bb30: 6b 20 69 66 20 74 68 69 73 20 63 61 6c 6c 62 61  k if this callba
bb40: 63 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77  ck is one that w
bb50: 65 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20  e care about...
bb60: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
bb70: 20 20 20 20 20 20 69 66 20 7b 22 43 61 6e 63 65        if {"Cance
bb80: 6c 65 64 22 20 69 6e 20 5b 73 70 6c 69 74 20 5b  led" in [split [
bb90: 24 65 20 49 6e 74 65 72 72 75 70 74 54 79 70 65  $e InterruptType bba0: 5d 20 22 2c 20 22 5d 7d 20 74 68 65 6e 20 7b 0d ] ", "]} then {. bbb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. bbc0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO bbd0: 54 45 3a 20 49 74 65 72 61 74 65 20 74 68 72 6f TE: Iterate thro bbe0: 75 67 68 20 61 6c 6c 20 64 61 74 61 62 61 73 65 ugh all database bbf0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f connections kno bc00: 77 6e 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 wn to the.. bc10: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 # p bc20: 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 65 arent interprete bc30: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 r... bc40: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f #.. o bc50: 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 bject foreach -a bc60: 6c 69 61 73 20 70 61 69 72 20 5c 0d 0a 20 20 20 lias pair \.. bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 [ob bc80: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla bc90: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 24 65 gs +NonPublic$e
bca0: 20 49 6e 74 65 72 70 72 65 74 65 72 2e 63 6f 6e   Interpreter.con
bcb0: 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20  nections] {..
bcc0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
bcd0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
bce0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63  TE: Attempt to c
bcf0: 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75  ancel any SQL qu
bd00: 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73  eries in progres
bd10: 73 20 6f 6e 20 74 68 69 73 0d 0a 20 20 20 20 20  s on this..
bd20: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
bd30: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
bd40: 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20  tion...
bd50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
bd60: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
bd70: 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43 61   {$pair Value.Ca bd80: 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 20 21 3d 20 ncel} error] != bd90: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. bda0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs bdb0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
bdc0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20   [appendArgs \n
bdd0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
bde0: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
bdf0: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
be00: 63 61 6e 63 65 6c 20 71 75 65 72 79 20 66 6f 72  cancel query for
be10: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22 22 20   connection \""
be20: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
be30: 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 4b 65         [$pair Ke be40: 79 5d 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 y] "\", error: " be50: 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
be60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
be70: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
be80: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
be90: 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 20 20         }}..
bea0: 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20   } error] == 0}
beb0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
bec0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 69 6e  addConstraint in
bed0: 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 2e  terruptCallback.
bee0: 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20 20 20  sqlite3....
bef0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe bf00: 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d l yes\n.. } bf10: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. bf20: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
bf30: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e 6f 2c  [appendArgs "no,
bf40: 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $bf50: 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. bf60: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... bf70: 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 46 69 proc cleanupFi bf80: 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 63 le { fileName {c bf90: 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 66 6f ollect true} {fo bfa0: 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a rce false} } {.. bfb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # bfc0: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t bfd0: 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 o force all pend bfe0: 69 6e 67 20 22 67 61 72 62 61 67 65 22 20 6f 62 ing "garbage" ob bff0: 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c jects to be coll c000: 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 ected,.. # c010: 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 including c020: 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65 6e 74 SQLite statement c030: 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a s and backup obj c040: 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f 75 6c ects; this shoul c050: 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 d allow.. # c060: 20 20 20 20 20 20 20 74 68 65 20 75 6e 64 65 72 the under c070: 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 lying database f c080: 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65 ile to be delete c090: 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. c0a0: 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d if {$collect}
c0b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
c0c0: 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20   collectGarbage
c0d0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. c0e0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... c0f0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT c100: 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 E: Check if the c110: 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 file still exist c120: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. c130: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 if {[file exi c140: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
c150: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
c160: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
c170: 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67  E: Skip deleting
c180: 20 74 65 73 74 20 66 69 6c 65 73 20 69 66 20 73   test files if s
c190: 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65  omebody sets the
c1a0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
c1b0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
c1c0: 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e    to prevent it.
c1d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
c1e0: 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20       if {$force c1f0: 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 || ![info exists c200: 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46 69 6c ::no(cleanupFil c210: 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 e)]} then {.. c220: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. c230: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte c240: 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 mpt to delete th c250: 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f 77 2e e test file now. c260: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. c270: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 if {[se c280: 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 t code [catch {f c290: 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 ile delete$file
c2a0: 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74  Name} error]]} t
c2b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
c2c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
c2d0: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d    # NOTE: We som
c2e0: 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64  ehow failed to d
c2f0: 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20  elete the file,
c300: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
c310: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
c320: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: c330: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a c340: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== c360: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail c370: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 65 73 ed to delete tes c380: 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 t file \""$file
c390: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
c3a0: 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69          "\" duri
c3b0: 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f  ng cleanup, erro
c3c0: 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error c3d0: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. c3e0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els c3f0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 e {.. # c400: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO c410: 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 TE: Show that we c420: 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e skipped deletin c430: 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 g the file... c440: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. c450: 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a set code 0.. c460: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput c470: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
c480: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
c490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
c4a0: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b  ==== WARNING: sk
c4b0: 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74  ipped deleting t
c4c0: 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69  est file \"" $fi c4d0: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. c4e0: 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 "\" duri c4f0: 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a ng cleanup\n"].. c500: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. c510: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. c520: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # c530: 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64 NOTE: The file d c540: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 oes not exist, s c550: 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20 uccess!.. c560: 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set c570: 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d code 0.. }. c580: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return c590: 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d$code..    }....
c5a0: 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c 6c 65 63  .    proc collec
c5b0: 74 47 61 72 62 61 67 65 20 7b 20 63 68 61 6e 6e  tGarbage { chann
c5c0: 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 73  el {milliseconds
c5d0: 20 31 30 30 30 7d 20 7b 71 75 69 65 74 20 74 72   1000} {quiet tr
c5e0: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69  ue} } {..      i
c5f0: 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63  f {[catch {objec
c600: 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54  t invoke GC GetT
c610: 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65  otalMemory false
c620: 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20  } result] == 0}
c630: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
c640: 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the c650: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t c660: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
c670: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
c680: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
c690: 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62   memory in use b
c6a0: 79 20 74 68 65 20 43 4c 52 20 62 65 66 6f 72 65  y the CLR before
c6b0: 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22   collection... "
c6c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
c6d0: 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65    $result " byte c6e0: 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d s\n"].. } c6f0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { c700: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs c710: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
c720: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
c730: 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
c740: 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74  G: failed to get
c750: 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67   CLR memory usag
c760: 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20  e, error: " \..
c770: 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
c780: 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. c790: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 }.... ## c7a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ c7b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ c7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ c7d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ c7e0: 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 #######.... c7f0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE c800: 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61 74 74 : Repeatedly att c810: 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 empt to collect c820: 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20 74 68 garbage until th c830: 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62 65 e allotted numbe c840: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # c850: 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 of milliseconds c860: 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20 20 41 has elapsed. A c870: 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20 74 6f lways attempt to c880: 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 collect garbage c890: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # c8a0: 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d 0a at least once... c8b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s c8c0: 65 74 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20 et start [clock c8d0: 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 seconds].. c8e0: 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72 20 7b set stop [expr { c8f0: 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c 6c 69$start + ($milli c900: 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 29 7d seconds / 1000)} c910: 5d 0d 0a 0d 0a 20 20 20 20 20 20 64 6f 20 7b 0d ].... do {. c920: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. c930: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte c940: 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 20 66 mpt to force a f c950: 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c ull garbage coll c960: 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 ection now. Rep c970: 6f 72 74 20 61 6e 79 0d 0a 20 20 20 20 20 20 20 ort any.. c980: 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 20 74 # error t c990: 68 61 74 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 hat is encounter c9a0: 65 64 20 69 66 20 77 65 20 66 61 69 6c 2e 0d 0a ed if we fail... c9b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. c9c0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f if {[catch {o c9d0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 bject invoke GC c9e0: 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 GetTotalMemory t c9f0: 72 75 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 rue} error]} the ca00: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t ca10: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
ca20: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
ca30: 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
ca40: 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
ca50: 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f   full garbage co
ca60: 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72 3a  llection, error:
ca70: 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
ca80: 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20      \n\t $error ca90: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. caa0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f .. set no cab0: 77 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 w [clock seconds cac0: 5d 0d 0a 20 20 20 20 20 20 7d 20 77 68 69 6c 65 ].. } while cad0: 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e 6f 77 {$start <= $now cae0: 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74 6f 70 &&$now < $stop caf0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23 }.... ##### cb00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ cb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ cb20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ cb30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ cb40: 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ####.... if cb50: 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 {[catch {object cb60: 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f invoke GC GetTo cb70: 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 7d talMemory false} cb80: 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 result] == 0} t cb90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i cba0: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
cbb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
cbc0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap cbd0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. cbe0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- cbf0: 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 memory in use by cc00: 20 74 68 65 20 43 4c 52 20 61 66 74 65 72 20 63 the CLR after c cc10: 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c ollection... " \ cc20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. cc30: 24 72 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c$result " bytes\
cc40: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n"]..        }..
cc50: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
cc60: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c cc70: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr cc80: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. cc90: 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: cca0: 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 failed to get C ccb0: 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c LR memory usage, ccc0: 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 error: " \.. ccd0: 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 \n\t$r
cce0: 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
ccf0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
cd00: 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65    proc getSQLite
cd10: 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 7b 20 63  HandleCounts { c
cd20: 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61  hannel {quiet fa
cd30: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
cd40: 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  set result [list
cd50: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
cd60: 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c  haveConstraint \
cd70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
cd80: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53  defineConstant.S
cd90: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
cda0: 65 2e 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d  e.COUNT_HANDLE]}
cdb0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
cdc0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
cdd0: 54 45 3a 20 41 64 64 20 65 61 63 68 20 63 72 69  TE: Add each cri
cde0: 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75  tical handle cou
cdf0: 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  nt to the result
ce00: 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20  ing list...
ce10: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f     #..        fo
ce20: 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69 73 74  reach name [list
ce30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75 6e 74   connectionCount
ce40: 20 73 74 61 74 65 6d 65 6e 74 43 6f 75 6e 74 20   statementCount
ce50: 62 61 63 6b 75 70 43 6f 75 6e 74 5d 20 7b 0d 0a  backupCount] {..
ce60: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61            set va
ce70: 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  lue [object invo
ce80: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
ce90: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
cea0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
ceb0: 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
cec0: 61 74 69 76 65 4d 65 74 68 6f 64 73 20 24 6e 61  ativeMethods $na ced0: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 me].... cee0: 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
cef0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
cf00: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel cf10: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. cf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 cf30: 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 "---- critical h cf40: 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20 andle count \"" cf50: 24 6e 61 6d 65 20 22 5c 22 20 69 73 20 22 20 24$name "\" is " $cf60: 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 value \n].. cf70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... cf80: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu cf90: 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 lt$value..
cfa0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
cfb0: 73 65 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74  seif {!$quiet} t cfc0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # cfd0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE cfe0: 3a 20 54 68 65 20 61 63 74 75 61 6c 20 68 61 6e : The actual han cff0: 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 20 6e dle counts are n d000: 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 74 68 ot available; th d010: 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d 0a 20 erefore, just.. d020: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 # r d030: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 6c eturn an empty l d040: 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ist... #. d050: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
d060: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72  channel "---- cr
d070: 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f  itical handle co
d080: 75 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  unts unavailable
d090: 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  \n"..      }....
d0a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re d0b0: 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a sult.. }..... d0c0: 20 20 20 20 70 72 6f 63 20 73 68 75 74 64 6f 77 proc shutdow d0d0: 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65 nSQLite { channe d0e0: 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 l {force false} d0f0: 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 {quiet false} } d100: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. d110: 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 # NOTE: Make s d120: 75 72 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 ure that SQLite d130: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 core library is d140: 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 74 64 completely shutd d150: 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 own. This.. d160: 20 20 23 20 20 20 20 20 20 20 69 73 20 75 73 65 # is use d170: 64 20 62 79 20 74 65 73 74 73 20 74 68 61 74 20 d by tests that d180: 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 72 61 change configura d190: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 6e 64 tion options and d1a0: 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 /or those.. d1b0: 20 23 20 20 20 20 20 20 20 74 68 61 74 20 6e 65 # that ne d1c0: 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 ed to make sure d1d0: 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 74 69 logging is initi d1e0: 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a 75 73 alized (i.e. jus d1f0: 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 20 20 t in case.. d200: 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c # the SQL d210: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library d220: 20 77 61 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 was initialized d230: 20 69 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20 in the process d240: 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 prior to.. d250: 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 # the SQLi d260: 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 69 6e teLog class bein d270: 67 20 61 62 6c 65 20 74 6f 20 73 65 74 75 70 20 g able to setup d280: 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c its logging call d290: 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 23 20 back)... # d2a0: 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 Normally, d2b0: 74 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 this should only d2c0: 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 be performed if d2d0: 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 SQLite is loade d2e0: 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 d and.. # d2f0: 20 20 20 20 20 72 65 61 64 79 20 66 6f 72 20 75 ready for u d300: 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 se by the test s d310: 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a uite... #.. d320: 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 if {$force
d330: 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 65 61   || [isSQLiteRea
d340: 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  dy]} then {..
d350: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
d360: 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65  # BUGFIX: Before
d370: 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74   calling the nat
d380: 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e  ive shutdown fun
d390: 63 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75 72 65  ction, make sure
d3a0: 20 62 6f 74 68 0d 0a 20 20 20 20 20 20 20 20 23   both..        #
d3b0: 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the
d3c0: 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64  PRAGMA related d
d3d0: 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61  irectory names a
d3e0: 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20  re freed...
d3f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
d400: 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65  eckForSQLiteDire
d410: 63 74 6f 72 69 65 73 20 24 63 68 61 6e 6e 65 6c  ctories $channel d420: 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 true.... d430: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a if {[catch {obj d440: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag d450: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 d470: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi d480: 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d te.UnsafeNativeM d490: 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 ethods \.. d4a0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 sqlite d4b0: 33 5f 73 68 75 74 64 6f 77 6e 7d 20 72 65 73 75 3_shutdown} resu d4c0: 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b lt] == 0} then { d4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { d4e0: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
d4f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
d500: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app d510: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. d520: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- d530: 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 call sqlite3_sh d540: 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 utdown()... ok: d550: 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 "$result \n]..
d560: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
d570: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
d580: 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu d590: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. d5a0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
d5b0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
d5c0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
d5d0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c         "---- cal
d5e0: 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f  l sqlite3_shutdo
d5f0: 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22  wn()... error: "
d600: 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n d610: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. d620: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. d630: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... d640: 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53 51 4c proc reportSQL d650: 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b 20 63 iteResources { c d660: 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 hannel {quiet fa d670: 6c 73 65 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 lse} {collect tr d680: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ue} } {.. # d690: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: d6a0: 53 6b 69 70 20 61 6c 6c 20 6f 75 74 70 75 74 20 Skip all output d6b0: 69 66 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e if we are runnin d6c0: 67 20 69 6e 20 22 71 75 69 65 74 22 20 6d 6f 64 g in "quiet" mod d6d0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. d6e0: 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 if {[haveCons d6f0: 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 traint \.. d700: 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f defineCo d710: 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 nstant.System.Da d720: 74 61 2e 53 51 4c 69 74 65 2e 54 52 41 43 4b 5f ta.SQLite.TRACK_ d730: 4d 45 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 MEMORY_BYTES]} t d740: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i d750: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
d760: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
d770: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- d780: 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 -- current memor d790: 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 y in use by SQLi d7a0: 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 teMemory... ".. d7b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... d7c0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { d7d0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f d7e0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic d7f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. d800: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S d810: 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f QLite.SQLiteMemo d820: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. d830: 20 20 20 20 20 20 62 79 74 65 73 41 6c 6c 6f 63 bytesAlloc d840: 61 74 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d ated} memory] == d850: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. d860: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
d870: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
d880: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch d890: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg d8a0: 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 s$memory " byte
d8b0: 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  s\n"]..
d8c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
d8d0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
d8e0: 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f  set memory unkno
d8f0: 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  wn....
d900: 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the d910: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. d920: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
d930: 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem d940: 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. d950: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. d960: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! d970: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
d980: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
d990: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d  $channel "---- m d9a0: 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e aximum memory in d9b0: 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 use by SQLiteMe d9c0: 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 mory... ".. d9d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... d9e0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 if {[catch {obje d9f0: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags da00: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S da20: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit da30: 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 5c e.SQLiteMemory \ da40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. da50: 20 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c maximumBytesAl da60: 6c 6f 63 61 74 65 64 7d 20 6d 65 6d 6f 72 79 5d located} memory] da70: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. da80: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
da90: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
daa0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
dab0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append dac0: 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 Args$memory " b
dad0: 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  ytes\n"]..
dae0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
daf0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
db00: 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e     set memory un
db10: 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  known....
db20: 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} db30: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. db40: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
db50: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $db60: 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. db70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. db80: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... db90: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
dba0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
dbb0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel dbc0: 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d "---- current m dbd0: 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by dbe0: 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 SQLite... ".. dbf0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if dc00: 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 {[catch {object dc10: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + dc20: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. dc30: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste dc40: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e m.Data.SQLite.Un dc50: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 safeNativeMethod dc60: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. dc70: 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 sqlite3_memor dc80: 79 5f 75 73 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 y_used} memory] dc90: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. dca0: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
dcb0: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
dcc0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan dcd0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs dce0: 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c$memory " bytes\
dcf0: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n"]..        }..
dd00: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
dd10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
dd20: 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65     # NOTE: Maybe
dd30: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
dd40: 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76   library is unav
dd50: 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20  ailable?..
dd60: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
dd70: 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d   memory unknown.
dd80: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
dd90: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. dda0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs ddb0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
ddc0: 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d  Args $memory \n] ddd0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. dde0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 }.... se ddf0: 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79 t result$memory
de00: 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e  ; # NOTE: Return
de10: 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74   memory in-use t
de20: 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d  o our caller....
de30: 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69  .      if {!$qui de40: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. de50: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
de60: 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d  el "---- maximum
de70: 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62   memory in use b
de80: 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20  y SQLite... "..
de90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
dea0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65  if {[catch {obje
deb0: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
dec0: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
dee0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
def0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
df00: 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ods \..
df10: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d       sqlite3_mem
df20: 6f 72 79 5f 68 69 67 68 77 61 74 65 72 20 30 7d  ory_highwater 0}
df30: 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74   memory] == 0} t
df40: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
df50: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then df60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp df70: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
df80: 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory df90: 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 " bytes\n"].. dfa0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } dfb0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. dfc0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO dfd0: 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 TE: Maybe the SQ dfe0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar dff0: 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 y is unavailable e000: 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ?.. #.. e010: 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory e020: 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 unknown.... e030: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
e040: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
e050: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe e060: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
e070: 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
e080: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
e090: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c  .      if {$coll e0a0: 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ect} then {.. e0b0: 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 collectGarb e0c0: 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 age$channel..
e0d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
e0e0: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then e0f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput e100: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
e110: 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20   current memory
e120: 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c  in use by the CL
e130: 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d  R... "..      }.
e140: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
e150: 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f  tch {object invo
e160: 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65  ke GC GetTotalMe
e170: 6d 6f 72 79 20 66 61 6c 73 65 7d 20 6d 65 6d 6f  mory false} memo
e180: 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ry] == 0} then {
e190: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
e1a0: 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72  tring is integer
e1b0: 20 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 79   -strict $memory e1c0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. e1d0: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
e1e0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
e1f0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha e200: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs e210: 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73$memory " bytes
e220: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
e230: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
e240: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e {..          s
e250: 65 74 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69  et memory invali
e260: 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  d....          i
e270: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then e280: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. e290: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
e2a0: 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo e2b0: 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ry \n].. e2c0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. e2d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. e2e0: 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f set memo e2f0: 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 ry unknown.... e300: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
e310: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
e320: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan e330: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs e340: 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20$memory \n]..
e350: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
e360: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
e370: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a  $result.. }.. e380: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 ... proc chec e390: 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 kForSQLiteDirect e3a0: 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 ories { channel e3b0: 7b 72 65 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 {reset false} } e3c0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. e3d0: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check e3e0: 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 if the sqlite3_w e3f0: 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo e400: 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 ry function is a e410: 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 vailable... e420: 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 #.. tputs e430: 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20$channel \..
e440: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63        "---- chec
e450: 6b 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f  king for functio
e460: 6e 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  n sqlite3_win32_
e470: 73 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e  set_directory...
e480: 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   "....      #..
e490: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
e4a0: 73 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 71  s call to the sq
e4b0: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
e4c0: 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69  directory functi
e4d0: 6f 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 20 20  on uses the..
e4e0: 20 20 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c     #       inval
e4f0: 69 64 20 76 61 6c 75 65 20 30 20 66 6f 72 20 74  id value 0 for t
e500: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
e510: 74 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69 73  t.  This code is
e520: 20 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 20   designed..
e530: 20 23 20 20 20 20 20 20 20 74 6f 20 63 68 65 63   #       to chec
e540: 6b 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 65  k if calling the
e550: 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72   function will r
e560: 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f  aise an exceptio
e570: 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23  n (i.e...      #
e580: 20 20 20 20 20 20 20 74 68 65 20 61 63 74 75 61         the actua
e590: 6c 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  l result of the
e5a0: 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  function does no
e5b0: 74 20 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e 67  t matter as long
e5c0: 20 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20   as no..      #
e5d0: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory
e5e0: 69 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20  is changed)...
e5f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
e600: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
e610: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
e620: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
e630: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
e640: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
e650: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
e660: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
e670: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
e680: 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f    sqlite3_win32_
e690: 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20  set_directory 0
e6a0: 6e 75 6c 6c 7d 5d 20 3d 3d 20 30 7d 20 74 68 65  null}] == 0} the
e6b0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
e6c0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
e6d0: 43 61 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c 69  Calling the sqli
e6e0: 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
e6f0: 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e  rectory function
e700: 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20   does not..
e710: 20 20 20 23 20 20 20 20 20 20 20 63 61 75 73 65     #       cause
e720: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20 74   an exception; t
e730: 68 65 72 65 66 6f 72 65 2c 20 69 74 20 6d 75 73  herefore, it mus
e740: 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 28  t be available (
e750: 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20  i.e...        #
e760: 20 20 20 20 20 20 65 76 65 6e 20 74 68 6f 75 67        even thoug
e770: 68 20 69 74 20 73 68 6f 75 6c 64 20 72 65 74 75  h it should retu
e780: 72 6e 20 61 20 66 61 69 6c 75 72 65 20 72 65 74  rn a failure ret
e790: 75 72 6e 20 63 6f 64 65 20 69 6e 20 74 68 69 73  urn code in this
e7a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
e7b0: 20 20 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 20    case)...
e7c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64    #..        add
e7d0: 43 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 74  Constraint sqlit
e7e0: 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
e7f0: 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20  ectory....
e800: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel e810: 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 yes\n.... e820: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N e830: 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 OTE: Does our ca e840: 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 ller want to res e850: 65 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 et the directori e860: 65 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a es?.. #.. e870: 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 if {$res
e880: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
e890: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
e8a0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d     # NOTE: Now m
e8b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74  ake sure the dat
e8c0: 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72  abase and tempor
e8d0: 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 20  ary directories
e8e0: 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23  are..          #
e8f0: 20 20 20 20 20 20 20 72 65 73 65 74 20 74 68 65         reset the
e900: 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ir default value
e910: 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20  s, which should
e920: 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68  be null for both
e930: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  ...          #
e940: 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 73       Since the s
e950: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
e960: 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74  _directory funct
e970: 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ion is available
e980: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  ,..          #
e990: 20 20 20 20 20 75 73 65 20 69 74 2e 0d 0a 20 20       use it...
e9a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
e9b0: 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e       for {set in
e9c0: 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c  dex 1} {$index < e9d0: 20 33 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 3} {incr index} e9e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. e9f0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. ea00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ea10: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke ea20: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli ea30: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. ea40: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. ea50: 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa ea60: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods ea70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. ea80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 sqlite3_w ea90: 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo eaa0: 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 7d 20 ry$index null}
eab0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
eac0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 5d 20 3d         result] =
ead0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
eae0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
eaf0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen eb00: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. eb10: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- eb20: 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 call sqlite3_wi eb30: 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director eb40: 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 y("$index \..
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eb60: 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20  ", null)... ok:
eb70: 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  " $result \n].. eb80: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els eb90: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. eba0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
ebb0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
ebc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
ebd0: 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71     "---- call sq
ebe0: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
ebf0: 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64  directory(" $ind ec00: 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ex \.. ec10: 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 ", null) ec20: 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c ... error: " \n\ ec30: 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
ec40: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
ec50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
ec60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
ec70: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
ec80: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\ ec90: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n.... #.. eca0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: ecb0: 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 Does our caller ecc0: 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 want to reset th ecd0: 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20 20 e directories? ece0: 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 This can only.. ecf0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b ed00: 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 e performed if S ed10: 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 QLite is loaded ed20: 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 and ready for us ed30: 65 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20 e by the test.. ed40: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s ed50: 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 uite... # ed60: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 .. if {$r
ed70: 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69 74  eset && [isSQLit
ed80: 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d  eReady]} then {.
ed90: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
eda0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
edb0: 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68  Now make sure th
edc0: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  e database and t
edd0: 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
ede0: 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20  ries are..
edf0: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65      #       rese
ee00: 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20  t their default
ee10: 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68  values, which sh
ee20: 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72  ould be null for
ee30: 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20   both...
ee40: 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20    #       Since
ee50: 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33  the sqlite3_win3
ee60: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20  2_set_directory
ee70: 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  function does no
ee80: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  t..          #
ee90: 20 20 20 20 20 61 70 70 65 61 72 20 74 6f 20 62       appear to b
eea0: 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 65  e available, use
eeb0: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated
eec0: 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d  PRAGMA commands.
eed0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
eee0: 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20     instead...
eef0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
ef00: 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65      foreach dire
ef10: 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61  ctory [list data
ef20: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
ef30: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
ef40: 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20  ctory] {..
ef50: 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61        set sql [a
ef60: 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d  ppendArgs "PRAGM
ef70: 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22  A " $directory " ef80: 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 = \"\";"].... ef90: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c efa0: 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c atch {executeSql efb0: 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d$sql} result] =
efc0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
efd0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
efe0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen eff0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. f000: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- f010: 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 execute PRAGMA f020: 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e "$directory "..
f030: 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20  . ok: \"" \..
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $f050: 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 result \"\n].. f060: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else f070: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. f080: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
f090: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f0b0: 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20    "---- execute
f0c0: 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74  PRAGMA " $direct f0d0: 6f 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 ory "... error: f0e0: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. f0f0: 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 \n\t$res
f100: 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
f110: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
f120: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
f130: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
f140: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
f150: 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20  : Finally, show
f160: 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
f170: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
f180: 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d  e and temporary.
f190: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
f1a0: 69 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69  irectories.  Thi
f1b0: 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65  s can only be pe
f1c0: 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74  rformed if SQLit
f1d0: 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20  e is loaded..
f1e0: 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72     #       and r
f1f0: 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20  eady for use by
f200: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d  the test suite..
f210: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
f220: 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61  if {[isSQLiteRea
f230: 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  dy]} then {..
f240: 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72       foreach dir
f250: 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74  ectory [list dat
f260: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
f270: 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  y temp_store_dir
f280: 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20  ectory] {..
f290: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan f2a0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs f2b0: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 "---- checking " f2c0: 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e$directory "...
f2d0: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   "]....
f2e0: 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64   set sql [append
f2f0: 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24  Args "PRAGMA " $f300: 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d directory \;]... f310: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ f320: 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 catch {executeSq f330: 6c 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 l$sql scalar} r
f340: 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
f350: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
f360: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel f370: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a [appendArgs "ok: f380: 20 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c \""$result \"\
f390: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  n]..          }
f3a0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
f3b0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann f3c0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " f3d0: 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 error: " \n\t$r
f3e0: 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
f3f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
f400: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
f410: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c  }.....    proc l
f420: 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74  oadSQLiteTestSet
f430: 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20  tings { channel
f440: 7b 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69  {suffix ""} {qui
f450: 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  et false} } {..
f460: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
f470: 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69  NOTE: Skip loadi
f480: 6e 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 20  ng the settings
f490: 69 66 20 74 68 65 69 72 20 75 73 61 67 65 20 68  if their usage h
f4a0: 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64  as been disabled
f4b0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
f4c0: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
f4d0: 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54  sts ::no(sqliteT
f4e0: 65 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74  estSettings)]} t
f4f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
f500: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
f510: 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65  : Load custom pe
f520: 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65  r-user and/or pe
f530: 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74  r-host test sett
f540: 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
f550: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
f560: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
f570: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73  :tcl_platform(us
f580: 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  er)]} then {..
f590: 20 20 20 20 20 20 20 20 73 65 74 20 75 73 65 72          set user
f5a0: 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
f5b0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
f5c0: 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d  CommonDirectory]
f5d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
f5e0: 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65    [appendArgs se
f5f0: 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e  ttings $suffix . f600: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
f610: 28 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d  (user) .eagle]].
f620: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
f630: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 75  {[file exists $u f640: 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e serSettingsFileN f650: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. f660: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
f670: 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
f680: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
f690: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app f6a0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. f6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- f6c0: 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 -- loading per-u f6d0: 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 ser test setting f6e0: 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 s file \"" \.. f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f700: 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c$userSettingsFil
f710: 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a  eName \"...\n]..
f720: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
f740: 7b 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c  {[catch {uplevel
f750: 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20   1 [list source
f760: 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c  $userSettingsFil f770: 65 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 eName]} \.. f780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 e f790: 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rror]} then {.. f7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if f7b0: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
f7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f7d0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel f7e0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f800: 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN f810: 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 G: failed to loa f820: 64 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 69 d per-user setti f830: 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a ngs file \"" \.. f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 f850: 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67$userSetting
f860: 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65  sFileName "\", e
f870: 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er f880: 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. f890: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. f8a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. f8b0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. f8c0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
f8d0: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
f8f0: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe f900: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. f910: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- f920: 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e - skipped loadin f930: 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 g per-user test f940: 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 settings file \" f950: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. f960: 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74$userSett
f970: 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22  ingsFileName "\"
f980: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  , it does not ex
f990: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  ist\n"]..
f9a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
f9b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
f9c0: 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 23  ..        ######
f9d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f9e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
f9f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fa00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fa10: 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  #....        if
fa20: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
fa30: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73  tcl_platform(hos
fa40: 74 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  t)]} then {..
fa50: 20 20 20 20 20 20 20 73 65 74 20 68 6f 73 74 53         set hostS
fa60: 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
fa70: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43  [file join [getC
fa80: 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20  ommonDirectory]
fa90: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
faa0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74   [appendArgs set
fab0: 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20  tings $suffix . fac0: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28$::tcl_platform(
fad0: 68 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a  host) .eagle]]..
fae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
faf0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f  [file exists $ho fb00: 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 stSettingsFileNa fb10: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. fb20: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
fb30: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
fb50: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe fb60: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. fb70: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- fb80: 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f - loading per-ho fb90: 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 st test settings fba0: 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 file \"" \.. fbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
fbc0: 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65  hostSettingsFile
fbd0: 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20  Name \"...\n]..
fbe0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
fbf0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
fc00: 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20  [catch {uplevel
fc10: 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24  1 [list source $fc20: 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 hostSettingsFile fc30: 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 Name]} \.. fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 er fc50: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. fc60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { fc70: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
fc80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
fc90: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel fca0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fcc0: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING fcd0: 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 : failed to load fce0: 20 70 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e per-host settin fcf0: 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 gs file \"" \.. fd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fd10: 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73$hostSettings
fd20: 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72  FileName "\", er
fd30: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err fd40: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. fd50: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. fd60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. fd70: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. fd80: 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
fd90: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
fda0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
fdb0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen fdc0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. fdd0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- fde0: 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 skipped loading fdf0: 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 per-host test s fe00: 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 ettings file \"" fe10: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. fe20: 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69$hostSetti
fe30: 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c  ngsFileName "\",
fe40: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
fe50: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
fe60: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
fe70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
fe80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
fe90: 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51  ..    proc runSQ
fea0: 4c 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65  LiteTestPrologue
feb0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
fec0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
fed0: 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63  ip running our c
fee0: 75 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69  ustom prologue i
fef0: 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68  f the main one h
ff00: 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23  as been..      #
ff10: 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d         skipped..
ff20: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
ff30: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
ff40: 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e  s ::no(prologue.
ff50: 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  eagle)]} then {.
ff60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
ff70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64      # NOTE: Load
ff80: 20 74 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e   the "before-con
ff90: 73 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d  straints" custom
ffa0: 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72   per-user and/or
ffb0: 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20   per-host..
ffc0: 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20     #       test
ffd0: 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20  settings now...
ffe0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
fff0: 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73    uplevel 1 [lis
10000 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74  t loadSQLiteTest
10010 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74  Settings $::test 10020 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 _channel .before 10030 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 10040 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 10050 53 6b 69 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e Skip all System. 10060 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 Data.SQLite rela 10070 74 65 64 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e ted file handlin 10080 67 20 28 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 g (deleting,.. 10090 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 100a0 70 79 69 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69 pying, and loadi 100b0 6e 67 29 20 69 66 20 77 65 20 61 72 65 20 73 6f ng) if we are so 100c0 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 instructed... 100d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 100e0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 100f0 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 ts ::no(sqliteFi 10100 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 10110 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 10120 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 10130 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c ip trying to del 10140 65 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 ete any files if 10150 20 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 we are so instr 10160 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 ucted... 10170 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 10180 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 10190 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 101a0 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 teFiles)]} then 101b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 101c0 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 ryDeleteAssembly 101d0 20 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 20 20 sqlite3.dll.. 101e0 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 remove 101f0 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 5f Constraint file_ 10200 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 0d 0a 20 sqlite3.dll.... 10210 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 10220 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 53 51 4c leteAssembly SQL 10230 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d ite.Interop.dll. 10240 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 10250 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 oveConstraint fi 10260 6c 65 5f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f le_SQLite.Intero 10270 70 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 p.dll.... 10280 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 tryDeleteAs 10290 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 sembly System.Da 102a0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 ta.SQLite.dll.. 102b0 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 remov 102c0 65 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 eConstraint file 102d0 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c _System.Data.SQL 102e0 69 74 65 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 ite.dll.... 102f0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 10300 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e Assembly System. 10310 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 Data.SQLite.Linq 10320 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 10330 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 removeConstrai 10340 6e 74 20 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44 nt file_System.D 10350 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e ata.SQLite.Linq. 10360 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 7d dll.. } 10370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 10380 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 10390 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 E: Skip trying t 103a0 6f 20 76 65 72 69 66 79 20 74 68 65 20 62 75 69 o verify the bui 103b0 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 66 20 ld directory if 103c0 77 65 20 61 72 65 20 73 6f 0d 0a 20 20 20 20 20 we are so.. 103d0 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 # ins 103e0 74 72 75 63 74 65 64 3b 20 6f 74 68 65 72 77 69 tructed; otherwi 103f0 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 69 74 se, make sure it 10400 20 61 63 74 75 61 6c 6c 79 20 65 78 69 73 74 73 actually exists 10410 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 23 or.. # 10420 20 20 20 20 20 20 20 68 61 6c 74 20 74 68 65 20 halt the 10430 65 6e 74 69 72 65 20 74 65 73 74 69 6e 67 20 70 entire testing p 10440 72 6f 63 65 73 73 20 69 66 20 69 74 20 64 6f 65 rocess if it doe 10450 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a 20 20 s not exist... 10460 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 10470 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 10480 65 78 69 73 74 73 20 3a 3a 6e 6f 28 76 65 72 69 exists ::no(veri 10490 66 79 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 fyBuildDirectory 104a0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 104b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 104c0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A 104d0 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 74 68 t this point, th 104e0 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 e build director 104f0 79 20 4d 55 53 54 20 65 78 69 73 74 20 61 73 20 y MUST exist as 10500 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 a.. # 10510 20 20 20 20 20 20 20 76 61 6c 69 64 20 64 69 72 valid dir 10520 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 74 ectory for the t 10530 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 74 esting process t 10540 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20 20 20 o continue... 10550 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 10560 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 set dire 10570 63 74 6f 72 79 20 5b 67 65 74 42 75 69 6c 64 44 ctory [getBuildD 10580 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 irectory].... 10590 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 if {![f 105a0 69 6c 65 20 65 78 69 73 74 73 20 24 64 69 72 65 ile exists$dire
105b0 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20  ctory] || \..
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 66               ![f
105d0 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20  ile isdirectory
105e0 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65  $directory]} the 105f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 10600 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 10610 20 20 20 20 23 20 4e 4f 54 45 3a 20 4a 75 73 74 # NOTE: Just 10620 20 70 72 69 6f 72 20 74 6f 20 61 63 74 75 61 6c prior to actual 10630 6c 79 20 68 61 6c 74 69 6e 67 20 74 68 65 20 74 ly halting the t 10640 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2c 0d esting process,. 10650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 10660 20 20 20 20 20 20 20 61 64 64 20 61 6e 20 65 72 add an er 10670 72 6f 72 20 74 6f 20 74 68 65 20 74 65 73 74 20 ror to the test 10680 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 log file... 10690 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 106a0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 106b0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
106c0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
106e0 20 22 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74   "---- could not
106f0 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 64 69   verify build di
10700 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72  rectory \"" $dir 10710 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 ectory \.. 10720 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c "\", 10730 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c all testing hal 10740 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 ted\n"].... 10750 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 10760 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 10770 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63 72 69 : Raising a scri 10780 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 74 68 pt error from th 10790 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20 is point should 107a0 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 20 20 halt.. 107b0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 107c0 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e testing process. 107d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 107e0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 107f0 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72 error [appendAr 10800 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 10810 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e "could n 10820 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 ot verify build 10830 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 directory \""$d
10840 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20  irectory \..
10850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
10860 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68  ", all testing h
10870 61 6c 74 65 64 22 5d 0d 0a 20 20 20 20 20 20 20  alted"]..
10880 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
10890 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
108a0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
108b0 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e  NOTE: Skip tryin
108c0 67 20 74 6f 20 63 6f 70 79 20 61 6e 79 20 66 69  g to copy any fi
108d0 6c 65 73 20 69 66 20 77 65 20 61 72 65 20 73 6f  les if we are so
108e0 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20   instructed...
108f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10900 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
10910 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79  exists ::no(copy
10920 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74  SqliteFiles)]} t
10930 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
10940 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62     tryCopyAssemb
10950 6c 79 20 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a  ly sqlite3.dll..
10960 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
10970 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 51 4c 69  opyAssembly SQLi
10980 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a  te.Interop.dll..
10990 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
109a0 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 79 73 74  opyAssembly Syst
109b0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
109c0 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..
109d0 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20  tryCopyAssembly
109e0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
109f0 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20  te.Linq.dll..
10a00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
10a10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10a20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
10a30 74 72 79 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61  trying to load a
10a40 6e 79 20 66 69 6c 65 73 20 69 66 20 77 65 20 61  ny files if we a
10a50 72 65 20 73 6f 20 69 6e 73 74 72 75 63 74 65 64  re so instructed
10a60 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
10a70 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
10a80 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
10a90 28 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c 65 73  (loadSqliteFiles
10aa0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
10ab0 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41          tryLoadA
10ac0 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44  ssembly System.D
10ad0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a  ata.SQLite.dll..
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c              tryL
10af0 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74  oadAssembly Syst
10b00 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c  em.Data.SQLite.L
10b10 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  inq.dll..
10b20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
10b30 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
10b40 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69   NOTE: Skip tryi
10b50 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 65 78 74  ng to delete ext
10b60 65 72 6e 61 6c 20 66 69 6c 65 73 20 69 66 20 77  ernal files if w
10b70 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75 63  e are so instruc
10b80 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ted...
10b90 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  #..          if
10ba0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
10bb0 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
10bc0 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d  ExternalFiles)]}
10bd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
10be0 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 75       tryDeleteBu
10bf0 69 6c 64 46 69 6c 65 20 49 6e 73 74 61 6c 6c 65  ildFile Installe
10c00 72 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  r.exe.mda.config
10c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
10c20 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65  yDeleteBuildFile
10c30 20 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f   test.exe.mda.co
10c40 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20  nfig..
10c50 20 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64    tryDeleteBuild
10c60 46 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e 65 78  File testlinq.ex
10c70 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 0d 0a 20 20  e.mda.config..
10c80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
10c90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
10ca0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
10cb0 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79 20   trying to copy
10cc0 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 69  external files i
10cd0 66 20 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74  f we are so inst
10ce0 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  ructed...
10cf0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
10d00 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
10d10 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74  s ::no(copySqlit
10d20 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d  eExternalFiles)]
10d30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
10d40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10d50 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70       # NOTE: Cop
10d60 79 20 74 68 65 20 4d 44 41 20 63 6f 6e 66 69 67  y the MDA config
10d70 75 72 61 74 69 6f 6e 20 66 69 6c 65 20 66 6f 72  uration file for
10d80 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c   the Eagle shell
10d90 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..
10da0 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69       #       bui
10db0 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74  ld output direct
10dc0 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 75 73  ory; however, us
10dd0 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  e the name of th
10de0 65 20 6c 65 67 61 63 79 0d 0a 20 20 20 20 20 20  e legacy..
10df0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
10e00 73 74 20 65 78 65 63 75 74 61 62 6c 65 2e 20 20  st executable.
10e10 54 68 69 73 20 77 69 6c 6c 20 6d 61 6b 65 20 73  This will make s
10e20 75 72 65 20 74 68 61 74 20 74 68 65 20 6c 65 67  ure that the leg
10e30 61 63 79 20 74 65 73 74 73 0d 0a 20 20 20 20 20  acy tests..
10e40 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
10e50 75 6e 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  un with the same
10e60 20 73 65 74 20 6f 66 20 4d 44 41 73 20 63 6f 6e   set of MDAs con
10e70 66 69 67 75 72 65 64 2e 0d 0a 20 20 20 20 20 20  figured...
10e80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10e90 20 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61       tryCopyBina
10ea0 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c  ryFile EagleShel
10eb0 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  l.exe.mda.config
10ec0 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d   Installer.exe.m
10ed0 64 61 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20  da.config..
10ee0 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 69         tryCopyBi
10ef0 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68  naryFile EagleSh
10f00 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  ell.exe.mda.conf
10f10 69 67 20 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e  ig test.exe.mda.
10f20 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20  config..
10f30 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61 72      tryCopyBinar
10f40 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c 6c  yFile EagleShell
10f50 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20  .exe.mda.config
10f60 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61  testlinq.exe.mda
10f70 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20  .config..
10f80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
10f90 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  ...        catch
10fa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
10fb0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 10fc0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 10fd0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10fe0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 "---- file vers 10ff0 69 6f 6e 20 6f 66 20 5c 22 73 71 6c 69 74 65 33 ion of \"sqlite3 11000 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 .dll\"... " \.. 11010 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 11020 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 le version [getB 11030 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 inaryFileName sq 11040 6c 69 74 65 33 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d lite3.dll]] \n]. 11050 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 11060 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 11070 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
11080 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
11090 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
110a0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
110b0 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f  - file version o
110c0 66 20 5c 22 53 51 4c 69 74 65 2e 49 6e 74 65 72  f \"SQLite.Inter
110d0 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d  op.dll\"... " \.
110e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
110f0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65  file version [ge
11100 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
11110 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64  SQLite.Interop.d
11120 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  ll]] \n]..
11130 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
11140 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
11150 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 11160 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 11170 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 11180 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 11190 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 version of \"Sys 111a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 111b0 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 dll\"... " \.. 111c0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 111d0 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 e version [getBi 111e0 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 naryFileName Sys 111f0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 11200 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 dll]] \n].. 11210 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 11220 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 11230 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
11240 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
11250 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
11260 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65        "---- file
11270 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79   version of \"Sy
11280 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
11290 2e 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 22  .Linq.dll\"... "
112a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
112b0 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20    [file version
112c0 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
112d0 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  me System.Data.S
112e0 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d  QLite.Linq.dll]]
112f0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d   \n]..        }.
11300 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61  ...        set a
11310 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63  ssemblies [objec
11320 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61  t invoke AppDoma
11330 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e  in.CurrentDomain
11340 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d   GetAssemblies].
11350 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  ...        objec
11360 74 20 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62  t foreach assemb
11370 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b  ly $assemblies { 11380 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 11390 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b [string match \{ 113a0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 113b0 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20 te*$assembly]}
113c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
113d0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 113e0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 113f0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 11400 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 11410 6f 75 6e 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 ound assembly: " 11420 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a$assembly \n]..
11430 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
11440 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
11450 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
11460 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 11470 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 11480 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 11490 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e - define constan 114a0 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e ts for \"System. 114b0 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e Data.SQLite\"... 114c0 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ".... 114d0 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 if {[catch {obje 114e0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 114f0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 11500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11510 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 11520 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69 ite.SQLite3 Defi 11530 6e 65 43 6f 6e 73 74 61 6e 74 73 7d 20 5c 0d 0a neConstants} \.. 11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11550 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 defineConstant 11560 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. 11570 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 11580 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
11590 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b  el [appendArgs [
115a0 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72  formatList [lsor
115b0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
115c0 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f 6e 73       $defineCons 115d0 74 61 6e 74 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 tants]] \n].. 115e0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 115f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 11600 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
11610 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20  el unknown\n..
11620 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
11630 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
11640 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
11650 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 61  E: Check the ava
11660 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 6f 66  ilable builds of
11670 20 53 51 4c 69 74 65 20 61 6e 64 20 53 79 73 74   SQLite and Syst
11680 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d  em.Data.SQLite..
11690 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
116a0 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
116b0 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74  teBuilds $::test 116c0 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 _channel.... 116d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 116e0 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 20 6e NOTE: Now, we n 116f0 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 66 20 74 eed to know if t 11700 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c he SQLite core l 11710 69 62 72 61 72 79 20 69 73 20 61 76 61 69 6c 61 ibrary is availa 11720 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ble.. # 11730 20 20 20 20 20 28 69 2e 65 2e 20 62 65 63 61 75 (i.e. becau 11740 73 65 20 74 68 65 20 6d 61 6e 61 67 65 64 2d 6f se the managed-o 11750 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e nly System.Data. 11760 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 20 SQLite assembly 11770 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 can.. # 11780 20 20 20 20 20 6c 6f 61 64 20 77 69 74 68 6f 75 load withou 11790 74 20 69 74 3b 20 68 6f 77 65 76 65 72 2c 20 69 t it; however, i 117a0 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 6e 79 74 t cannot do anyt 117b0 68 69 6e 67 20 75 73 65 66 75 6c 20 77 69 74 68 hing useful with 117c0 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 out.. # 117d0 20 20 20 20 20 69 74 29 2e 20 20 49 66 20 77 65 it). If we 117e0 20 61 72 65 20 75 73 69 6e 67 20 74 68 65 20 6d are using the m 117f0 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 ixed-mode assemb 11800 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 65 61 64 ly and we alread 11810 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 11820 20 20 20 66 6f 75 6e 64 20 69 74 20 28 61 62 6f found it (abo 11830 76 65 29 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 ve), this should 11840 20 61 6c 77 61 79 73 20 73 75 63 63 65 65 64 2e always succeed. 11850 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 11860 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 11870 69 74 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ite$::test_chan
11880 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  nel....        #
11890 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
118a0 3a 20 43 68 65 63 6b 20 74 68 65 20 53 51 4c 69  : Check the SQLi
118b0 74 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  te database and
118c0 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
118d0 6f 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  ories...
118e0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  #..        check
118f0 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f  ForSQLiteDirecto
11900 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ries $::test_cha 11910 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nnel.... 11920 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 11930 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 E: Attempt to de 11940 74 65 72 6d 69 6e 65 20 69 66 20 76 61 72 69 6f termine if vario 11950 75 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 us compile-time 11960 6f 70 74 69 6f 6e 73 20 6e 65 65 64 65 64 20 66 options needed f 11970 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 or.. # 11980 20 20 20 20 74 65 73 74 20 63 6f 6e 73 74 72 61 test constra 11990 69 6e 74 73 20 77 65 72 65 20 65 6e 61 62 6c 65 ints were enable 119a0 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 d for the manage 119b0 64 20 61 73 73 65 6d 62 6c 79 2e 20 20 54 68 65 d assembly. The 119c0 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 re.. # 119d0 20 20 20 20 61 72 65 20 73 6f 6d 65 20 63 6f 6d are some com 119e0 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e pile-time option 119f0 73 20 74 68 61 74 20 6d 75 73 74 20 61 6c 73 6f s that must also 11a00 20 68 61 76 65 20 62 65 65 6e 20 65 6e 61 62 6c have been enabl 11a10 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ed.. # 11a20 20 20 20 20 66 6f 72 20 74 68 65 20 69 6e 74 65 for the inte 11a30 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 6e 20 rop assembly in 11a40 6f 72 64 65 72 20 74 6f 20 62 65 20 65 66 66 65 order to be effe 11a50 63 74 69 76 65 2e 20 20 46 6f 72 20 74 68 6f 73 ctive. For thos 11a60 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 11a70 20 20 20 6f 70 74 69 6f 6e 73 2c 20 69 74 20 77 options, it w 11a80 69 6c 6c 20 62 65 20 61 73 73 75 6d 65 64 20 74 ill be assumed t 11a90 68 61 74 20 69 74 20 77 61 73 20 65 6e 61 62 6c hat it was enabl 11aa0 65 64 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 ed for the inter 11ab0 6f 70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 op.. # 11ac0 20 20 20 20 61 73 73 65 6d 62 6c 79 20 69 66 20 assembly if 11ad0 69 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66 it was enabled f 11ae0 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 or the managed a 11af0 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 ssembly... 11b00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 #.. for 11b10 65 61 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 each defineConst 11b20 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 ant [list \.. 11b30 20 20 20 20 20 20 20 20 20 43 48 45 43 4b 5f 53 CHECK_S 11b40 54 41 54 45 20 43 4f 55 4e 54 5f 48 41 4e 44 4c TATE COUNT_HANDL 11b50 45 20 44 45 42 55 47 20 49 4e 54 45 52 4f 50 5f E DEBUG INTEROP_ 11b60 43 4f 44 45 43 20 49 4e 54 45 52 4f 50 5f 44 45 CODEC INTEROP_DE 11b70 42 55 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 BUG \.. 11b80 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e INTEROP_EXTEN 11b90 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49 SION_FUNCTIONS I 11ba0 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c NTEROP_LEGACY_CL 11bb0 4f 53 45 20 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 OSE INTEROP_LOG 11bc0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 \.. I 11bd0 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 NTEROP_TEST_EXTE 11be0 4e 53 49 4f 4e 20 4e 45 54 5f 32 30 20 4e 45 54 NSION NET_20 NET 11bf0 5f 33 35 20 4e 45 54 5f 34 30 20 4e 45 54 5f 34 _35 NET_40 NET_4 11c00 35 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 5 NET_COMPACT_20 11c10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11c20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 PLATFORM_COMPACT 11c30 46 52 41 4d 45 57 4f 52 4b 20 50 52 45 4c 4f 41 FRAMEWORK PRELOA 11c40 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59 D_NATIVE_LIBRARY 11c50 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 5c 0d RETARGETABLE \. 11c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c . SQL 11c70 49 54 45 5f 53 54 41 4e 44 41 52 44 20 54 48 52 ITE_STANDARD THR 11c80 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54 OW_ON_DISPOSED T 11c90 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45 RACE TRACE_CONNE 11ca0 43 54 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 CTION \.. 11cb0 20 20 20 20 20 54 52 41 43 45 5f 48 41 4e 44 4c TRACE_HANDL 11cc0 45 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44 20 E TRACE_PRELOAD 11cd0 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 TRACE_STATEMENT 11ce0 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 20 5c 0d TRACE_WARNING \. 11cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41 . TRA 11d00 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 CK_MEMORY_BYTES 11d10 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 USE_INTEROP_DLL 11d20 55 53 45 5f 50 52 45 50 41 52 45 5f 56 32 20 57 USE_PREPARE_V2 W 11d30 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 20 20 20 INDOWS] {.. 11d40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 11d50 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 11d60 69 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 if the compile-t 11d70 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69 ime option is li 11d80 73 74 65 64 20 69 6e 20 74 68 65 20 6c 69 73 74 sted in the list 11d90 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 23 of.. # 11da0 20 20 20 20 20 20 20 22 64 65 66 69 6e 65 20 63 "define c 11db0 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70 74 20 74 onstants" kept t 11dc0 72 61 63 6b 20 6f 66 20 62 79 20 74 68 65 20 6d rack of by the m 11dd0 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e anaged assembly. 11de0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 11df0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 11e00 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e rSQLiteDefineCon 11e10 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 stant$::test_ch
11e20 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65 43 6f 6e  annel $defineCon 11e30 73 74 61 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d stant.. } 11e40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 11e50 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 11e60 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 heck the current 11e70 20 62 75 69 6c 64 20 79 65 61 72 2e 20 20 42 61 build year. Ba 11e80 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e sically, this in 11e90 64 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20 dicates.. 11ea0 20 23 20 20 20 20 20 20 20 77 68 69 63 68 20 76 # which v 11eb0 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c ersion of MSBuil 11ec0 64 20 61 6e 64 2f 6f 72 20 56 69 73 75 61 6c 20 d and/or Visual 11ed0 53 74 75 64 69 6f 20 77 61 73 20 75 73 65 64 20 Studio was used 11ee0 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 to.. # 11ef0 20 20 20 20 63 6f 6d 70 69 6c 65 20 74 68 65 20 compile the 11f00 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 assembly binarie 11f10 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 s under test... 11f20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 11f30 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
11f40 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20  channel \..
11f50 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
11f60 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d  cking for System
11f70 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69  .Data.SQLite bui
11f80 6c 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a  ld year... "....
11f90 20 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72          set year
11fa0 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d   [getBuildYear].
11fb0 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73  .        addCons
11fc0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
11fd0 67 73 20 62 75 69 6c 64 59 65 61 72 2e 20 24 79  gs buildYear. $y 11fe0 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 ear].. tp 11ff0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
12000 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
12010 5c 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a  \" $year \"\n].. 12020 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 12030 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 12040 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 ck the current b 12050 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 uild configurati 12060 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 on. This should 12070 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 normally.. 12080 20 20 20 23 20 20 20 20 20 20 20 62 65 20 65 69 # be ei 12090 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 ther "Debug" or 120a0 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20 20 20 "Release"... 120b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 120c0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
120d0 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
120e0 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69      "---- checki
120f0 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61  ng for System.Da
12100 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20  ta.SQLite build
12110 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 2e 2e  configuration...
12120 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65   "....        se
12130 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  t configuration
12140 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75  [getBuildConfigu
12150 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20  ration]..
12160 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b   addConstraint [
12170 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64  appendArgs build
12180 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 24  Configuration. $12190 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a configuration].. 121a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
121b0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
121c0 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 63 6f  ppendArgs \" $co 121d0 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c 22 5c 6e nfiguration \"\n 121e0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 121f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 12200 54 72 79 20 74 6f 20 73 65 74 75 70 20 61 6e 20 Try to setup an 12210 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61 interrupt callba 12220 63 6b 20 75 73 69 6e 67 20 74 68 65 20 73 63 72 ck using the scr 12230 69 70 74 20 64 65 62 75 67 67 65 72 0d 0a 20 20 ipt debugger.. 12240 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 12250 61 74 20 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61 at will cancel a 12260 6c 6c 20 53 51 4c 20 71 75 65 72 69 65 73 20 69 ll SQL queries i 12270 6e 20 70 72 6f 67 72 65 73 73 20 66 6f 72 20 61 n progress for a 12280 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 ll database.. 12290 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 122a0 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 nections known t 122b0 6f 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 o this interpret 122c0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a er... #.. 122d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 122e0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 fo exists ::no(s 122f0 71 6c 69 74 65 49 6e 74 65 72 72 75 70 74 43 61 qliteInterruptCa 12300 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b llback)]} then { 12310 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 75 .. setu 12320 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c pDbInterruptCall 12330 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61 back$::test_cha
12340 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67  nnel $::test_log 12350 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 12360 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 12370 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 12380 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65 20 72 for the native r 12390 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 untime option, w 123a0 68 69 63 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20 hich would mean 123b0 77 65 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 we are.. 123c0 23 20 20 20 20 20 20 20 75 73 69 6e 67 20 74 68 # using th 123d0 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 123e0 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 embly... 123f0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 12400 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e ForRuntimeOption 12410 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
12420 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20   native....
12430 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
12440 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
12450 68 65 20 74 65 73 74 20 73 75 69 74 65 20 73 68  he test suite sh
12460 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68 65 20 6e  ould count the n
12470 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74  umber of connect
12480 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20  ions..        #
12490 20 20 20 20 20 20 22 6f 70 65 6e 65 64 22 20 61        "opened" a
124a0 6e 64 20 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d  nd "closed" from
124b0 20 74 68 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64   the pool when d
124c0 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 20  etermining if a
124d0 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  test..        #
124e0 20 20 20 20 20 20 70 61 73 73 65 64 2e 20 20 44        passed.  D
124f0 69 73 61 62 6c 69 6e 67 20 74 68 69 73 20 62 65  isabling this be
12500 68 61 76 69 6f 72 20 69 73 20 73 6f 6d 65 74 69  havior is someti
12510 6d 65 73 20 6e 65 63 65 73 73 61 72 79 20 28 65  mes necessary (e
12520 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  .g...        #
12530 20 20 20 20 20 64 75 72 69 6e 67 20 74 68 65 20       during the
12540 72 65 6c 65 61 73 65 20 74 65 73 74 69 6e 67 20  release testing
12550 70 72 6f 63 65 73 73 29 20 62 65 63 61 75 73 65  process) because
12560 20 74 68 65 72 65 20 61 72 65 20 73 65 76 65 72   there are sever
12570 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  al..        #
12580 20 20 20 20 74 65 73 74 73 20 74 68 61 74 20 72      tests that r
12590 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e  ely on the "open
125a0 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f  ed from pool" co
125b0 75 6e 74 20 62 65 69 6e 67 20 67 72 65 61 74 65  unt being greate
125c0 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  r..        #
125d0 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54     than zero.  T
125e0 68 65 73 65 20 74 65 73 74 73 20 6d 61 79 20 66  hese tests may f
125f0 61 69 6c 20 64 75 65 20 74 6f 20 74 68 65 20 6e  ail due to the n
12600 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74 69 63  on-deterministic
12610 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
12620 20 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74 68    behavior of th
12630 65 20 43 4c 52 20 47 43 2c 20 65 76 65 6e 20 77  e CLR GC, even w
12640 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20  hen there is no
12650 62 75 67 20 69 6e 20 74 68 65 20 63 6f 64 65 0d  bug in the code.
12660 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
12670 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a   being tested...
12680 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12690 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69     checkForRunti
126a0 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74  meOption $::test 126b0 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 _channel noPoolC 126c0 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20 ounts.... 126d0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 126e0 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 72 TE: Report the r 126f0 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 70 72 esource usage pr 12700 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61 ior to running a 12710 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 ny tests... 12720 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 12730 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 portSQLiteResour 12740 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ces$::test_chan
12750 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  nel....        #
12760 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
12770 3a 20 53 68 6f 77 20 74 68 65 20 61 63 74 69 76  : Show the activ
12780 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e  e test constrain
12790 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ts...        #..
127a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 127b0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 127c0 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 ppendArgs "---- 127d0 63 6f 6e 73 74 72 61 69 6e 74 73 3a 20 22 20 5c constraints: " \ 127e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 127f0 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 ormatList [lsort 12800 20 5b 67 65 74 43 6f 6e 73 74 72 61 69 6e 74 73 [getConstraints 12810 5d 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 ]]] \n].... 12820 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 12830 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 74 NOTE: Save the t 12840 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 est constraints 12850 66 6f 72 20 75 73 65 20 62 79 20 74 68 72 65 61 for use by threa 12860 64 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 ds created in th 12870 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 is.. # 12880 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 application 12890 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20 69 73 domain. This is 128a0 20 6e 65 63 65 73 73 61 72 79 20 62 65 63 61 75 necessary becau 128b0 73 65 20 61 6c 6c 20 74 68 65 20 45 61 67 6c 65 se all the Eagle 128c0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 128d0 20 20 22 74 65 73 74 20 63 6f 6e 74 65 78 74 22 "test context" 128e0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 information is 128f0 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20 per-thread... 12900 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 12910 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 12920 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 s ::test_constra 12930 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ints]} then {.. 12940 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 set ::t 12950 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20 est_constraints 12960 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 63$::eagle_tests(c
12970 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 20  onstraints)..
12980 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
12990 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
129a0 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 61  OTE: Load the "a
129b0 66 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73  fter-constraints
129c0 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65  " custom per-use
129d0 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73  r and/or per-hos
129e0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
129f0 20 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 73     test settings
12a00 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23   now...        #
12a10 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65  ..        upleve
12a20 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51  l 1 [list loadSQ
12a30 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73  LiteTestSettings
12a40 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 12a50 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 .after].... 12a60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 12a70 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e NOTE: Show when 12a80 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 75 61 our tests actua 12a90 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 29 2e lly began (now). 12aa0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 12ab0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
12ac0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
12ad0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
12ae0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74        "---- Syst
12af0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74  em.Data.SQLite t
12b00 65 73 74 73 20 62 65 67 61 6e 20 61 74 20 22 20  ests began at "
12b10 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
12b20 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c  clock format [cl
12b30 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e  ock seconds]] \n
12b40 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
12b50 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72  }.....    proc r
12b60 75 6e 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c  unSQLiteTestEpil
12b70 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ogue {} {..
12b80 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
12b90 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f  : Skip running o
12ba0 75 72 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f 67  ur custom epilog
12bb0 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f  ue if the main o
12bc0 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20  ne has been..
12bd0 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70     #       skipp
12be0 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
12bf0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
12c00 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f  xists ::no(epilo
12c10 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65  gue.eagle)]} the
12c20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
12c30 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
12c40 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65  Show when our te
12c50 73 74 73 20 61 63 74 75 61 6c 6c 79 20 65 6e 64  sts actually end
12c60 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20  ed (now)...
12c70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
12c80 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 12c90 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 12ca0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 12cb0 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 ---- System.Data 12cc0 2e 53 51 4c 69 74 65 20 74 65 73 74 73 20 65 6e .SQLite tests en 12cd0 64 65 64 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 ded at " \.. 12ce0 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 [clock f 12cf0 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 ormat [clock sec 12d00 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 onds]] \n].... 12d10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 12d20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 # BUGFIX: Befor 12d30 65 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66 e checking the f 12d40 69 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69 inal resources i 12d50 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c n use by SQLite, 12d60 20 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 make.. # 12d70 20 20 20 20 20 20 20 20 20 73 75 72 65 20 62 6f sure bo 12d80 74 68 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 th of the PRAGMA 12d90 20 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f related directo 12da0 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 ry names are fre 12db0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ed... #.. 12dc0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 12dd0 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 SQLiteDirectorie 12de0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
12df0 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20  l true....
12e00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
12e10 4f 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74  OTE: Also report
12e20 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73   the resource us
12e30 61 67 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e  age after runnin
12e40 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20  g the tests...
12e50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12e60 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73   reportSQLiteRes
12e70 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63  ources $::test_c 12e80 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 hannel.... 12e90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 12ea0 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 OTE: Report the 12eb0 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 critical handle 12ec0 63 6f 75 6e 74 73 20 61 66 74 65 72 20 72 75 6e counts after run 12ed0 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d ning the tests.. 12ee0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 12ef0 20 20 20 20 67 65 74 53 51 4c 69 74 65 48 61 6e getSQLiteHan 12f00 64 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73 dleCounts$::tes
12f10 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20  t_channel..
12f20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
12f30 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
12f40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12f50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12f60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12f70 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20  #############..
12f80 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
12f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12fa0 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e 4c 59 20   END Eagle ONLY
12fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
12fd0 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23      ############
12fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
12ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
13020 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23  .  }....  #..  #
13030 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the
13040 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69 72 65  name of the dire
13050 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  ctory containing
13060 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 23   this file...  #
13070 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65  ..  if {![info e
13080 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f 64 69 72  xists common_dir
13090 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
130a0 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d 6f 6e 5f  .    set common_
130b0 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20  directory [file
130c0 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63  dirname [info sc
130d0 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20  ript]]..  }....
130e0 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 50 72   #..  # NOTE: Pr
130f0 6f 76 69 64 65 20 74 68 65 20 53 79 73 74 65 6d  ovide the System
13100 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73  .Data.SQLite tes
13110 74 20 70 61 63 6b 61 67 65 20 74 6f 20 74 68 65  t package to the
13120 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
13130 20 23 0d 0a 20 20 70 61 63 6b 61 67 65 20 70 72   #..  package pr
13140 6f 76 69 64 65 20 53 79 73 74 65 6d 2e 44 61 74  ovide System.Dat
13150 61 2e 53 51 4c 69 74 65 2e 54 65 73 74 20 31 2e  a.SQLite.Test 1.
13160 30 0d 0a 7d 0d 0a                                0..}..