System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 94dcf8f44ea9d9394cf762d9ab16fe3a78281dbd:

• File Tests/common.eagle — part of check-in [fc1d93be1c] at 2013-10-29 21:34:04 on branch trunk — Code style fix. (user: mistachkin size: 85487)

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 6d 61 74 63 68 4d 61 63 68    proc matchMach
6de0: 69 6e 65 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d  ine { platform }
6df0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
6e00: 20 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d     # NOTE: An em
6e10: 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74  pty string for t
6e20: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e  he platform mean
6e30: 73 20 74 68 61 74 20 74 68 65 20 62 75 69 6c 64  s that the build
6e40: 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23   is not..      #
6e50: 20 20 20 20 20 20 20 5b 70 72 69 6d 61 72 69 6c         [primaril
6e60: 79 5d 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c  y] a native buil
6e70: 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74  d; therefore, it
6e80: 20 61 6c 77 61 79 73 20 6d 61 74 63 68 65 73 2e   always matches.
6e90: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
6ea0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
6eb0: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d  gth $platform] = 6ec0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 6ed0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 6ee0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 6ef0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 6f00: 54 45 3a 20 44 6f 65 73 20 74 68 65 20 73 70 65 TE: Does the spe 6f10: 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 cified platform 6f20: 6d 61 74 63 68 20 75 70 20 74 6f 20 74 68 65 20 match up to the 6f30: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 3f current process? 6f40: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6f50: 20 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 if {$platform e
6f60: 71 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74  q [machineToPlat
6f70: 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74  form $::tcl_plat 6f80: 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 form(machine)]} 6f90: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 6fa0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 6fb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 6fc0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 6fd0: 68 65 20 73 70 65 63 69 66 69 65 64 20 70 6c 61 he specified pla 6fe0: 74 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d tform does not m 6ff0: 61 74 63 68 20 75 70 20 77 69 74 68 20 74 68 65 atch up with the 7000: 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 platform.. 7010: 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 # for the 7020: 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 current process 7030: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 7040: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. 7050: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7060: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 oc checkForSQLit 7070: 65 42 75 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 eBuilds { channe 7080: 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d l {select false} 7090: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 70a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 70b0: 63 6b 20 66 6f 72 20 65 76 65 72 79 20 70 6f 73 ck for every pos 70c0: 73 69 62 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 sible valid comb 70d0: 69 6e 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 ination of value 70e0: 73 20 75 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 s used when.. 70f0: 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 # locat 7100: 69 6e 67 20 6f 75 74 20 74 68 65 20 62 75 69 6c ing out the buil 7110: 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f d output directo 7120: 72 79 2c 20 73 68 6f 77 69 6e 67 20 65 61 63 68 ry, showing each 7130: 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 available.. 7140: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 # build 7150: 76 61 72 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 variation along 7160: 74 68 65 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 the way... 7170: 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 #.. foreach 7180: 20 6e 61 74 69 76 65 20 5b 6c 69 73 74 20 66 61 native [list fa 7190: 6c 73 65 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 lse true] {.. 71a0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 79 65 61 foreach yea 71b0: 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 73 r [getBuildYears 71c0: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 ] {.. f 71d0: 6f 72 65 61 63 68 20 63 6f 6e 66 69 67 75 72 61 oreach configura 71e0: 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f tion [getBuildCo 71f0: 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d nfigurations] {. 7200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 7210: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 7220: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 TE: Figure out t 7230: 68 65 20 65 66 66 65 63 74 69 76 65 20 62 75 69 he effective bui 7240: 6c 64 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 ld platform. Th 7250: 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 is is.. 7260: 20 20 20 23 20 20 20 20 20 20 20 62 61 73 65 64 # based 7270: 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e on whether or n 7280: 6f 74 20 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d ot a [primarily] 7290: 20 6e 61 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 native build.. 72a0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 72b0: 20 20 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 is being used 72c0: 2e 20 20 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c . For [primaril 72d0: 79 5d 20 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 y] non-native bu 72e0: 69 6c 64 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 ilds,.. 72f0: 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20 # this 7300: 77 69 6c 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 will be an empty 7310: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 string... 7320: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 7330: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 7340: 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 m [getBuildPlatf 7350: 6f 72 6d 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a orm$native]....
7360: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
7370: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 7380: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 7390: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 73a0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 checking for Sys 73b0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 73c0: 62 75 69 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 build \"" [expr 73d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 73e0: 20 20 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e {$native ? "n
73f0: 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b  ative/" : ""}] [
7400: 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65  expr {[string le
7410: 6e 67 74 68 20 5c 0d 0a 20 20 20 20 20 20 20 20  ngth \..
7420: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72          $platfor 7430: 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 m] > 0 ? [append 7440: 41 72 67 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f Args$platform /
7450: 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 5c  ] : ""}] $year \ 7460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 7470: 20 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 /$configurati
7480: 6f 6e 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a  on "\"... "]....
7490: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
74a0: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
74b0: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c  E: Build the ful
74c0: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c  ly qualified fil
74d0: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 70  e name for the p
74e0: 72 69 6d 61 72 79 0d 0a 20 20 20 20 20 20 20 20  rimary..
74f0: 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65      #       asse
7500: 6d 62 6c 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20  mbly containing
7510: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
7520: 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 0d 0a  SQLite managed..
7530: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
7540: 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20      components.
7550: 20 49 74 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f   It should be no
7560: 74 65 64 20 74 68 61 74 20 74 68 69 73 20 61 73  ted that this as
7570: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..
7580: 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65      #       file
7590: 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69   may also contai
75a0: 6e 20 74 68 65 20 6e 61 74 69 76 65 20 63 6f 6d  n the native com
75b0: 70 6f 6e 65 6e 74 73 2c 20 69 66 20 61 0d 0a 20  ponents, if a..
75c0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
75d0: 20 20 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20     native build
75e0: 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20  is in use...
75f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
7600: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
7610: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ame [file native
7620: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
7630: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
7640: 20 20 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72     [joinBuildDir
7650: 65 63 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5b  ectory $native [ 7660: 67 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 getBuildBaseDire 7670: 63 74 6f 72 79 5d 20 24 79 65 61 72 20 5c 0d 0a ctory]$year \..
7680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7690: 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69  $platform$confi
76a0: 67 75 72 61 74 69 6f 6e 5d 20 53 79 73 74 65 6d  guration] System
76b0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
76c0: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ]]....
76d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
76e0: 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68   # NOTE: Does th
76f0: 65 20 66 69 6c 65 20 65 78 69 73 74 3f 20 20 43  e file exist?  C
7700: 75 72 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f 74 68  urrently, no oth
7710: 65 72 20 73 74 65 70 73 20 61 72 65 0d 0a 20 20  er steps are..
7720: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
7730: 20 20 74 61 6b 65 6e 20 74 6f 20 76 65 72 69 66    taken to verif
7740: 79 20 74 68 69 73 20 62 75 69 6c 64 20 69 73 20  y this build is
7750: 61 63 74 75 61 6c 6c 79 20 76 69 61 62 6c 65 2e  actually viable.
7760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
7770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
7780: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  {[file exists $f 7790: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 77a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 77b0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 77c0: 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 69 6e # NOTE: When in 77d0: 20 22 73 65 6c 65 63 74 22 20 6d 6f 64 65 2c 20 "select" mode, 77e0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 automatically se 77f0: 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 0d 0a lect the first.. 7800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 7810: 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 available 7820: 62 75 69 6c 64 20 6f 66 20 53 79 73 74 65 6d 2e build of System. 7830: 44 61 74 61 2e 53 51 4c 69 74 65 20 61 6e 64 20 Data.SQLite and 7840: 74 68 65 6e 20 72 65 74 75 72 6e 0d 0a 20 20 20 then return.. 7850: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 7860: 20 20 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0d immediately.. 7870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 7880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 7890: 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b if {$select && [
78a0: 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70 6c  matchMachine $pl 78b0: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. 78c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 78d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 78e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6e 75 # NOTE: Manu 78f0: 61 6c 6c 79 20 6f 76 65 72 72 69 64 65 20 61 6c ally override al 7900: 6c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 l the build dire 7910: 63 74 6f 72 79 20 73 65 6c 65 63 74 69 6f 6e 0d ctory selection. 7920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 7930: 20 23 20 20 20 20 20 20 20 72 65 6c 61 74 65 64 # related 7940: 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 69 test settings i 7950: 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72 63 65 n order to force 7960: 20 74 68 69 73 20 62 75 69 6c 64 0d 0a 20 20 20 this build.. 7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 7980: 20 20 20 20 20 6f 66 20 53 79 73 74 65 6d 2e 44 of System.D 7990: 61 74 61 2e 53 51 4c 69 74 65 20 74 6f 20 62 65 ata.SQLite to be 79a0: 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 used... 79b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 79c0: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 79d0: 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 t invoke Interpr 79e0: 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 5b eter.GetActive [ 79f0: 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 expr {$native ?
7a00: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
7a10: 20 20 20 20 20 20 20 22 41 64 64 52 75 6e 74 69         "AddRunti
7a20: 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22 52 65 6d  meOption" : "Rem
7a30: 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  oveRuntimeOption
7a40: 22 7d 5d 20 20 6e 61 74 69 76 65 0d 0a 0d 0a 20  "}]  native....
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
7a60: 65 74 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 24  et ::test_year $7a70: 79 65 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 year.. 7a80: 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 set ::test 7a90: 5f 70 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 _platform$platf
7aa0: 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  orm..
7ab0: 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f       set ::test_
7ac0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 63  configuration $c 7ad0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 0d 0a onfiguration.... 7ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7af0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
7b00: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b20: 20 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64    "yes, selected
7b30: 20 28 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69   (" [expr {$nati 7b40: 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a ve ? "native/" : 7b50: 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 ""}] \.. 7b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 [ex 7b70: 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 pr {[string leng 7b80: 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 th$platform] >
7b90: 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20  0 ? [appendArgs
7ba0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
7bb0: 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d         $platform 7bc0: 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 /] : ""}]$year
7bd0: 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f   / $configuratio 7be0: 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 n ")\n"].... 7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 7c00: 72 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rn.. 7c10: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 7c20: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 7c30: 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e s$channel yes\n
7c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
7c50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
7c60: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
7c70: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 7c80: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 annel no\n.. 7c90: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 7ca0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 7cb0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. }.. 7cc0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 7cd0: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62 heckForSQLiteLib 7ce0: 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 6c 20 7d rary { channel } 7cf0: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 {.. tputs 7d00: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63$channel "---- c
7d10: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69  hecking for SQLi
7d20: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e  te core library.
7d30: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66  .. "....      if
7d40: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
7d50: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
7d60: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
7d70: 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d  NonPublic System
7d80: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
7d90: 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 20 20 20  ite3 \..
7da0: 20 20 20 20 20 20 53 51 4c 69 74 65 56 65 72 73        SQLiteVers
7db0: 69 6f 6e 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d  ion} version] ==
7dc0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
7dd0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
7de0: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
7df0: 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 72  the returned ver
7e00: 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20  sion was null.
7e10: 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65  If so, make it e
7e20: 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  asy..        #
7e30: 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20       to spot...
7e40: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
7e50: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
7e60: 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d  ngth $version] = 7e70: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 7e80: 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69 set versi 7e90: 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 on null.. 7ea0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 7eb0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 7ec0: 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72 Attempt to quer 7ed0: 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 y the Fossil sou 7ee0: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 66 rce identifier f 7ef0: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 or the SQLite.. 7f00: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 7f10: 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 ore library... 7f20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 7f30: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f o 7f50: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 7f60: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 ags +NonPublic S 7f70: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 7f80: 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 e.SQLite3 \.. 7f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c SQL 7fa0: 69 74 65 53 6f 75 72 63 65 49 64 7d 20 73 6f 75 iteSourceId} sou 7fb0: 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a rceId]} then {.. 7fc0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 7fd0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 # NOTE: W 7fe0: 65 20 66 61 69 6c 65 64 20 74 6f 20 71 75 65 72 e failed to quer 7ff0: 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 y the Fossil sou 8000: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 2e 0d rce identifier.. 8010: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 8020: 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 set sour 8030: 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 ceId unknown.. 8040: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 8050: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 8060: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 8070: 68 65 20 72 65 74 75 72 6e 65 64 20 46 6f 73 73 he returned Foss 8080: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 il source identi 8090: 66 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e 20 20 fier was null. 80a0: 49 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 If.. # 80b0: 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 so, make it 80c0: 65 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 easy to spot... 80d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 80e0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 80f0: 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d 20 ngth$sourceId]
8100: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
8110: 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72          set sour
8120: 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20  ceId null..
8130: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
8140: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
8150: 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69  E: Yes, the SQLi
8160: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library
8170: 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 76  appears to be av
8180: 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  ailable...
8190: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64    #..        add
81a0: 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74  Constraint SQLit
81b0: 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e....        tpu
81c0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 81d0: 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 endArgs "yes (" 81e0: 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73 6f$version " " $so 81f0: 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 urceId ")\n"].. 8200: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 8210: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
8220: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..
8230: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
8240: 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72     proc checkFor
8250: 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 7b 20  SQLiteInterop {
8260: 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20  channel } {..
8270: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 8280: 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 l "---- checking 8290: 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e 74 65 for SQLite inte 82a0: 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 rop assembly... 82b0: 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ".... if {[ 82c0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 82d0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 82e0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 82f0: 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 Public System.Da 8300: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 8310: 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 3 \.. 8320: 20 20 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f InteropVersio 8330: 6e 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 n} version] == 0 8340: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 8350: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 8360: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th 8370: 65 20 72 65 74 75 72 6e 65 64 20 76 65 72 73 69 e returned versi 8380: 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 on was null. If 8390: 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 so, make it eas 83a0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 83b0: 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 to spot... 83c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 83d0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 83e0: 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 th$version] ==
83f0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
8400: 20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e       set version
8410: 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d   null..        }
8420: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
8430: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
8440: 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72 79 20  ttempt to query
8450: 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 63  the Fossil sourc
8460: 65 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72  e identifier for
8470: 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20   the SQLite..
8480: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 72       #       cor
8490: 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  e library...
84a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
84b0: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
84c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
84d0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
84e0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73  s +NonPublic Sys
84f0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
8500: 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 20  SQLite3 \..
8510: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 65 72             Inter
8520: 6f 70 53 6f 75 72 63 65 49 64 7d 20 73 6f 75 72  opSourceId} sour
8530: 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ceId]} then {..
8540: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
8550: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65        # NOTE: We
8560: 20 66 61 69 6c 65 64 20 74 6f 20 71 75 65 72 79   failed to query
8570: 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72   the Fossil sour
8580: 63 65 20 69 64 65 6e 74 69 66 69 65 72 2e 0d 0a  ce identifier...
8590: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
85a0: 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63         set sourc
85b0: 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20  eId unknown..
85c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
85d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
85e0: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
85f0: 65 20 72 65 74 75 72 6e 65 64 20 46 6f 73 73 69  e returned Fossi
8600: 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66  l source identif
8610: 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49  ier was null.  I
8620: 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  f..        #
8630: 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65     so, make it e
8640: 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20  asy to spot...
8650: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8660: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
8670: 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d 20 3d  gth $sourceId] = 8680: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 8690: 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 set sourc 86a0: 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 eId null.. 86b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # 86c0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 86d0: 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 74 : Yes, the SQLit 86e0: 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 e interop assemb 86f0: 6c 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 ly appears to be 8700: 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 available... 8710: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8720: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 addConstraint SQ 8730: 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a 0d 0a 20 LiteInterop.... 8740: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
8750: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
8760: 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69  s "yes (" $versi 8770: 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 on " "$sourceId
8780: 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d   ")\n"]..      }
8790: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
87a0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 87b0: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 no\n.. }.. 87c0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 87d0: 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 c checkForSQLite 87e0: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 7b DefineConstant { 87f0: 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 channel name } 8800: 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 {.. tputs$
8810: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
8820: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
8830: 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
8840: 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  for System.Data.
8850: 53 51 4c 69 74 65 20 64 65 66 69 6e 65 20 63 6f  SQLite define co
8860: 6e 73 74 61 6e 74 20 5c 22 22 20 24 6e 61 6d 65  nstant \"" $name 8870: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 5c \.. "\ 8880: 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 "... "].... 8890: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 88a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a obj 88b0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 88c0: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 s +NonPublic Sys 88d0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 88e0: 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 SQLite3 \.. 88f0: 20 20 20 20 20 20 20 20 20 44 65 66 69 6e 65 43 DefineC 8900: 6f 6e 73 74 61 6e 74 73 7d 20 64 65 66 69 6e 65 onstants} define 8910: 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d Constants] == 0} 8920: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 8930: 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 if {[lsearch -e 8940: 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 24 64 65 xact -nocase$de
8950: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 20 24 6e  fineConstants $n 8960: 61 6d 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e ame] != -1} then 8970: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 8980: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 8990: 45 3a 20 59 65 73 2c 20 74 68 69 73 20 64 65 66 E: Yes, this def 89a0: 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 77 61 73 ine constant was 89b0: 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 20 74 68 enabled when th 89c0: 65 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 e managed.. 89d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 # ass 89e0: 65 6d 62 6c 79 20 77 61 73 20 63 6f 6d 70 69 6c embly was compil 89f0: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ed... # 8a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 .. addC 8a10: 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 8a20: 64 41 72 67 73 20 64 65 66 69 6e 65 43 6f 6e 73 dArgs defineCons 8a30: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 tant.System.Data 8a40: 2e 53 51 4c 69 74 65 2e 20 24 6e 61 6d 65 5d 0d .SQLite.$name].
8a50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  ...          tpu
8a60: 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c  ts $channel yes\ 8a70: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 n.. } els 8a80: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 e {.. t 8a90: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f puts$channel no
8aa0: 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  \n..        }..
8ab0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
8ac0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 8ad0: 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e 0d 0a 20 annel error\n.. 8ae0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 8af0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 61 .. proc getDa 8b00: 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 7b 7d 20 teTimeFormat {} 8b10: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 8b20: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 # NOTE: This p 8b30: 72 6f 63 65 64 75 72 65 20 73 69 6d 70 6c 79 20 rocedure simply 8b40: 72 65 74 75 72 6e 73 20 74 68 65 20 22 64 65 66 returns the "def 8b50: 61 75 6c 74 22 20 44 61 74 65 54 69 6d 65 20 66 ault" DateTime f 8b60: 6f 72 6d 61 74 20 75 73 65 64 0d 0a 20 20 20 20 ormat used.. 8b70: 20 20 23 20 20 20 20 20 20 20 62 79 20 74 68 65 # by the 8b80: 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 8b90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 8ba0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 8bb0: 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d datetime_format] 8bc0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 8bd0: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 8be0: 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d$::datetime_form
8bf0: 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  at] > 0} then {.
8c00: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
8c10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
8c20: 72 6e 20 74 68 65 20 6d 61 6e 75 61 6c 6c 79 20  rn the manually
8c30: 6f 76 65 72 72 69 64 64 65 6e 20 76 61 6c 75 65  overridden value
8c40: 20 66 6f 72 20 74 68 65 20 44 61 74 65 54 69 6d   for the DateTim
8c50: 65 20 66 6f 72 6d 61 74 2e 0d 0a 20 20 20 20 20  e format...
8c60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
8c70: 74 75 72 6e 20 24 3a 3a 64 61 74 65 74 69 6d 65  turn $::datetime 8c80: 5f 66 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 7d _format.. } 8c90: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 8ca0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 8cb0: 54 45 3a 20 52 65 74 75 72 6e 20 61 6e 20 49 53 TE: Return an IS 8cc0: 4f 38 36 30 31 20 44 61 74 65 54 69 6d 65 20 66 O8601 DateTime f 8cd0: 6f 72 6d 61 74 20 63 6f 6d 70 61 74 69 62 6c 65 ormat compatible 8ce0: 20 77 69 74 68 20 53 51 4c 69 74 65 2c 0d 0a 20 with SQLite,.. 8cf0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 # S 8d00: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 8d10: 65 2c 20 61 6e 64 20 73 75 69 74 61 62 6c 65 20 e, and suitable 8d20: 66 6f 72 20 72 6f 75 6e 64 2d 74 72 69 70 70 69 for round-trippi 8d30: 6e 67 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 ng with the.. 8d40: 20 20 20 20 20 23 20 20 20 20 20 20 20 44 61 74 # Dat 8d50: 65 54 69 6d 65 20 63 6c 61 73 73 20 6f 66 20 74 eTime class of t 8d60: 68 65 20 66 72 61 6d 65 77 6f 72 6b 2e 20 20 49 he framework. I 8d70: 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 f this value is 8d80: 63 68 61 6e 67 65 64 2c 0d 0a 20 20 20 20 20 20 changed,.. 8d90: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 6f 75 # variou 8da0: 73 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c s tests may fail 8db0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 8dc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 79 79 return "yy 8dd0: 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 yy-MM-dd HH:mm:s 8de0: 73 2e 46 46 46 46 46 46 46 4b 22 0d 0a 20 20 20 s.FFFFFFFK".. 8df0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 8e00: 20 20 20 20 70 72 6f 63 20 65 6e 75 6d 65 72 61 proc enumera 8e10: 62 6c 65 54 6f 4c 69 73 74 20 7b 20 65 6e 75 6d bleToList { enum 8e20: 65 72 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 erable } {.. 8e30: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 set result [li 8e40: 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 st].... if 8e50: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 8e60: 24 65 6e 75 6d 65 72 61 62 6c 65 5d 20 3d 3d 20$enumerable] ==
8e70: 30 20 7c 7c 20 24 65 6e 75 6d 65 72 61 62 6c 65  0 || $enumerable 8e80: 20 65 71 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e eq "null"} then 8e90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 8ea0: 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 rn$result..
8eb0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a    }....      obj
8ec0: 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69  ect foreach -ali
8ed0: 61 73 20 69 74 65 6d 20 24 65 6e 75 6d 65 72 61  as item $enumera 8ee0: 62 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 ble {.. i 8ef0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 8f00: 68 20 24 69 74 65 6d 5d 20 3e 20 30 7d 20 74 68 h$item] > 0} th
8f10: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
8f20: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
8f30: 24 69 74 65 6d 20 54 6f 53 74 72 69 6e 67 5d 0d  $item ToString]. 8f40: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 8f50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 8f60: 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 urn$result..
8f70: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
8f80: 63 61 74 63 68 41 6e 64 52 65 74 75 72 6e 20 7b  catchAndReturn {
8f90: 20 73 63 72 69 70 74 20 7b 73 74 61 63 6b 54 72   script {stackTr
8fa0: 61 63 65 20 66 61 6c 73 65 7d 20 7b 73 74 72 69  ace false} {stri
8fb0: 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20  ct true} } {..
8fc0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
8fd0: 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68  OTE: Evaluate th
8fe0: 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 65  e script provide
8ff0: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20  d by our caller
9000: 69 6e 20 74 68 65 69 72 20 63 6f 6e 74 65 78 74  in their context
9010: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
9020: 20 63 61 70 74 75 72 69 6e 67 20 62 6f 74 68 20   capturing both
9030: 74 68 65 20 72 65 73 75 6c 74 20 61 6e 64 20 74  the result and t
9040: 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  he return code..
9050: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
9060: 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20  set code [catch
9070: 7b 75 70 6c 65 76 65 6c 20 31 20 24 73 63 72 69  {uplevel 1 $scri 9080: 70 74 7d 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 pt} result].... 9090: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 90a0: 4e 4f 54 45 3a 20 44 69 64 20 74 68 65 20 73 63 NOTE: Did the sc 90b0: 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 ript provided by 90c0: 20 6f 75 72 20 63 61 6c 6c 65 72 20 4e 4f 54 20 our caller NOT 90d0: 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72 3f 0d raise an error?. 90e0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 90f0: 69 66 20 7b 24 73 74 72 69 63 74 20 26 26 20 24 if {$strict && $9100: 63 6f 64 65 20 3d 3d 20 30 20 7c 7c 20 21 24 73 code == 0 || !$s
9110: 74 72 69 63 74 20 26 26 20 24 63 6f 64 65 20 21  trict && $code ! 9120: 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 1} then {.. 9130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9140: 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2e # NOTE: Success. 9150: 20 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 Return a list 9160: 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 with the return 9170: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 code and the res 9180: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ult... #. 9190: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 91a0: 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 [list$code $res 91b0: 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c ult].. } el 91c0: 73 65 69 66 20 7b 24 73 74 61 63 6b 54 72 61 63 seif {$stackTrac
91d0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
91e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
91f0: 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20  NOTE: Failure.
9200: 4f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73  Our caller wants
9210: 20 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72   a full stack tr
9220: 61 63 65 20 28 69 66 20 61 70 70 6c 69 63 61 62  ace (if applicab
9230: 6c 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  le),..        #
9240: 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 20 6c        return a l
9250: 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74  ist with the ret
9260: 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65  urn code and the
9270: 20 72 65 73 75 6c 74 20 76 65 72 62 61 74 69 6d   result verbatim
9280: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
9290: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
92a0: 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74  st $code$result
92b0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
92c0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
92d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61        # NOTE: Fa
92e0: 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c  ilure.  Our call
92f0: 65 72 20 64 6f 65 73 20 6e 6f 74 20 77 61 6e 74  er does not want
9300: 20 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72   a full stack tr
9310: 61 63 65 20 28 69 66 0d 0a 20 20 20 20 20 20 20  ace (if..
9320: 20 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 61   #       applica
9330: 62 6c 65 29 2c 20 72 65 74 75 72 6e 20 61 20 6c  ble), return a l
9340: 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74  ist with the ret
9350: 75 72 6e 20 63 6f 64 65 2c 20 74 68 65 20 65 72  urn code, the er
9360: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ror..        #
9370: 20 20 20 20 20 63 6f 64 65 20 66 6f 72 20 74 68       code for th
9380: 65 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20 61  e interpreter, a
9390: 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  nd the error mes
93a0: 73 61 67 65 20 75 70 20 74 6f 20 74 68 65 0d 0a  sage up to the..
93b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
93c0: 70 6f 69 6e 74 20 77 68 65 72 65 20 74 68 65 20  point where the
93d0: 73 74 61 63 6b 20 74 72 61 63 65 20 73 68 6f 75  stack trace shou
93e0: 6c 64 20 73 74 61 72 74 2e 0d 0a 20 20 20 20 20  ld start...
93f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
9400: 74 20 69 6e 64 65 78 20 5b 73 74 72 69 6e 67 20  t index [string
9410: 66 69 72 73 74 20 22 20 20 20 61 74 20 22 20 24  first "   at " $9420: 72 65 73 75 6c 74 5d 3b 20 23 20 48 41 43 4b 3a result]; # HACK: 9430: 20 52 65 6c 69 61 62 6c 65 3f 0d 0a 0d 0a 20 20 Reliable?.... 9440: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 return [li 9450: 73 74 20 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f st$code $::erro 9460: 72 43 6f 64 65 20 5b 65 78 70 72 20 7b 24 69 6e rCode [expr {$in
9470: 64 65 78 20 21 3d 20 2d 31 20 3f 20 5c 0d 0a 20  dex != -1 ? \..
9480: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
9490: 6e 67 20 74 72 69 6d 20 5b 73 74 72 69 6e 67 20  ng trim [string
94a0: 72 61 6e 67 65 20 24 72 65 73 75 6c 74 20 30 20  range $result 0 94b0: 24 69 6e 64 65 78 5d 5d 20 3a 20 24 72 65 73 75$index]] : $resu 94c0: 6c 74 7d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a lt}]].. }.. 94d0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 94e0: 6f 63 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 oc compileCSharp 94f0: 57 69 74 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 With {.. 9500: 20 20 20 20 74 65 78 74 20 6d 65 6d 6f 72 79 20 text memory 9510: 73 79 6d 62 6f 6c 73 20 73 74 72 69 63 74 20 72 symbols strict r 9520: 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 65 72 esultsVarName er 9530: 72 6f 72 73 56 61 72 4e 61 6d 65 20 66 69 6c 65 rorsVarName file 9540: 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 Names.. 9550: 20 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20 20 20 args } {.. 9560: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 9570: 54 45 3a 20 53 69 6e 63 65 20 77 65 20 61 72 65 TE: Since we are 9580: 20 67 6f 69 6e 67 20 74 6f 20 75 73 65 20 74 68 going to use th 9590: 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20 61 is method name a 95a0: 20 6c 6f 74 2c 20 61 73 73 69 67 6e 20 69 74 20 lot, assign it 95b0: 74 6f 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 to a.. # 95c0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 66 69 72 variable fir 95d0: 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 st... #.. 95e0: 20 20 20 20 73 65 74 20 61 64 64 20 52 65 66 65 set add Refe 95f0: 72 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 73 rencedAssemblies 9600: 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 20 20 23 0d .Add.... #. 9610: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 9620: 72 65 61 74 65 20 74 68 65 20 62 61 73 65 20 63 reate the base c 9630: 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 ommand to evalua 9640: 74 65 20 61 6e 64 20 61 64 64 20 74 68 65 20 70 te and add the p 9650: 72 6f 70 65 72 74 79 20 73 65 74 74 69 6e 67 73 roperty settings 9660: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 9670: 74 68 61 74 20 61 72 65 20 61 6c 6d 6f 73 74 20 that are almost 9680: 61 6c 77 61 79 73 20 6e 65 65 64 65 64 20 62 79 always needed by 9690: 20 6f 75 72 20 75 6e 69 74 20 74 65 73 74 73 20 our unit tests 96a0: 28 69 2e 65 2e 20 74 68 65 20 53 79 73 74 65 6d (i.e. the System 96b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 96c0: 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 20 and System.Data 96d0: 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e assembly referen 96e0: 63 65 73 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ces)... #.. 96f0: 20 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e set comman 9700: 64 20 5b 6c 69 73 74 20 63 6f 6d 70 69 6c 65 43 d [list compileC 9710: 53 68 61 72 70 20 24 74 65 78 74 20 24 6d 65 6d Sharp$text $mem 9720: 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73 74 ory$symbols $st 9730: 72 69 63 74 20 72 65 73 75 6c 74 73 20 5c 0d 0a rict results \.. 9740: 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 73 errors 9750: 20 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c 6c$add System.dll
9760: 20 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61 74   $add System.Dat 9770: 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 a.dll$add Syste
9780: 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20  m.Xml.dll]....
9790: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
97a0: 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 68 65  OTE: Add all the
97b0: 20 70 72 6f 76 69 64 65 64 20 66 69 6c 65 20 6e   provided file n
97c0: 61 6d 65 73 20 61 73 20 61 73 73 65 6d 62 6c 79  ames as assembly
97d0: 20 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20   references...
97e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72      #..      for
97f0: 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 66  each fileName $f 9800: 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 9810: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d lappend comm 9820: 61 6e 64 20 24 61 64 64 20 5b 67 65 74 42 69 6e and$add [getBin
9830: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c  aryFileName $fil 9840: 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d eName].. }. 9850: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 9860: 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 # NOTE: Add th 9870: 65 20 65 78 74 72 61 20 61 72 67 75 6d 65 6e 74 e extra argument 9880: 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 s, if any, to th 9890: 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 e command to eva 98a0: 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d luate... #. 98b0: 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 . eval lapp 98c0: 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 end command$arg
98d0: 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  s....      #..
98e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61      # NOTE: Alia
98f0: 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c  s the compiler l
9900: 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 61 6e 64  ocal results and
9910: 20 65 72 72 6f 72 73 20 76 61 72 69 61 62 6c 65   errors variable
9920: 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  s to the..
9930: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65  #       variable
9940: 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 65 64 20   names provided
9950: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a  by our caller...
9960: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
9970: 70 76 61 72 20 31 20 24 72 65 73 75 6c 74 73 56  pvar 1 $resultsV 9980: 61 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 0d 0a arName results.. 9990: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 65 upvar 1$e
99a0: 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 65 72 72  rrorsVarName err
99b0: 6f 72 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  ors....      #..
99c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76        # NOTE: Ev
99d0: 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e 73 74  aluate the const
99e0: 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65 43  ructed [compileC
99f0: 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20 61  Sharp] command a
9a00: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d 0a 20  nd return the..
9a10: 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73       #       res
9a20: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ult...      #..
9a30: 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d 61       eval $comma 9a40: 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 nd.. }..... 9a50: 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79 44 proc isMemoryD 9a60: 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b b { fileName } { 9a70: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 9a80: 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 # NOTE: Is the 9a90: 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61 specified databa 9aa0: 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 65 61 se file name rea 9ab0: 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 lly an in-memory 9ac0: 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 20 20 database?.. 9ad0: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 #.. retur 9ae0: 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e 61 n [expr {$fileNa
9af0: 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a 22  me eq ":memory:"
9b00: 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
9b10: 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24   [string range $9b20: 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20 65 fileName 0 12] e 9b30: 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 3a q "file::memory: 9b40: 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 "}].. }..... 9b50: 20 20 20 70 72 6f 63 20 69 73 54 61 62 6c 65 49 proc isTableI 9b60: 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61 72 4e nDb { name {varN 9b70: 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 ame db} } {.. 9b80: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 9b90: 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 TE: Refer to the 9ba0: 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 specified varia 9bb0: 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 ble (e.g. "db") 9bc0: 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f in the context o 9bd0: 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 f our.. # 9be0: 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 49 74 caller. It 9bf0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 64 61 contains the da 9c00: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f tabase connectio 9c10: 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20 77 69 n handle that wi 9c20: 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 ll be.. # 9c30: 20 20 20 20 20 75 73 65 64 20 74 6f 20 65 78 65 used to exe 9c40: 63 75 74 65 20 74 68 65 20 71 75 65 72 79 20 75 cute the query u 9c50: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 sed to determine 9c60: 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 if the named ta 9c70: 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 ble is.. # 9c80: 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e present in 9c90: 20 74 68 61 74 20 64 61 74 61 62 61 73 65 2e 0d that database.. 9ca0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9cb0: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
9cc0: 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a   db....      #..
9cd0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 78        # NOTE: Ex
9ce0: 65 63 75 74 65 20 74 68 65 20 53 51 4c 20 71 75  ecute the SQL qu
9cf0: 65 72 79 20 61 67 61 69 6e 73 74 20 74 68 65 20  ery against the
9d00: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
9d10: 62 6c 65 20 74 6f 20 63 68 65 63 6b 20 69 66 0d  ble to check if.
9d20: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
9d30: 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69  he named table i
9d40: 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 72 65  s present and re
9d50: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
9d60: 20 69 74 20 69 73 2e 0d 0a 20 20 20 20 20 20 23   it is...      #
9d70: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
9d80: 65 78 70 72 20 7b 5b 73 71 6c 20 65 78 65 63 75  expr {[sql execu
9d90: 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
9da0: 61 72 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20  ar $db \.. 9db0: 20 20 20 20 22 53 45 4c 45 43 54 20 43 4f 55 4e "SELECT COUN 9dc0: 54 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 T(*) FROM sqlite 9dd0: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 _master WHERE ty 9de0: 70 65 20 3d 20 27 74 61 62 6c 65 27 20 41 4e 44 pe = 'table' AND 9df0: 20 6e 61 6d 65 20 3d 20 3f 3b 22 20 5c 0d 0a 20 name = ?;" \.. 9e00: 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 70 [list p 9e10: 61 72 61 6d 31 20 53 74 72 69 6e 67 20 24 6e 61 aram1 String$na
9e20: 6d 65 5d 5d 20 3e 20 30 7d 5d 0d 0a 20 20 20 20  me]] > 0}]..
9e30: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
9e40: 72 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b  rimSql { sql } {
9e50: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
9e60: 72 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b  regsub -all -- {
9e70: 5c 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69  \s+} [string tri
9e80: 6d 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20  m $sql] " "].. 9e90: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 9ea0: 20 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 executeSql { sq 9eb0: 6c 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d l {execute none} 9ec0: 20 7b 66 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d {fileName ""} } 9ed0: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 {.. if {[s 9ee0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 tring length$fi
9ef0: 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68  leName] == 0} th
9f00: 65 6e 20 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65  en {set fileName
9f10: 20 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20   :memory:}..
9f20: 20 20 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e    setupDb $fileN 9f30: 61 6d 65 20 22 22 20 22 22 20 22 22 20 22 22 20 ame "" "" "" "" 9f40: 22 22 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 "" false false f 9f50: 61 6c 73 65 20 66 61 6c 73 65 20 6d 65 6d 44 62 alse false memDb 9f60: 0d 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d .... try {. 9f70: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 9f80: 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 [sql execute -ex 9f90: 65 63 75 74 65 20 24 65 78 65 63 75 74 65 20 24 ecute$execute $9fa0: 6d 65 6d 44 62 20 24 73 71 6c 5d 0d 0a 20 20 20 memDb$sql]..
9fb0: 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a     } finally {..
9fc0: 20 20 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44          cleanupD
9fd0: 62 20 24 66 69 6c 65 4e 61 6d 65 20 6d 65 6d 44  b $fileName memD 9fe0: 62 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 b false false.. 9ff0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... a000: 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 .. proc setup a010: 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 Db {.. a020: 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 fileName {mode a030: 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f ""} {dateTimeFo a040: 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 65 54 69 rmat ""} {dateTi a050: 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 meKind ""} {flag a060: 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 s ""}.. a070: 20 20 20 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 {extra ""} {q a080: 75 61 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 65 ualify true} {de a090: 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 72 69 20 lete true} {uri a0a0: 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 false}.. a0b0: 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 {temporary t a0c0: 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 rue} {varName db a0d0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. a0e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi a0f0: 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 rst, see if our a100: 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 caller has reque a110: 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 sted an in-memor a120: 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 y database... a130: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set a140: 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f isMemory [isMemo a150: 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d ryDb$fileName].
a160: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
a170: 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f    # NOTE: For no
a180: 77 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61  w, all test data
a190: 62 61 73 65 73 20 75 73 65 64 20 62 79 20 74 68  bases used by th
a1a0: 65 20 74 65 73 74 20 73 75 69 74 65 20 61 72 65  e test suite are
a1b0: 20 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 20 23   placed..      #
a1c0: 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20         into the
a1d0: 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f  database directo
a1e0: 72 79 2e 20 20 45 61 63 68 20 64 61 74 61 62 61  ry.  Each databa
a1f0: 73 65 20 61 6e 64 20 72 65 6c 61 74 65 64 20 66  se and related f
a200: 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20  iles..      #
a210: 20 20 20 20 75 73 65 64 20 62 79 20 61 20 74 65      used by a te
a220: 73 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6c 65  st should be cle
a230: 61 6e 65 64 20 75 70 20 62 79 20 74 68 61 74 20  aned up by that
a240: 74 65 73 74 20 75 73 69 6e 67 20 74 68 65 0d 0a  test using the..
a250: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 63        #       "c
a260: 6c 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65 64  leanupDb" proced
a270: 75 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20  ure, below...
a280: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
a290: 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71  !$isMemory &&$q
a2a0: 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a  ualify} then {..
a2b0: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
a2c0: 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  Name [file join
a2d0: 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
a2e0: 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69  ctory] [file tai
a2f0: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20  l $fileName]].. a300: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... a310: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: a320: 20 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65 6c By default, del a330: 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 ete any pre-exis a340: 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 ting database wi a350: 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 th the same file a360: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # a370: 6e 61 6d 65 20 69 66 20 69 74 20 63 75 72 72 65 name if it curre a380: 6e 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 20 ntly exists... a390: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if a3a0: 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 {!$isMemory && $a3b0: 64 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 delete && [file a3c0: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
a3d0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
a3e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
a3f0: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
a400: 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d   delete any pre-
a410: 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
a420: 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same
a430: 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  file..        #
a440: 20 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20        name...
a450: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a460: 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65  if {[catch {file
a470: 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d   delete $fileNam a480: 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 e} error]} then a490: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. a4a0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE a4b0: 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 : We somehow fai a4c0: 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 led to delete th a4d0: 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 e file, report w a4e0: 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 hy... # a4f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput a500: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
a510: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
a520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
a530: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
a540: 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64  iled to delete d
a550: 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22  atabase file \""
a560: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20   $fileName \.. a570: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 "\" a580: 64 75 72 69 6e 67 20 73 65 74 75 70 2c 20 65 72 during setup, er a590: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
a5a0: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
a5b0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
a5c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
a5d0: 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68  OTE: Refer to th
a5e0: 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69  e specified vari
a5f0: 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29  able (e.g. "db")
a600: 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context
a610: 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20  of our..      #
a620: 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54        caller.  T
a630: 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65  he handle to the
a640: 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65   opened database
a650: 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20   will be stored
a660: 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d  there...      #.
a670: 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $a680: 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 varName db.... a690: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N a6a0: 4f 54 45 3a 20 53 74 61 72 74 20 62 75 69 6c 64 OTE: Start build a6b0: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 ing the connecti a6c0: 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 on string. The a6d0: 6f 6e 6c 79 20 72 65 71 75 69 72 65 64 20 70 6f only required po a6e0: 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 rtion.. # a6f0: 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e of the conn a700: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 ection string is a710: 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 the data source a720: 2c 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 , which contains a730: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # a740: 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69 6c database fil a750: 65 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 e name itself. a760: 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 If our caller wa a770: 6e 74 73 20 74 6f 20 75 73 65 20 61 20 55 52 49 nts to use a URI a780: 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 as.. # a790: 20 20 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 the data sour a7a0: 63 65 2c 20 75 73 65 20 74 68 65 20 46 75 6c 6c ce, use the Full a7b0: 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 Uri connection s a7c0: 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20 74 tring property t a7d0: 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 o.. # a7e0: 20 70 72 65 76 65 6e 74 20 74 68 65 20 64 61 74 prevent the dat a7f0: 61 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20 a source string a800: 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c from being mangl a810: 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. a820: 20 20 20 20 69 66 20 7b 24 75 72 69 7d 20 74 68 if {$uri} th
a830: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  en {..        se
a840: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75  t connection {Fu
a850: 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65  llUri=${fileName a860: 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }}.. } else a870: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set a880: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 connection {Data a890: 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 Source=${fileNa
a8a0: 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  me}}..      }...
a8b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
a8c0: 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 68  # NOTE: Since th
a8d0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 68 61 73  is procedure has
a8e0: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77   no special know
a8f0: 6c 65 64 67 65 20 6f 66 20 77 68 61 74 20 74 68  ledge of what th
a900: 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20  e default..
a910: 20 23 20 20 20 20 20 20 20 73 65 74 74 69 6e 67   #       setting
a920: 20 69 73 20 66 6f 72 20 74 68 65 20 54 6f 46 75   is for the ToFu
a930: 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f  llPath connectio
a940: 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 79  n string propery
a950: 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20  , always..
a960: 23 20 20 20 20 20 20 20 61 64 64 20 74 68 65 20  #       add the
a970: 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 62  value we know ab
a980: 6f 75 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65  out to the conne
a990: 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20  ction string...
a9a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70       #..      ap
a9b0: 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  pend connection
a9c0: 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71  {;ToFullPath=${q a9d0: 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 ualify}}.... a9e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT a9f0: 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 E: If our caller aa00: 20 73 70 65 63 69 66 69 65 64 20 61 20 6a 6f 75 specified a jou aa10: 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 rnal mode, add t aa20: 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 he necessary por aa30: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 tion.. # aa40: 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 of the conne aa50: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 ction string now aa60: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. aa70: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le aa80: 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d ngth$mode] > 0}
aa90: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
aaa0: 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69   append connecti
aab0: 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64  on {;Journal Mod
aac0: 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20  e=${mode}}.. aad0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. aae0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If aaf0: 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 our caller spec ab00: 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 ified a DateTime ab10: 20 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 68 65 format, add the ab20: 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 necessary.. ab30: 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f # portio ab40: 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 n of the connect ab50: 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d ion string now.. ab60: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. ab70: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng ab80: 74 68 20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d th$dateTimeForm
ab90: 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  at] > 0} then {.
aba0: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20  .        append
abb0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74  connection {;Dat
abc0: 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61  eTimeFormat=${da abd0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a teTimeFormat}}.. abe0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... abf0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE ac00: 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 : If our caller ac10: 73 70 65 63 69 66 69 65 64 20 61 20 44 61 74 65 specified a Date ac20: 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 TimeKind, add th ac30: 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 e necessary port ac40: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ion.. # ac50: 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 of the connec ac60: 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e tion string now. ac70: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. ac80: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len ac90: 67 74 68 20 24 64 61 74 65 54 69 6d 65 4b 69 6e gth$dateTimeKin
aca0: 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  d] > 0} then {..
acb0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63          append c
acc0: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65  onnection {;Date
acd0: 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54  TimeKind=${dateT ace0: 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 imeKind}}.. acf0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. ad00: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If ad10: 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 67 6c there are any gl ad20: 6f 62 61 6c 20 28 70 65 72 20 74 65 73 74 20 72 obal (per test r ad30: 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 un) connection f ad40: 6c 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d 0a lags currently.. ad50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se ad60: 74 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77 20 t, use them now ad70: 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e 69 (i.e. by combini ad80: 6e 67 20 74 68 65 6d 20 77 69 74 68 20 74 68 65 ng them with the ad90: 20 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d 0a ones for this.. ada0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co adb0: 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 nnection)... adc0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ add0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f info exists ::co ade0: 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 nnection_flags] adf0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. ae00: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
ae10: 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61  ::connection_fla
ae20: 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  gs] > 0} then {.
ae30: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
ae40: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
ae50: 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 61 74 20   (and log) that
ae60: 77 65 20 64 65 74 65 63 74 65 64 20 73 6f 6d 65  we detected some
ae70: 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69   global connecti
ae80: 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20  on flags...
ae90: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
aea0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan aeb0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs aec0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " aed0: 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e ---- global conn aee0: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 64 65 74 ection flags det aef0: 65 63 74 65 64 3a 20 22 20 24 3a 3a 63 6f 6e 6e ected: "$::conn
af00: 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 6e 5d  ection_flags \n]
af10: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
af20: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
af30: 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65  ombine and/or re
af40: 70 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 63  place the connec
af50: 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74  tion flags and t
af60: 68 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 20  hen show the..
af70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65        #       ne
af80: 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20  w value...
af90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
afa0: 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46   flags [combineF
afb0: 6c 61 67 73 20 24 66 6c 61 67 73 20 24 3a 3a 63  lags $flags$::c
afc0: 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d  onnection_flags]
afd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74  ....        tput
afe0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe aff0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. b000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- b010: 2d 2d 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e -- combined conn b020: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 ection flags are b030: 3a 20 22 20 24 66 6c 61 67 73 20 5c 6e 5d 0d 0a : "$flags \n]..
b040: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
b050: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
b060: 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20  : If our caller
b070: 73 70 65 63 69 66 69 65 64 20 73 6f 6d 65 20 53  specified some S
b080: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
b090: 6c 61 67 73 2c 20 61 64 64 20 74 68 65 0d 0a 20  lags, add the..
b0a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 63       #       nec
b0b0: 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f  essary portion o
b0c0: 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
b0d0: 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20   string now...
b0e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
b0f0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
b100: 24 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68 65  $flags] > 0} the b110: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 n {.. app b120: 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b end connection { b130: 3b 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d ;Flags=${flags}}
b140: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
b150: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
b160: 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65  TE: If our calle
b170: 72 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 65  r specified an e
b180: 78 74 72 61 20 70 61 79 6c 6f 61 64 20 74 6f 20  xtra payload to
b190: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  the connection..
b1a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 74        #       st
b1b0: 72 69 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 20  ring, append it
b1c0: 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  now...      #..
b1d0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
b1e0: 20 6c 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20   length $extra] b1f0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. b200: 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e append conn b210: 65 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 ection \;$extra
b220: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
b230: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
b240: 54 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 74  TE: Open the dat
b250: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
b260: 20 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 68   now, placing th
b270: 65 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 20  e opaque handle
b280: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20  value..      #
b290: 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61       into the va
b2a0: 72 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 64  riable specified
b2b0: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   by our caller..
b2c0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
b2d0: 73 65 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e  set db [sql open
b2e0: 20 2d 74 79 70 65 20 53 51 4c 69 74 65 20 5b 73   -type SQLite [s
b2f0: 75 62 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  ubst $connection b300: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ]].... #.. b310: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e # NOTE: Con b320: 66 69 67 75 72 65 20 74 68 65 20 74 65 6d 70 6f figure the tempo b330: 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 66 rary directory f b340: 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 or the newly ope b350: 6e 65 64 20 64 61 74 61 62 61 73 65 0d 0a 20 20 ned database.. b360: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e # conn b370: 65 63 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 ection now unles b380: 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 s our caller for b390: 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 bids it... b3a0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 74 65 #.. if {$te
b3b0: 6d 70 6f 72 61 72 79 20 26 26 20 21 5b 69 6e 66  mporary && ![inf
b3c0: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65  o exists ::no(se
b3d0: 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74  tTemporaryDirect
b3e0: 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ory)]} then {..
b3f0: 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75         sql execu
b400: 74 65 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72  te $db [appendAr b410: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. b420: 20 20 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 "PRAGMA temp_s b430: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d tore_directory = b440: 20 5c 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 \"" [getTempora b450: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c ryDirectory] \"\ b460: 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ;].. }.... b470: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # b480: 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74 NOTE: Always ret b490: 75 72 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 urn the connecti b4a0: 6f 6e 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 on handle upon s b4b0: 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 uccess... # b4c0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
b4d0: 64 62 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  db..    }.....
b4e0: 20 20 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e    proc getDbConn
b4f0: 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d  ection { {varNam
b500: 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  e db} } {..
b510: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
b520: 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73  : Refer to the s
b530: 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c  pecified variabl
b540: 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e  e (e.g. "db") in
b550: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of
b560: 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  our..      #
b570: 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20     caller.  The
b580: 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61  handle to the da
b590: 74 61 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c  tabase previousl
b5a0: 79 20 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65  y opened via the
b5b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
b5c0: 5b 73 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64  [setupDb] proced
b5d0: 75 72 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74  ure should be st
b5e0: 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20  ored there...
b5f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61     #..      upva
b600: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d  r 1 $varName db. b610: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. b620: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 # NOTE: This r b630: 65 74 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e eturns the ADO.N b640: 45 54 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e ET IDbConnection b650: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 object instance b660: 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 for the.. b670: 23 20 20 20 20 20 20 20 73 70 65 63 69 66 69 65 # specifie b680: 64 20 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65 d databse handle b690: 2e 20 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67 . Since getting b6a0: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c this object rel b6b0: 69 65 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 ies upon.. b6c0: 23 20 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e # Eagle in b6d0: 74 65 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 ternals, great c b6e0: 61 72 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61 are should be ta b6f0: 6b 65 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73 ken to avoid dis b700: 70 6f 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 posing of.. b710: 20 23 20 20 20 20 20 20 20 74 68 69 73 20 6f 62 # this ob b720: 6a 65 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73 ject or otherwis b730: 65 20 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74 e putting it int b740: 6f 20 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 o an invalid sta b750: 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 te... #.. b760: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex b770: 69 73 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b ists db]} then { b780: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c b790: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. b7a0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i b7b0: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No b7c0: 6e 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 nPublic -objectf b7d0: 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 lags +NoDispose b7e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. b7f0: 20 20 20 2d 61 6c 69 61 73 20 49 6e 74 65 72 70 -alias Interp b800: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e reter.GetActive. b810: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d connections Item b820: 20 24 64 62 7d 20 5c 0d 0a 20 20 20 20 20 20 20$db} \..
b830: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 5d           result]
b840: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
b850: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
b860: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75        # NOTE: Su
b870: 63 63 65 73 73 2c 20 72 65 74 75 72 6e 20 74 68  ccess, return th
b880: 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20  e opaque object
b890: 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20  handle...
b8a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
b8b0: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a  return $result.. b8c0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { b8d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. b8e0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: b8f0: 20 46 61 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 Failure, report b900: 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 why... b910: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 #.. tp b920: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
b930: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
b940: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
b950: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
b960: 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 63 6f  failed to get co
b970: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle
b980: 66 6f 72 20 64 61 74 61 62 61 73 65 20 5c 22 22  for database \""
b990: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b9a0: 20 20 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72    $db "\", error b9b0: 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 : " \n\t$result
b9c0: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d   \n]..        }.
b9d0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
b9e0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 66 72 65  ....    proc fre
b9f0: 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20  eDbConnection {
ba00: 7b 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74  {varName connect
ba10: 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  ion} } {..
ba20: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
ba30: 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70   Refer to the sp
ba40: 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65  ecified variable
ba50: 20 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 69   (e.g. "connecti
ba60: 6f 6e 22 29 20 69 6e 20 74 68 65 0d 0a 20 20 20  on") in the..
ba70: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65     #       conte
ba80: 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72  xt of our caller
ba90: 2e 20 20 54 68 65 20 6f 70 61 71 75 65 20 6f 62  .  The opaque ob
baa0: 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 6f 72 20  ject handle for
bab0: 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a 20 20 20 20  an ADO.NET..
bac0: 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63    #       connec
bad0: 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20  tion previously
bae0: 72 65 74 75 72 6e 65 64 20 62 79 20 5b 67 65 74  returned by [get
baf0: 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73 68  DbConnection] sh
bb00: 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 23  ould be..      #
bb10: 20 20 20 20 20 20 20 73 74 6f 72 65 64 20 74 68         stored th
bb20: 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ere...      #..
bb30: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va bb40: 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e rName connection bb50: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. bb60: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem bb70: 70 74 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 pt to remove the bb80: 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 opaque object h bb90: 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65 20 69 andle from the i bba0: 6e 74 65 72 70 72 65 74 65 72 0d 0a 20 20 20 20 nterpreter.. bbb0: 20 20 23 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 # now. bbc0: 54 68 69 73 20 5b 6f 62 6a 65 63 74 20 64 69 73 This [object dis bbd0: 70 6f 73 65 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 pose] call will bbe0: 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 64 69 73 not actually dis bbf0: 70 6f 73 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 pose of the.. bc00: 20 20 20 23 20 20 20 20 20 20 20 75 6e 64 65 72 # under bc10: 6c 79 69 6e 67 20 6f 62 6a 65 63 74 20 62 65 63 lying object bec bc20: 61 75 73 65 20 74 68 65 20 2b 4e 6f 44 69 73 70 ause the +NoDisp bc30: 6f 73 65 20 66 6c 61 67 20 77 61 73 20 73 65 74 ose flag was set bc40: 20 6f 6e 20 69 74 0d 0a 20 20 20 20 20 20 23 20 on it.. # bc50: 20 20 20 20 20 20 64 75 72 69 6e 67 20 63 72 65 during cre bc60: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 61 ation of the opa bc70: 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c que object handl bc80: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. bc90: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi bca0: 73 74 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 sts connection] bcb0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. bcc0: 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 [catch {object d bcd0: 69 73 70 6f 73 65 20 24 63 6f 6e 6e 65 63 74 69 ispose$connecti
bce0: 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e  on} error]} then
bcf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
bd00: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57         # NOTE: W
bd10: 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64  e somehow failed
bd20: 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 68   to remove the h
bd30: 61 6e 64 6c 65 2c 20 72 65 70 6f 72 74 20 77 68  andle, report wh
bd40: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
bd50: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: bd60: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap bd70: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. bd80: 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA bd90: 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to bda0: 20 72 65 6d 6f 76 65 20 63 6f 6e 6e 65 63 74 69 remove connecti bdb0: 6f 6e 20 68 61 6e 64 6c 65 20 5c 22 22 20 24 63 on handle \""$c
bdc0: 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20  onnection \..
bdd0: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 65 72           "\", er
bde0: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err bdf0: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d or \n].. }. be00: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p be10: 72 6f 63 20 61 64 64 44 62 43 6f 6e 6e 65 63 74 roc addDbConnect be20: 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e ion { connection be30: 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 {varName db} } be40: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. be50: 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 # NOTE: Refer be60: 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 to the specified be70: 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 variable (e.g. be80: 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e "db") in the con be90: 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 text of our.. bea0: 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 # calle beb0: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 r... #.. bec0: 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
bed0: 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20  ame db....
bee0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
bef0: 20 43 72 65 61 74 65 20 61 20 63 6f 72 72 65 63   Create a correc
bf00: 74 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 6e 61  tly formatted na
bf10: 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  me for the datab
bf20: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ase connection t
bf30: 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  o..      #
bf40: 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 65   be added to the
bf50: 20 6c 69 73 74 20 6d 61 6e 61 67 65 64 20 62 79   list managed by
bf60: 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72   the Eagle inter
bf70: 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23  preter...      #
bf80: 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62 20 5b  ..      set db [
bf90: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
bfa0: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
bfb0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 45 61 67  \..          Eag
bfc0: 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50  le._Components.P
bfd0: 72 69 76 61 74 65 2e 46 6f 72 6d 61 74 4f 70 73  rivate.FormatOps
bfe0: 20 44 61 74 61 62 61 73 65 4f 62 6a 65 63 74 4e   DatabaseObjectN
bff0: 61 6d 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20  ame $connection c000: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c \.. SQL c010: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f iteConnection [o c020: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 bject invoke Int c030: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 erpreter.GetActi c040: 76 65 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 ve NextId]].... c050: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # c060: 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 64 61 NOTE: Add the da c070: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f tabase connectio c080: 6e 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 n provided by ou c090: 72 20 63 61 6c 6c 65 72 20 74 6f 20 74 68 65 20 r caller to the c0a0: 6c 69 73 74 0d 0a 20 20 20 20 20 20 23 20 20 20 list.. # c0b0: 20 20 20 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f of those kno c0c0: 77 6e 20 74 6f 20 74 68 65 20 45 61 67 6c 65 20 wn to the Eagle c0d0: 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 interpreter... c0e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a #.. obj c0f0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag c100: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 s +NonPublic Int c110: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 erpreter.GetActi c120: 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 ve.connections A c130: 64 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 dd \.. c140: 24 64 62 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d$db $connection. c150: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p c160: 72 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 roc cleanupDb { c170: 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d fileName {varNam c180: 65 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 e db} {collect t c190: 72 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 rue} {qualify tr c1a0: 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue}.. c1b0: 20 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74 {delet c1c0: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 e true} } {.. c1d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO c1e0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 TE: Attempt to f c1f0: 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 orce all pending c200: 20 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 "garbage" objec c210: 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 ts to be collect c220: 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ed,.. # c230: 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c including SQL c240: 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 ite statements a c250: 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 nd backup object c260: 73 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 s; this should a c270: 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 llow.. # c280: 20 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 the underlyi c290: 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 ng database file c2a0: 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d to be deleted.. c2b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. c2c0: 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 if {$collect} th
c2d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f  en {..        co
c2e0: 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a  llectGarbage $:: c2f0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 test_channel.. c300: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # c310: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: c320: 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 Refer to the spe c330: 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 cified variable c340: 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 (e.g. "db") in t c350: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 he context of ou c360: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # c370: 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 caller. The ha c380: 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 ndle to the data c390: 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 base previously c3a0: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a opened via the.. c3b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 # [s c3c0: 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 etupDb] procedur c3d0: 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 e should be stor c3e0: 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 ed there... c3f0: 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar c400: 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
c410: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
c420: 23 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68  # NOTE: Close th
c430: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to
c440: 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f 77  the database now
c450: 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61  .  This should a
c460: 6c 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 20 23  llow us..      #
c470: 20 20 20 20 20 20 20 74 6f 20 64 65 6c 65 74 65         to delete
c480: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying
c490: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a  database file...
c4a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
c4b0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
c4c0: 64 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 73  db] && [catch {s
c4d0: 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72  ql close $db} er c4e0: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. c4f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. c500: 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 # NOTE: We some c510: 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63 6c how failed to cl c520: 6f 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 ose the database c530: 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... c540: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. c550: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
c560: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
c570: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
c580: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
c590: 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73  : failed to clos
c5a0: 65 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24  e database \"" $c5b0: 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 db "\", error: " c5c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. c5d0: 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
c5e0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
c5f0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
c600: 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66  E: First, see if
c610: 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20   our caller has
c620: 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d  requested an in-
c630: 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e  memory database.
c640: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
c650: 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69   set isMemory [i
c660: 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e  sMemoryDb $fileN c670: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d ame].... #. c680: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 . # NOTE: B c690: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70 61 uild the full pa c6a0: 74 68 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 th to the databa c6b0: 73 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 se file name. F c6c0: 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 or now, all test c6d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # c6e0: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 database files a c6f0: 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 re stored in the c700: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 temporary direc c710: 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a tory... #.. c720: 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 if {!$isMe
c730: 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79  mory && $qualify c740: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. c750: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b set fileName [ c760: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 file join [getDa c770: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d tabaseDirectory] c780: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
c790: 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d  eName]]..      }
c7a0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
c7b0: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
c7c0: 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69   if the file sti
c7d0: 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20  ll exists...
c7e0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
c7f0: 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65  $isMemory &&$de
c800: 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78  lete && [file ex
c810: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d  ists $fileName]} c820: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. c830: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO c840: 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e TE: Skip deletin c850: 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 g database files c860: 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 if somebody set c870: 73 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 s the global.. c880: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 # va c890: 72 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65 6e riable to preven c8a0: 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 t it... # c8b0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ c8c0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no c8d0: 28 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 29 5d (cleanupDbFile)] c8e0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. c8f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. c900: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt c910: 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 to delete the t c920: 65 73 74 20 64 61 74 61 62 61 73 65 20 66 69 6c est database fil c930: 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 e now... c940: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i c950: 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 f {[set code [ca c960: 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 tch {file delete c970: 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f$fileName} erro
c980: 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  r]]} then {..
c990: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
c9a0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
c9b0: 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65  We somehow faile
c9c0: 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20  d to delete the
c9d0: 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79  file, report why
c9e0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
c9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
ca00: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan ca10: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs ca20: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. ca30: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING ca40: 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 : failed to dele ca50: 74 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 te database file ca60: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
ca70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
ca80: 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65    "\" during cle
ca90: 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c  anup, error: " \
caa0: 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. cab0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. cac0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. cad0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. cae0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh caf0: 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 ow that we skipp cb00: 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 ed deleting the cb10: 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 file... cb20: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 #.. se cb30: 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 t code 0.... cb40: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
cb50: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
cb60: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
cb70: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
cb80: 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20  ARNING: skipped
cb90: 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73  deleting databas
cba0: 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  e file \"" $file cbb0: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. cbc0: 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 "\" during cbd0: 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 cleanup\n"].. cbe0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } cbf0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. cc00: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO cc10: 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 TE: The file doe cc20: 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 s not exist, suc cc30: 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 cess!.. # cc40: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f .. set co cc50: 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d de 0.. }... cc60: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 . return$c
cc70: 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ode..    }.....
cc80: 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 49     proc setupDbI
cc90: 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b  nterruptCallback
cca0: 20 7b 20 63 68 61 6e 6e 65 6c 20 6c 6f 67 20 7d   { channel log }
ccb0: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20   {..      tputs
ccc0: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 73  $channel "---- s ccd0: 65 74 74 69 6e 67 20 75 70 20 64 65 62 75 67 67 etting up debugg cce0: 65 72 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c er interrupt cal ccf0: 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 lback... ".... cd00: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { cd10: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. cd20: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b # NOTE: Mak cd30: 65 20 73 75 72 65 20 74 68 65 20 73 63 72 69 70 e sure the scrip cd40: 74 20 64 65 62 75 67 67 65 72 20 61 6e 64 20 74 t debugger and t cd50: 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 he isolated inte cd60: 72 70 72 65 74 65 72 20 61 72 65 0d 0a 20 20 20 rpreter are.. cd70: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 # set cd80: 75 70 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 up and ready for cd90: 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 use... # cda0: 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 .. debug cdb0: 73 65 74 75 70 20 74 72 75 65 20 74 72 75 65 0d setup true true. cdc0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. cdd0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f # NOTE: Lo cde0: 61 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 ad the necessary cdf0: 20 70 61 63 6b 61 67 65 73 20 69 6e 74 6f 20 74 packages into t ce00: 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 he isolated inte ce10: 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 rpreter... ce20: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 #.. deb ce30: 75 67 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20 ug eval {.. ce40: 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 package req ce50: 75 69 72 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 uire Eagle.. ce60: 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 package re ce70: 71 75 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 quire Eagle.Libr ce80: 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 70 ary.. p ce90: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 ackage require E cea0: 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 agle.Test.. ceb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... cec0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT ced0: 45 3a 20 43 6f 70 79 20 74 68 65 20 6e 65 63 65 E: Copy the nece cee0: 73 73 61 72 79 20 76 61 72 69 61 62 6c 65 73 20 ssary variables cef0: 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 into the isolate cf00: 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a d interpreter... cf10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. cf20: 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 debug invoke cf30: 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 68 61 0 set ::test_cha cf40: 6e 6e 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23 nnel$channel; #
cf50: 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75 74   NOTE: For [tput
cf60: 73 5d 2e 0d 0a 20 20 20 20 20 20 20 20 64 65 62  s]...        deb
cf70: 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20  ug invoke 0 set
cf80: 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b  ::test_log $log; cf90: 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 6c # NOTE: For [tl cfa0: 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]..... cfb0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT cfc0: 45 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 E: Install the c cfd0: 61 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74 allback script t cfe0: 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 69 o be evaluated i cff0: 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a n the isolated.. d000: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # d010: 69 6e 74 65 72 70 72 65 74 65 72 20 77 68 65 6e interpreter when d020: 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 this interprete d030: 72 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 r is interrupted d040: 20 62 79 20 73 63 72 69 70 74 0d 0a 20 20 20 20 by script.. d050: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6e 63 # canc d060: 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 63 2e 0d 0a ellation, etc... d070: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d080: 20 20 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 debug callbac d090: 6b 20 61 70 70 6c 79 20 7b 7b 73 65 6e 64 65 72 k apply {{sender d0a0: 20 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 e} {.. d0b0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # d0c0: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t d0d0: 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 his callback is d0e0: 6f 6e 65 20 74 68 61 74 20 77 65 20 63 61 72 65 one that we care d0f0: 20 61 62 6f 75 74 2e 0d 0a 20 20 20 20 20 20 20 about... d100: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. d110: 69 66 20 7b 22 43 61 6e 63 65 6c 65 64 22 20 69 if {"Canceled" i d120: 6e 20 5b 73 70 6c 69 74 20 5b 24 65 20 49 6e 74 n [split [$e Int
d130: 65 72 72 75 70 74 54 79 70 65 5d 20 22 2c 20 22  erruptType] ", "
d140: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
d150: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
d160: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 74        # NOTE: It
d170: 65 72 61 74 65 20 74 68 72 6f 75 67 68 20 61 6c  erate through al
d180: 6c 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  l database conne
d190: 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20  ctions known to
d1a0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..
d1b0: 20 23 20 20 20 20 20 20 20 70 61 72 65 6e 74 20   #       parent
d1c0: 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20  interpreter...
d1d0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
d1e0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
d1f0: 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70  foreach -alias p
d200: 61 69 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  air \..
d210: 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69         [object i
d220: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
d230: 6e 50 75 62 6c 69 63 20 24 65 20 49 6e 74 65 72  nPublic $e Inter d240: 70 72 65 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f preter.connectio d250: 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ns] {.. d260: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. d270: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At d280: 74 65 6d 70 74 20 74 6f 20 63 61 6e 63 65 6c 20 tempt to cancel d290: 61 6e 79 20 53 51 4c 20 71 75 65 72 69 65 73 20 any SQL queries d2a0: 69 6e 20 70 72 6f 67 72 65 73 73 20 6f 6e 20 74 in progress on t d2b0: 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 his.. d2c0: 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 # datab d2d0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d ase connection.. d2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # d2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. d300: 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 if {[catch {$pai
d310: 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20  r Value.Cancel}
d320: 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d340: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch d350: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg d360: 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 s \n \.. d370: 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== d380: 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile d390: 64 20 74 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 d to cancel quer d3a0: 79 20 66 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e y for connection d3b0: 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 [$pa
d3d0: 69 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72  ir Key] "\", err
d3e0: 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro d3f0: 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 r \n].. d400: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. d410: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. d420: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 7d 0d 0a }.. }}.. d430: 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d } error] = d440: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. d450: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai d460: 6e 74 20 69 6e 74 65 72 72 75 70 74 43 61 6c 6c nt interruptCall d470: 62 61 63 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a back.sqlite3.... d480: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
d490: 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20  hannel yes\n..
d4a0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
d4b0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha d4c0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs d4d0: 20 22 6e 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c "no, error: " \ d4e0: 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
d4f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
d500: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61  ...    proc clea
d510: 6e 75 70 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61  nupFile { fileNa
d520: 6d 65 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65  me {collect true
d530: 7d 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20  } {force false}
d540: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
d550: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
d560: 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c  mpt to force all
d570: 20 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67   pending "garbag
d580: 65 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65  e" objects to be
d590: 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20   collected,..
d5a0: 20 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75     #       inclu
d5b0: 64 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74  ding SQLite stat
d5c0: 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75  ements and backu
d5d0: 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20  p objects; this
d5e0: 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20  should allow..
d5f0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
d600: 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62  underlying datab
d610: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64  ase file to be d
d620: 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23  eleted...      #
d630: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c  ..      if {$col d640: 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 lect} then {.. d650: 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 collectGar d660: 62 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 bage$::test_cha
d670: 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  nnel..      }...
d680: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
d690: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
d6a0: 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20   the file still
d6b0: 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23  exists...      #
d6c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c  ..      if {[fil
d6d0: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa d6e0: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. d6f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. d700: 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c # NOTE: Skip del d710: 65 74 69 6e 67 20 74 65 73 74 20 66 69 6c 65 73 eting test files d720: 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 if somebody set d730: 73 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 s the global var d740: 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 iable.. # d750: 20 20 20 20 20 20 20 74 6f 20 70 72 65 76 65 6e to preven d760: 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 t it... # d770: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 66 .. if {$f
d780: 6f 72 63 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65  orce || ![info e
d790: 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e  xists ::no(clean
d7a0: 75 70 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b  upFile)]} then {
d7b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
d7c0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
d7d0: 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65   Attempt to dele
d7e0: 74 65 20 74 68 65 20 74 65 73 74 20 66 69 6c 65  te the test file
d7f0: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20   now...
d800: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
d810: 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74   {[set code [cat
d820: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20  ch {file delete
d830: 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72  $fileName} error d840: 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. d850: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. d860: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 # NOTE: W d870: 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 e somehow failed d880: 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 to delete the f d890: 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e ile, report why. d8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. d8b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu d8c0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
d8d0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
d8e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
d8f0: 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
d900: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
d910: 65 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20  e test file \""
d920: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  $fileName \.. d930: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" d940: 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c during cleanup, d950: 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
d960: 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
d970: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
d980: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
d990: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
d9a0: 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68   # NOTE: Show th
d9b0: 61 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 65  at we skipped de
d9c0: 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e  leting the file.
d9d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
d9e0: 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64           set cod
d9f0: 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e 0....
da00: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c da10: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr da20: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. da30: 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN da40: 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 G: skipped delet da50: 69 6e 67 20 74 65 73 74 20 66 69 6c 65 20 5c 22 ing test file \" da60: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 "$fileName \..
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
da80: 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c   during cleanup\
da90: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n"]..        }..
daa0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
dab0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
dac0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66     # NOTE: The f
dad0: 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  ile does not exi
dae0: 73 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20  st, success!..
daf0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
db00: 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20   set code 0..
db10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
db20: 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20  turn $code.. db30: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c db40: 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 7b 20 ollectGarbage { db50: 63 68 61 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 channel {millise db60: 63 6f 6e 64 73 20 31 30 30 30 7d 20 7b 71 75 69 conds 1000} {qui db70: 65 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 et true} } {.. db80: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { db90: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 object invoke GC dba0: 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 GetTotalMemory dbb0: 66 61 6c 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d false} result] = dbc0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. dbd0: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
dbe0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
dbf0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann dc00: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ dc10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. dc20: 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 "---- memory in dc30: 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 62 use by the CLR b dc40: 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69 6f 6e efore collection dc50: 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ... " \.. dc60: 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 22$result "
dc70: 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20   bytes\n"]..
dc80: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
dc90: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
dca0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a dcb0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. dcc0: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W dcd0: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t dce0: 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 o get CLR memory dcf0: 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 usage, error: " dd00: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. dd10: 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d \n\t$result \n]
dd20: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
dd30: 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
dd40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dd50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dd60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
dd70: 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
dd80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
dd90: 20 4e 4f 54 45 3a 20 52 65 70 65 61 74 65 64 6c   NOTE: Repeatedl
dda0: 79 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c  y attempt to col
ddb0: 6c 65 63 74 20 67 61 72 62 61 67 65 20 75 6e 74  lect garbage unt
ddc0: 69 6c 20 74 68 65 20 61 6c 6c 6f 74 74 65 64 20  il the allotted
ddd0: 6e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 23 20  number..      #
dde0: 20 20 20 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65        of millise
ddf0: 63 6f 6e 64 73 20 68 61 73 20 65 6c 61 70 73 65  conds has elapse
de00: 64 2e 20 20 41 6c 77 61 79 73 20 61 74 74 65 6d  d.  Always attem
de10: 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61  pt to collect ga
de20: 72 62 61 67 65 0d 0a 20 20 20 20 20 20 23 20 20  rbage..      #
de30: 20 20 20 20 20 61 74 20 6c 65 61 73 74 20 6f 6e       at least on
de40: 63 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ce...      #..
de50: 20 20 20 20 73 65 74 20 73 74 61 72 74 20 5b 63      set start [c
de60: 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20  lock seconds]..
de70: 20 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b 65       set stop [e
de80: 78 70 72 20 7b 24 73 74 61 72 74 20 2b 20 28 24  xpr {$start + ($
de90: 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31  milliseconds / 1
dea0: 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20  000)}]....
deb0: 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  do {..        #.
dec0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
ded0: 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63   Attempt to forc
dee0: 65 20 61 20 66 75 6c 6c 20 67 61 72 62 61 67 65  e a full garbage
def0: 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e   collection now.
df00: 20 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20    Report any..
df10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 72        #       er
df20: 72 6f 72 20 74 68 61 74 20 69 73 20 65 6e 63 6f  ror that is enco
df30: 75 6e 74 65 72 65 64 20 69 66 20 77 65 20 66 61  untered if we fa
df40: 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  il...        #..
df50: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
df60: 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ch {object invok
df70: 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d  e GC GetTotalMem
df80: 6f 72 79 20 74 72 75 65 7d 20 65 72 72 6f 72 5d  ory true} error]
df90: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
dfa0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann dfb0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ dfc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. dfd0: 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f dfe0: 61 69 6c 65 64 20 66 75 6c 6c 20 67 61 72 62 61 ailed full garba dff0: 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 ge collection, e e000: 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 rror: " \.. e010: 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 \n\t$e
e020: 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
e030: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73    }....        s
e040: 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73 65  et now [clock se
e050: 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 7d 20  conds]..      }
e060: 77 68 69 6c 65 20 7b 24 73 74 61 72 74 20 3c 3d  while {$start <= e070: 20 24 6e 6f 77 20 26 26 20 24 6e 6f 77 20 3c 20$now && $now < e080: 24 73 74 6f 70 7d 0d 0a 0d 0a 20 20 20 20 20 20$stop}....
e090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e0a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e0b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
e0d0: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20  #########....
e0e0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
e0f0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC
e100: 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66  GetTotalMemory f
e110: 61 6c 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d  alse} result] ==
e120: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
e130: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} e140: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. e150: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
e160: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
e170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
e180: 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75  ---- memory in u
e190: 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 61 66  se by the CLR af
e1a0: 74 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e  ter collection..
e1b0: 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  . " \..
e1c0: 20 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62       $result " b e1d0: 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 ytes\n"].. e1e0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els e1f0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu e200: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
e210: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
e220: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
e230: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
e240: 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75  get CLR memory u
e250: 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c  sage, error: " \
e260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e  ..            \n
e270: 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. e280: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. e290: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 ... proc getS e2a0: 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 QLiteHandleCount e2b0: 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 s { channel {qui e2c0: 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 et false} } {.. e2d0: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result e2e0: 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 [list].... e2f0: 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 if {[haveConstra e300: 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 int \.. e310: 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 defineConst e320: 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e ant.System.Data. e330: 53 51 4c 69 74 65 2e 43 4f 55 4e 54 5f 48 41 4e SQLite.COUNT_HAN e340: 44 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 DLE]} then {.. e350: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. e360: 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 65 61 63 # NOTE: Add eac e370: 68 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c h critical handl e380: 65 20 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 72 e count to the r e390: 65 73 75 6c 74 69 6e 67 20 6c 69 73 74 2e 0d 0a esulting list... e3a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. e3b0: 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 foreach name e3c0: 5b 6c 69 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e [list connection e3d0: 43 6f 75 6e 74 20 73 74 61 74 65 6d 65 6e 74 43 Count statementC e3e0: 6f 75 6e 74 20 62 61 63 6b 75 70 43 6f 75 6e 74 ount backupCount e3f0: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 ] {.. s e400: 65 74 20 76 61 6c 75 65 20 5b 6f 62 6a 65 63 74 et value [object e410: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + e420: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. e430: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste e440: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e m.Data.SQLite.Un e450: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 safeNativeMethod e460: 73 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 s$name]....
e470: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie e480: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. e490: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
e4a0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
e4b0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
e4c0: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69       "---- criti
e4d0: 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74  cal handle count
e4e0: 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 69   \"" $name "\" i e4f0: 73 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a s "$value \n]..
e500: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
e510: 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
e520: 20 72 65 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a   result $value.. e530: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. e540: 20 7d 20 65 6c 73 65 69 66 20 7b 21 24 71 75 69 } elseif {!$qui
e550: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
e560: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
e570: 20 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 75 61   NOTE: The actua
e580: 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20  l handle counts
e590: 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c  are not availabl
e5a0: 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75  e; therefore, ju
e5b0: 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  st..        #
e5c0: 20 20 20 20 72 65 74 75 72 6e 20 61 6e 20 65 6d      return an em
e5d0: 70 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20  pty list...
e5e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
e5f0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- e600: 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 -- critical hand e610: 6c 65 20 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 le counts unavai e620: 6c 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 lable\n".. e630: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur e640: 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d n$result..    }
e650: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 68  .....    proc sh
e660: 75 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63  utdownSQLite { c
e670: 68 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61  hannel {force fa
e680: 6c 73 65 7d 20 7b 71 75 69 65 74 20 66 61 6c 73  lse} {quiet fals
e690: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
e6a0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d  .      # NOTE: M
e6b0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 53 51  ake sure that SQ
e6c0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
e6d0: 79 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20  y is completely
e6e0: 73 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d  shutdown.  This.
e6f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
e700: 73 20 75 73 65 64 20 62 79 20 74 65 73 74 73 20  s used by tests
e710: 74 68 61 74 20 63 68 61 6e 67 65 20 63 6f 6e 66  that change conf
e720: 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
e730: 73 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a  s and/or those..
e740: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
e750: 61 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20  at need to make
e760: 73 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 20  sure logging is
e770: 69 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 2e 65  initialized (i.e
e780: 2e 20 6a 75 73 74 20 69 6e 20 63 61 73 65 0d 0a  . just in case..
e790: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
e7a0: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
e7b0: 62 72 61 72 79 20 77 61 73 20 69 6e 69 74 69 61  brary was initia
e7c0: 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 70 72 6f  lized in the pro
e7d0: 63 65 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20  cess prior to..
e7e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
e7f0: 20 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73   SQLiteLog class
e800: 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 73   being able to s
e810: 65 74 75 70 20 69 74 73 20 6c 6f 67 67 69 6e 67  etup its logging
e820: 20 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20   callback)...
e830: 20 20 20 23 20 20 20 20 20 20 20 4e 6f 72 6d 61     #       Norma
e840: 6c 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64  lly, this should
e850: 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d   only be perform
e860: 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  ed if SQLite is
e870: 6c 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 20  loaded and..
e880: 20 20 23 20 20 20 20 20 20 20 72 65 61 64 79 20    #       ready
e890: 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74  for use by the t
e8a0: 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20  est suite...
e8b0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24    #..      if {$e8c0: 66 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 force || [isSQLi e8d0: 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b teReady]} then { e8e0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. e8f0: 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 # BUGFIX: B e900: 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 efore calling th e910: 65 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77 e native shutdow e920: 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65 n function, make e930: 20 73 75 72 65 20 62 6f 74 68 0d 0a 20 20 20 20 sure both.. e940: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 6f 66 # of e950: 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61 the PRAGMA rela e960: 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61 ted directory na e970: 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a mes are freed... e980: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. e990: 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit e9a0: 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 63 68 eDirectories$ch
e9b0: 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20  annel true....
e9c0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
e9d0: 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   {object invoke
e9e0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
e9f0: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
ea00: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
ea10: 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
ea20: 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20  tiveMethods \..
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ea40: 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 7d  qlite3_shutdown}
ea50: 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74   result] == 0} t
ea60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
ea70: 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th ea80: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. ea90: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
eaa0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eac0: 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74  "---- call sqlit
ead0: 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e  e3_shutdown()...
eae0: 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c   ok: " $result \ eaf0: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. eb00: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else eb10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if eb20: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
eb30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
eb40: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap eb50: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. eb60: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- eb70: 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 - call sqlite3_s eb80: 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 hutdown()... err eb90: 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 or: " \n\t$resu
eba0: 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  lt \n]..
ebb0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
ebc0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
ebd0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f  ...    proc repo
ebe0: 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65  rtSQLiteResource
ebf0: 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69  s { channel {qui
ec00: 65 74 20 66 61 6c 73 65 7d 20 7b 63 6f 6c 6c 65  et false} {colle
ec10: 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20  ct true} } {..
ec20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
ec30: 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6f 75  OTE: Skip all ou
ec40: 74 70 75 74 20 69 66 20 77 65 20 61 72 65 20 72  tput if we are r
ec50: 75 6e 6e 69 6e 67 20 69 6e 20 22 71 75 69 65 74  unning in "quiet
ec60: 22 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23  " mode...      #
ec70: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76  ..      if {[hav
ec80: 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20  eConstraint \..
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66               def
eca0: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74  ineConstant.Syst
ecb0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49  em.Data.SQLite.I
ecc0: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
ecd0: 41 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20  ABLE] && \..
ece0: 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74        [haveConst
ecf0: 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20  raint \..
ed00: 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e         defineCon
ed10: 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74  stant.System.Dat
ed20: 61 2e 53 51 4c 69 74 65 2e 54 52 41 43 4b 5f 4d  a.SQLite.TRACK_M
ed30: 45 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 68  EMORY_BYTES]} th
ed40: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
ed50: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then ed60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu ed70: 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
ed80: 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79  - current memory
ed90: 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74   in use by SQLit
eda0: 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20  eMemory... "..
edb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
edc0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
edd0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
ede0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
edf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
ee00: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
ee10: 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72  Lite.SQLiteMemor
ee20: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y \..
ee30: 20 20 20 20 20 62 79 74 65 73 41 6c 6c 6f 63 61       bytesAlloca
ee40: 74 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20  ted} memory] ==
ee50: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
ee60: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet ee70: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. ee80: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
ee90: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
eea0: 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73   $memory " bytes eeb0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. eec0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els eed0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 e {.. s eee0: 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 et memory unknow eef0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n.... i ef00: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
ef10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
ef20: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ ef30: 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
ef40: 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
ef50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
ef60: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24  ..        if {!$ef70: 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. ef80: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
ef90: 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61  channel "---- ma
efa0: 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20  ximum memory in
efb0: 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d  use by SQLiteMem
efc0: 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20  ory... "..
efd0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
efe0: 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63  f {[catch {objec
eff0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
f000: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
f010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
f020: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
f030: 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 5c 0d  .SQLiteMemory \.
f040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
f050: 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c   maximumBytesAll
f060: 6f 63 61 74 65 64 7d 20 6d 65 6d 6f 72 79 5d 20  ocated} memory]
f070: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
f080: 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu f090: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. f0a0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
f0b0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
f0c0: 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79  rgs $memory " by f0d0: 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 tes\n"].. f0e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } f0f0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. f100: 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b set memory unk f110: 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nown.... f120: 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
f130: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
f140: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe f150: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
f160: 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
f170: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
f180: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
f190: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} f1a0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. f1b0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
f1c0: 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65  "---- current me
f1d0: 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53  mory in use by S
f1e0: 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20  QLite... "..
f1f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
f200: 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20  {[catch {object
f210: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
f220: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
f230: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
f240: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
f250: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f260: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
f270: 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79    sqlite3_memory
f280: 5f 75 73 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d  _used} memory] =
f290: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
f2a0: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet f2b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. f2c0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
f2d0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $f2e0: 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e memory " bytes\n f2f0: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 "].. }.. f300: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. f310: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. f320: 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 # NOTE: Maybe f330: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 the SQLite core f340: 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 library is unava f350: 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 ilable?.. f360: 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set f370: 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a memory unknown.. f380: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 .. if {!$
f390: 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
f3a0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $f3b0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA f3c0: 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d rgs$memory \n].
f3d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
f3e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74    }....      set
f3f0: 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b   result $memory; f400: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 # NOTE: Return f410: 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f memory in-use to f420: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a our caller..... f430: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
f440: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
f450: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe f460: 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 l "---- maximum f470: 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 memory in use by f480: 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 SQLite... ".. f490: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i f4a0: 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 f {[catch {objec f4b0: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags f4c0: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst f4e0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U f4f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho f500: 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ds \.. f510: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f sqlite3_memo f520: 72 79 5f 68 69 67 68 77 61 74 65 72 20 30 7d 20 ry_highwater 0} f530: 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 memory] == 0} th f540: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if f550: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
f560: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
f570: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app f580: 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
f590: 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20  " bytes\n"]..
f5a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
f5b0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
f5c0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
f5d0: 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c  E: Maybe the SQL
f5e0: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
f5f0: 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f   is unavailable?
f600: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
f610: 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20       set memory
f620: 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20  unknown....
f630: 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} f640: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. f650: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
f660: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me f670: 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. f680: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... f690: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 if {$colle
f6a0: 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ct} then {..
f6b0: 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61      collectGarba
f6c0: 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  ge $channel.. f6d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if f6e0: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
f6f0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
f700: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- f710: 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 current memory i f720: 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 n use by the CLR f730: 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a ... ".. }.. f740: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat f750: 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b ch {object invok f760: 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d e GC GetTotalMem f770: 6f 72 79 20 66 61 6c 73 65 7d 20 6d 65 6d 6f 72 ory false} memor f780: 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d y] == 0} then {. f790: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st f7a0: 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 ring is integer f7b0: 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d -strict$memory]
f7c0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
f7d0: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} f7e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. f7f0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
f800: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
f810: 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c  $memory " bytes\ f820: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n"].. } f830: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else f840: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se f850: 74 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 t memory invalid f860: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if f870: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
f880: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
f890: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a f8a0: 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
f8b0: 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  y \n]..
f8c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
f8d0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
f8e0: 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72         set memor
f8f0: 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20  y unknown....
f900: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet f910: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. f920: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
f930: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $f940: 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. f950: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. f960: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
f970: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
f980: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
f990: 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f  ForSQLiteDirecto
f9a0: 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  ries { channel {
f9b0: 72 65 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  reset false} } {
f9c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
f9d0: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
f9e0: 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69  f the sqlite3_wi
f9f0: 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
fa00: 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76  y function is av
fa10: 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  ailable...
fa20: 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  #..      tputs $fa30: 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. fa40: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check fa50: 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e ing for function fa60: 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s fa70: 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 et_directory... fa80: 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ".... #.. fa90: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This faa0: 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c call to the sql fab0: 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d fac0: 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f irectory functio fad0: 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 20 20 20 n uses the.. fae0: 20 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c 69 # invali faf0: 64 20 76 61 6c 75 65 20 30 20 66 6f 72 20 74 68 d value 0 for th fb00: 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 e first argument fb10: 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 . This code is fb20: 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 designed.. fb30: 23 20 20 20 20 20 20 20 74 6f 20 63 68 65 63 6b # to check fb40: 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 if calling the fb50: 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 function will ra fb60: 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e ise an exception fb70: 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 (i.e... # fb80: 20 20 20 20 20 20 74 68 65 20 61 63 74 75 61 6c the actual fb90: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 result of the f fba0: 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 unction does not fbb0: 20 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 matter as long fbc0: 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 as no.. # fbd0: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 69 directory i fbe0: 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 s changed)... fbf0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { fc00: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. fc10: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i fc20: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No fc30: 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. fc40: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. fc50: 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa fc60: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods fc70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. fc80: 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s fc90: 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20 6e et_directory 0 n fca0: 75 6c 6c 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ull}] == 0} then fcb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. fcc0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C fcd0: 61 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c 69 74 alling the sqlit fce0: 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir fcf0: 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 ectory function fd00: 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 does not.. fd10: 20 20 23 20 20 20 20 20 20 20 63 61 75 73 65 20 # cause fd20: 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20 74 68 an exception; th fd30: 65 72 65 66 6f 72 65 2c 20 69 74 20 6d 75 73 74 erefore, it must fd40: 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 28 69 be available (i fd50: 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 .e... # fd60: 20 20 20 20 20 65 76 65 6e 20 74 68 6f 75 67 68 even though fd70: 20 69 74 20 73 68 6f 75 6c 64 20 72 65 74 75 72 it should retur fd80: 6e 20 61 20 66 61 69 6c 75 72 65 20 72 65 74 75 n a failure retu fd90: 72 6e 20 63 6f 64 65 20 69 6e 20 74 68 69 73 0d rn code in this. fda0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # fdb0: 20 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 20 case)... fdc0: 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 #.. addC fdd0: 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 74 65 onstraint sqlite fde0: 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire fdf0: 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 ctory.... fe00: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
fe10: 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  yes\n....
fe20: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
fe30: 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c  TE: Does our cal
fe40: 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65  ler want to rese
fe50: 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 65  t the directorie
fe60: 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s?..        #..
fe70: 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65         if {$rese fe80: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. fe90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. fea0: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 # NOTE: Now ma feb0: 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61 ke sure the data fec0: 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 base and tempora fed0: 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 ry directories a fee0: 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 re.. # fef0: 20 20 20 20 20 20 72 65 73 65 74 20 74 68 65 69 reset thei ff00: 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 r default values ff10: 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 , which should b ff20: 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e e null for both. ff30: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # ff40: 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 Since the sq ff50: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ ff60: 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 directory functi ff70: 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c on is available, ff80: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # ff90: 20 20 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 use it... ffa0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. ffb0: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 for {set ind ffc0: 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 20 ex 1} {$index <
ffd0: 33 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20  3} {incr index}
ffe0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
fff0: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10010 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
10020 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
10030 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10040 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
10050 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66  ata.SQLite.Unsaf
10060 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c  eNativeMethods \
10070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
10080 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69        sqlite3_wi
10090 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
100a0 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 7d 20 5c  y $index null} \ 100b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 100c0 20 20 20 20 20 20 72 65 73 75 6c 74 5d 20 3d 3d result] == 100d0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 100e0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 100f0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
10100 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
10110 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
10120 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e  call sqlite3_win
10130 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79  32_set_directory
10140 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20  (" $index \.. 10150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 10160 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 , null)... ok: " 10170 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
10180 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
10190 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
101a0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 101b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 101c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 101d0 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c "---- call sql 101e0 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d 101f0 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65 irectory("$inde
10200 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x \..
10210 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e         ", null).
10220 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  .. error: " \n\t
10230 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 10240 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 10250 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 10260 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 10270 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu 10280 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e ts$channel no\n
10290 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
102a0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44         # NOTE: D
102b0 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77  oes our caller w
102c0 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 65  ant to reset the
102d0 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20 20 54   directories?  T
102e0 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 20  his can only..
102f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
10300 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51   performed if SQ
10310 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61  Lite is loaded a
10320 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65  nd ready for use
10330 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20 20   by the test..
10340 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75        #       su
10350 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ite...        #.
10360 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65  .        if {$re 10370 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69 74 65 set && [isSQLite 10380 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a Ready]} then {.. 10390 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 103a0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e # NOTE: N 103b0 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 ow make sure the 103c0 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 database and te 103d0 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 mporary director 103e0 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 ies are.. 103f0 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74 # reset 10400 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 their default v 10410 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f alues, which sho 10420 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 uld be null for 10430 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 both... 10440 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 # Since t 10450 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 he sqlite3_win32 10460 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 _set_directory f 10470 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 unction does not 10480 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 10490 20 20 20 20 61 70 70 65 61 72 20 74 6f 20 62 65 appear to be 104a0 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 65 20 available, use 104b0 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 50 the associated P 104c0 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a RAGMA commands.. 104d0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 104e0 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 instead... 104f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10500 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 63 foreach direc 10510 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f tory [list data_ 10520 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 store_directory 10530 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 temp_store_direc 10540 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 tory] {.. 10550 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70 set sql [ap 10560 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41 pendArgs "PRAGMA 10570 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 20 "$directory "
10580 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 20  = \"\";"]....
10590 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
105a0 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20  tch {executeSql
105b0 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d 3d  $sql} result] == 105c0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 105d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 105e0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
105f0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
10600 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
10610 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22  execute PRAGMA "
10620 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e   $directory "... 10630 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 20 ok: \"" \.. 10640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72$r
10650 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20  esult \"\n]..
10660 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
10670 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
10680 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 10690 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 106a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 106b0 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 "---- execute P 106c0 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f RAGMA "$directo
106d0 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 22  ry "... error: "
106e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
106f0 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75        \n\t $resu 10700 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 10710 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 10720 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 10730 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 10740 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 10750 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 74 Finally, show t 10760 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 he current value 10770 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 of the database 10780 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d 0a and temporary.. 10790 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 107a0 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69 73 rectories. This 107b0 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65 72 can only be per 107c0 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 formed if SQLite 107d0 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 is loaded.. 107e0 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 # and re 107f0 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 ady for use by t 10800 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a he test suite... 10810 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 10820 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61 64 f {[isSQLiteRead 10830 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 10840 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 foreach dire 10850 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 ctory [list data 10860 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 _store_directory 10870 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 temp_store_dire 10880 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 ctory] {.. 10890 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
108a0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
108b0 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 20  ---- checking "
108c0 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20  $directory "... 108d0 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... 108e0 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 set sql [appendA 108f0 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 rgs "PRAGMA "$d
10900 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a  irectory \;]....
10910 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
10920 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c  atch {executeSql
10930 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 65   $sql scalar} re 10940 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 10950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 10960 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
10970 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a 20  appendArgs "ok:
10980 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e  \"" $result \"\n 10990 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 ].. } e 109a0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 109b0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
109c0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 65  l [appendArgs "e
109d0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65  rror: " \n\t $re 109e0 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 109f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 10a00 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 10a10 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c 6f ..... proc lo 10a20 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 adSQLiteTestSett 10a30 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b ings { channel { 10a40 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69 65 suffix ""} {quie 10a50 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. 10a60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 10a70 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69 6e OTE: Skip loadin 10a80 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 69 g the settings i 10a90 66 20 74 68 65 69 72 20 75 73 61 67 65 20 68 61 f their usage ha 10aa0 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 2e s been disabled. 10ab0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 10ac0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 10ad0 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 65 ts ::no(sqliteTe 10ae0 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74 68 stSettings)]} th 10af0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 10b00 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 10b10 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65 72 Load custom per 10b20 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 -user and/or per 10b30 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 -host test setti 10b40 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ngs now... 10b50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 10b60 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 10b70 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 tcl_platform(use 10b80 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 r)]} then {.. 10b90 20 20 20 20 20 20 20 73 65 74 20 75 73 65 72 53 set userS 10ba0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName 10bb0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 [file join [getC 10bc0 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 ommonDirectory] 10bd0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10be0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 [appendArgs set 10bf0 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 tings$suffix .
10c00 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform( 10c10 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a user) .eagle]].. 10c20 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 10c30 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 75 73 [file exists$us
10c40 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  erSettingsFileNa
10c50 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
10c60 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 10c70 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 10c80 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 10c90 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
10ca0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
10cb0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
10cc0 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73  - loading per-us
10cd0 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  er test settings
10ce0 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20   file \"" \..
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $10d00 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 userSettingsFile 10d10 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 Name \"...\n].. 10d20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 10d30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 10d40 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 [catch {uplevel 10d50 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 1 [list source$
10d60 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65  userSettingsFile
10d70 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20  Name]} \..
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
10d90 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
10da0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
10db0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 10dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 10dd0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
10de0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
10df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10e00 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
10e10 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64  : failed to load
10e20 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 69 6e   per-user settin
10e30 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20  gs file \"" \..
10e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10e50 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73     $userSettings 10e60 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 FileName "\", er 10e70 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
10e80 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
10e90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
10ea0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
10eb0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
10ec0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 10ed0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 10ee0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 10ef0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
10f00 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
10f10 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
10f20 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67   skipped loading
10f30 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73   per-user test s
10f40 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
10f50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10f60 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69        $userSetti 10f70 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c ngsFileName "\", 10f80 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 it does not exi 10f90 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 st\n"].. 10fa0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 10fb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 10fc0 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 23 23 . ####### 10fd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10ff0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11000 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 11010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 11020 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 11030 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 cl_platform(host 11040 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 11050 20 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 65 set hostSe 11060 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b ttingsFileName [ 11070 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f file join [getCo 11080 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c mmonDirectory] \ 11090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 110a0 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 [appendArgs sett 110b0 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 ings$suffix . $110c0 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 ::tcl_platform(h 110d0 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d ost) .eagle]]... 110e0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 110f0 66 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f 73 file exists$hos
11100 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  tSettingsFileNam
11110 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
11120 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 11130 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 11140 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 11150 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
11160 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
11170 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
11180 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73   loading per-hos
11190 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20  t test settings
111a0 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20  file \"" \..
111b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68                $h 111c0 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e ostSettingsFileN 111d0 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 ame \"...\n].. 111e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 111f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 11200 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 catch {uplevel 1 11210 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 68 [list source$h
11220 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  ostSettingsFileN
11230 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20  ame]} \..
11240 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
11250 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
11260 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
11270 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 11280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11290 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
112a0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
112c0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
112d0 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20   failed to load
112e0 70 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e 67  per-host setting
112f0 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20  s file \"" \..
11300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11310 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46    $hostSettingsF 11320 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 ileName "\", err 11330 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
11340 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
11350 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
11360 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
11370 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
11380 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 11390 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 113a0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 113b0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
113c0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
113d0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
113e0 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20  skipped loading
113f0 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65  per-host test se
11400 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20  ttings file \""
11410 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
11420 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e       $hostSettin 11430 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 gsFileName "\", 11440 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 11450 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 t\n"].. 11460 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 11470 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 11480 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 11490 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c . proc runSQL 114a0 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 iteTestPrologue 114b0 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 114c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 114d0 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 p running our cu 114e0 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 stom prologue if 114f0 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 the main one ha 11500 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 s been.. # 11510 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a skipped... 11520 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 11530 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 11540 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 ::no(prologue.e 11550 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a agle)]} then {.. 11560 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 11570 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 # NOTE: Load 11580 74 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 the "before-cons 11590 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 traints" custom 115a0 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 per-user and/or 115b0 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 per-host.. 115c0 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 # test s 115d0 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 ettings now... 115e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 115f0 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 11600 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 loadSQLiteTestS 11610 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f ettings$::test_
11620 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d  channel .before]
11630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
11640 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
11650 6b 69 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e 44  kip all System.D
11660 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74  ata.SQLite relat
11670 65 64 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e 67  ed file handling
11680 20 28 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 20   (deleting,..
11690 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70       #       cop
116a0 79 69 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69 6e  ying, and loadin
116b0 67 29 20 69 66 20 77 65 20 61 72 65 20 73 6f 20  g) if we are so
116c0 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20  instructed...
116d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
116e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
116f0 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c  s ::no(sqliteFil
11700 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
11710 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
11720 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
11730 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65  p trying to dele
11740 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20  te any files if
11750 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75  we are so instru
11760 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  cted...
11770 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
11780 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
11790 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74  ::no(deleteSqlit
117a0 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  eFiles)]} then {
117b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
117c0 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
117d0 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 20 20 20  sqlite3.dll..
117e0 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43           removeC
117f0 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 5f 73  onstraint file_s
11800 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 0d 0a 20 20  qlite3.dll....
11810 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c            tryDel
11820 65 74 65 41 73 73 65 6d 62 6c 79 20 53 51 4c 69  eteAssembly SQLi
11830 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a  te.Interop.dll..
11840 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f              remo
11850 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c  veConstraint fil
11860 65 5f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70  e_SQLite.Interop
11870 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .dll....
11880 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73      tryDeleteAss
11890 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74  embly System.Dat
118a0 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20  a.SQLite.dll..
118b0 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
118c0 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 5f  Constraint file_
118d0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
118e0 74 65 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20  te.dll....
118f0 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41        tryDeleteA
11900 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44  ssembly System.D
11910 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e  ata.SQLite.Linq.
11920 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dll..
11930 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e   removeConstrain
11940 74 20 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44 61  t file_System.Da
11950 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64  ta.SQLite.Linq.d
11960 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  ll..          }.
11970 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
11980 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
11990 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20  : Check for the
119a0 22 61 75 74 6f 53 65 6c 65 63 74 22 20 72 75 6e  "autoSelect" run
119b0 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 49 66  time option.  If
119c0 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20 20 20   present,..
119d0 20 20 20 20 20 23 20 20 20 20 20 20 20 61 74 74       #       att
119e0 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69  empt to automati
119f0 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65  cally select the
11a00 20 66 69 72 73 74 20 61 76 61 69 6c 61 62 6c 65   first available
11a10 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
11a20 20 20 20 20 62 75 69 6c 64 20 6f 66 20 53 79 73      build of Sys
11a30 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
11a40 66 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 65  for use with the
11a50 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20   test suite...
11a60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
11a70 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e       if {[hasRun
11a80 74 69 6d 65 4f 70 74 69 6f 6e 20 61 75 74 6f 53  timeOption autoS
11a90 65 6c 65 63 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a  elect]} then {..
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63              chec
11ab0 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73  kForSQLiteBuilds
11ac0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 11ad0 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 true.. 11ae0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 11af0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 11b00 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 OTE: Skip trying 11b10 20 74 6f 20 76 65 72 69 66 79 20 74 68 65 20 62 to verify the b 11b20 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 uild directory i 11b30 66 20 77 65 20 61 72 65 20 73 6f 0d 0a 20 20 20 f we are so.. 11b40 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 # i 11b50 6e 73 74 72 75 63 74 65 64 3b 20 6f 74 68 65 72 nstructed; other 11b60 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 wise, make sure 11b70 69 74 20 61 63 74 75 61 6c 6c 79 20 65 78 69 73 it actually exis 11b80 74 73 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 ts or.. 11b90 20 23 20 20 20 20 20 20 20 68 61 6c 74 20 74 68 # halt th 11ba0 65 20 65 6e 74 69 72 65 20 74 65 73 74 69 6e 67 e entire testing 11bb0 20 70 72 6f 63 65 73 73 20 69 66 20 69 74 20 64 process if it d 11bc0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a oes not exist... 11bd0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 11be0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 11bf0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 76 65 o exists ::no(ve 11c00 72 69 66 79 42 75 69 6c 64 44 69 72 65 63 74 6f rifyBuildDirecto 11c10 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ry)]} then {.. 11c20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 11c30 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 11c40 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20 At this point, 11c50 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 the build direct 11c60 6f 72 79 20 4d 55 53 54 20 65 78 69 73 74 20 61 ory MUST exist a 11c70 73 20 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s a.. 11c80 20 23 20 20 20 20 20 20 20 76 61 6c 69 64 20 64 # valid d 11c90 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 irectory for the 11ca0 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 testing process 11cb0 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20 to continue... 11cc0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 11cd0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69 set di 11ce0 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75 69 6c rectory [getBuil 11cf0 64 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 dDirectory].... 11d00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 11d10 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 64 69 [file exists$di
11d20 72 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20  rectory] || \..
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
11d40 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72  [file isdirector
11d50 79 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74  y $directory]} t 11d60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 11d70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 11d80 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4a 75 # NOTE: Ju 11d90 73 74 20 70 72 69 6f 72 20 74 6f 20 61 63 74 75 st prior to actu 11da0 61 6c 6c 79 20 68 61 6c 74 69 6e 67 20 74 68 65 ally halting the 11db0 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 testing process 11dc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.. 11dd0 20 23 20 20 20 20 20 20 20 61 64 64 20 61 6e 20 # add an 11de0 65 72 72 6f 72 20 74 6f 20 74 68 65 20 74 65 73 error to the tes 11df0 74 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20 t log file... 11e00 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 11e10 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 11e20 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
11e30 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
11e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
11e50 20 20 20 22 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e     "---- could n
11e60 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c 64 20  ot verify build
11e70 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64  directory \"" $d 11e80 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 11e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ 11ea0 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 ", all testing h 11eb0 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 alted\n"].... 11ec0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 11ed0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 11ee0 54 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63 TE: Raising a sc 11ef0 72 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 ript error from 11f00 74 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c this point shoul 11f10 64 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 d halt.. 11f20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 11f30 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 e testing proces 11f40 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 s... 11f50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 11f60 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 error [append 11f70 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 11f80 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 "could 11f90 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c not verify buil 11fa0 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 d directory \"" 11fb0 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20$directory \..
11fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11fd0 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67  "\", all testing
11fe0 20 68 61 6c 74 65 64 22 5d 0d 0a 20 20 20 20 20   halted"]..
11ff0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
12000 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
12010 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
12020 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79  # NOTE: Skip try
12030 69 6e 67 20 74 6f 20 63 6f 70 79 20 61 6e 79 20  ing to copy any
12040 66 69 6c 65 73 20 69 66 20 77 65 20 61 72 65 20  files if we are
12050 73 6f 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a  so instructed...
12060 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
12070 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
12080 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f  o exists ::no(co
12090 70 79 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d  pySqliteFiles)]}
120a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
120b0 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
120c0 6d 62 6c 79 20 73 71 6c 69 74 65 33 2e 64 6c 6c  mbly sqlite3.dll
120d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
120e0 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 51  yCopyAssembly SQ
120f0 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c  Lite.Interop.dll
12100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
12110 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 79  yCopyAssembly Sy
12120 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
12130 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  .dll..
12140 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c    tryCopyAssembl
12150 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  y System.Data.SQ
12160 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20  Lite.Linq.dll..
12170 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
12180 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12190 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
121a0 70 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f 61 64  p trying to load
121b0 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 77 65   any files if we
121c0 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75 63 74   are so instruct
121d0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ed...          #
121e0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
121f0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
12200 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c  no(loadSqliteFil
12210 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
12220 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61            tryLoa
12230 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d  dAssembly System
12240 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
12250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
12260 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79  yLoadAssembly Sy
12270 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
12280 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20  .Linq.dll..
12290 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
122a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
122b0 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72   # NOTE: Skip tr
122c0 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 65  ying to delete e
122d0 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 69 66  xternal files if
122e0 20 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72   we are so instr
122f0 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  ucted...
12300 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
12310 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
12320 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
12330 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29  teExternalFiles)
12340 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
12350 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
12360 42 75 69 6c 64 46 69 6c 65 20 49 6e 73 74 61 6c  BuildFile Instal
12370 6c 65 72 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  ler.exe.mda.conf
12380 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ig..
12390 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69  tryDeleteBuildFi
123a0 6c 65 20 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e  le test.exe.mda.
123b0 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20  config..
123c0 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 75 69      tryDeleteBui
123d0 6c 64 46 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e  ldFile testlinq.
123e0 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 0d 0a  exe.mda.config..
123f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
12400 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
12410 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
12420 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 70  ip trying to cop
12430 79 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 73  y external files
12440 20 69 66 20 77 65 20 61 72 65 20 73 6f 20 69 6e   if we are so in
12450 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20  structed...
12460 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
12470 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
12480 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
12490 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73  iteExternalFiles
124a0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
124b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
124c0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
124d0 6f 70 79 20 74 68 65 20 4d 44 41 20 63 6f 6e 66  opy the MDA conf
124e0 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 20 66  iguration file f
124f0 6f 72 20 74 68 65 20 45 61 67 6c 65 20 73 68 65  or the Eagle she
12500 6c 6c 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  ll to the..
12510 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62         #       b
12520 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65  uild output dire
12530 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20  ctory; however,
12540 75 73 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  use the name of
12550 74 68 65 20 6c 65 67 61 63 79 0d 0a 20 20 20 20  the legacy..
12560 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
12570 74 65 73 74 20 65 78 65 63 75 74 61 62 6c 65 2e  test executable.
12580 20 20 54 68 69 73 20 77 69 6c 6c 20 6d 61 6b 65    This will make
12590 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 6c   sure that the l
125a0 65 67 61 63 79 20 74 65 73 74 73 0d 0a 20 20 20  egacy tests..
125b0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
125c0 20 72 75 6e 20 77 69 74 68 20 74 68 65 20 73 61   run with the sa
125d0 6d 65 20 73 65 74 20 6f 66 20 4d 44 41 73 20 63  me set of MDAs c
125e0 6f 6e 66 69 67 75 72 65 64 2e 0d 0a 20 20 20 20  onfigured...
125f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12600 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 69         tryCopyBi
12610 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68  naryFile EagleSh
12620 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  ell.exe.mda.conf
12630 69 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65  ig Installer.exe
12640 2e 6d 64 61 2e 63 6f 6e 66 69 67 0d 0a 20 20 20  .mda.config..
12650 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
12660 42 69 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65  BinaryFile Eagle
12670 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f  Shell.exe.mda.co
12680 6e 66 69 67 20 74 65 73 74 2e 65 78 65 2e 6d 64  nfig test.exe.md
12690 61 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20  a.config..
126a0 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e        tryCopyBin
126b0 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65  aryFile EagleShe
126c0 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  ll.exe.mda.confi
126d0 67 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d  g testlinq.exe.m
126e0 64 61 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20  da.config..
126f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
12700 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74  }....        cat
12710 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
12720 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 12730 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 12740 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 12750 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 "---- file ve 12760 72 73 69 6f 6e 20 6f 66 20 5c 22 73 71 6c 69 74 rsion of \"sqlit 12770 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d e3.dll\"... " \. 12780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 12790 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 file version [ge 127a0 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 127b0 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 20 5c 6e sqlite3.dll]] \n 127c0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a ].. }.... 127d0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 127e0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 127f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
12800 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
12820 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e  --- file version
12830 20 6f 66 20 5c 22 53 51 4c 69 74 65 2e 49 6e 74   of \"SQLite.Int
12840 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20  erop.dll\"... "
12850 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
12860 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b   [file version [
12870 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
12880 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70  e SQLite.Interop
12890 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20  .dll]] \n]..
128a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
128b0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
128c0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 128d0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 128e0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 128f0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c "---- fil 12900 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 e version of \"S 12910 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 12920 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a e.dll\"... " \.. 12930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 12940 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 ile version [get 12950 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 BinaryFileName S 12960 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 12970 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 e.dll]] \n].. 12980 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 12990 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 129a0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
129b0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
129c0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
129d0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
129e0 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
129f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
12a00 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e  te.Linq.dll\"...
12a10 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
12a20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f      [file versio
12a30 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  n [getBinaryFile
12a40 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Name System.Data
12a50 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
12a60 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ]] \n]..
12a70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  }....        set
12a80 20 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a   assemblies [obj
12a90 65 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f  ect invoke AppDo
12aa0 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61  main.CurrentDoma
12ab0 69 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73  in GetAssemblies
12ac0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  ]....        obj
12ad0 65 63 74 20 66 6f 72 65 61 63 68 20 61 73 73 65  ect foreach asse
12ae0 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 73  mbly $assemblies 12af0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 12b00 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 {[string match 12b10 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \{System.Data.SQ 12b20 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d Lite*$assembly]
12b30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
12b40 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 12b50 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 12b60 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 12b70 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 12b80 20 66 6f 75 6e 64 20 61 73 73 65 6d 62 6c 79 3a found assembly: 12b90 20 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d "$assembly \n]
12ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
12bb0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
12bc0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
12bd0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 12be0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 12bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 12c00 2d 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 --- define const 12c10 61 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 ants for \"Syste 12c20 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e m.Data.SQLite\". 12c30 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 12c40 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 if {[catch {ob 12c50 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 12c60 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 12c70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 12c80 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 12c90 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 QLite.SQLite3 De 12ca0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 7d 20 5c fineConstants} \ 12cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12cc0 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 defineConsta 12cd0 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 nts] == 0} then 12ce0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 12cf0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
12d00 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
12d10 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73   [formatList [ls
12d20 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ort \..
12d30 20 20 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f         $defineCo 12d40 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d nstants] <none>] 12d50 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 12d60 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 12d70 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
12d80 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e  est_channel unkn
12d90 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20  own\n..
12da0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
12db0 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b  .        catch {
12dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
12dd0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 12de0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 12df0 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 "---- source 12e00 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 version of \"Sys 12e10 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 12e20 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 dll\"... ".... 12e30 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 12e40 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b ch {object invok 12e50 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 12e60 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 12e70 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 12e80 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi 12e90 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f teConnection Pro 12ea0 76 69 64 65 72 56 65 72 73 69 6f 6e 7d 20 5c 0d viderVersion} \. 12eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 12ec0 20 20 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 version] == 0 12ed0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12ee0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 12ef0 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f g length$versio
12f00 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  n] == 0} then {.
12f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
12f20 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d  et version null.
12f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
12f40 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
12f50 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 12f60 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 76 l [appendArgs$v
12f70 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 20  ersion \n]..
12f80 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
12f90 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
12fa0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 12fb0 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 l unknown\n.. 12fc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 12fd0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 }.... c 12fe0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 12ff0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
13000 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20  channel \..
13010 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
13020 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74 20 6f  ource checkout o
13030 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e  f \"System.Data.
13040 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20  SQLite.dll\"...
13050 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  "....          i
13060 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63  f {[catch {objec
13070 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
13080 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
130a0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
130b0 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  te.SQLiteConnect
130c0 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72  ion ProviderSour
130d0 63 65 49 64 7d 20 5c 0d 0a 20 20 20 20 20 20 20  ceId} \..
130e0 20 20 20 20 20 20 20 20 20 20 20 73 6f 75 72 63             sourc
130f0 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  eId] == 0} then
13100 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
13110 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
13120 68 20 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20  h $sourceId] == 13130 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 13140 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 set sou 13150 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 rceId null.. 13160 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 13170 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
13180 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
13190 70 65 6e 64 41 72 67 73 20 24 73 6f 75 72 63 65  pendArgs $source 131a0 49 64 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 Id \n].. 131b0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 131c0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
131d0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e  :test_channel un
131e0 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20  known\n..
131f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
13200 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
13210 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
13220 65 63 6b 20 74 68 65 20 61 76 61 69 6c 61 62 6c  eck the availabl
13230 65 20 62 75 69 6c 64 73 20 6f 66 20 53 51 4c 69  e builds of SQLi
13240 74 65 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61  te and System.Da
13250 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20  ta.SQLite...
13260 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63      #..        c
13270 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69  heckForSQLiteBui
13280 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  lds $::test_chan 13290 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 nel.... # 132a0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 132b0 3a 20 4e 6f 77 2c 20 77 65 20 6e 65 65 64 20 74 : Now, we need t 132c0 6f 20 6b 6e 6f 77 20 69 66 20 74 68 65 20 53 51 o know if the SQ 132d0 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar 132e0 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 0d 0a y is available.. 132f0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 13300 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 (i.e. because th 13310 65 20 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79 20 53 e managed-only S 13320 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 13330 65 20 61 73 73 65 6d 62 6c 79 20 63 61 6e 0d 0a e assembly can.. 13340 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 13350 6c 6f 61 64 20 77 69 74 68 6f 75 74 20 69 74 3b load without it; 13360 20 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e however, it can 13370 6e 6f 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 not do anything 13380 75 73 65 66 75 6c 20 77 69 74 68 6f 75 74 0d 0a useful without.. 13390 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 133a0 69 74 29 2e 20 20 49 66 20 77 65 20 61 72 65 20 it). If we are 133b0 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d using the mixed- 133c0 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 61 6e mode assembly an 133d0 64 20 77 65 20 61 6c 72 65 61 64 79 0d 0a 20 20 d we already.. 133e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f # fo 133f0 75 6e 64 20 69 74 20 28 61 62 6f 76 65 29 2c 20 und it (above), 13400 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 77 61 this should alwa 13410 79 73 20 73 75 63 63 65 65 64 2e 0d 0a 20 20 20 ys succeed... 13420 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 13430 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 checkForSQLiteLi 13440 62 72 61 72 79 20 24 3a 3a 74 65 73 74 5f 63 68 brary$::test_ch
13450 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  annel....
13460 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
13470 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65  TE: Check if the
13480 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20   SQLite interop
13490 61 73 73 65 6d 62 6c 79 20 69 73 20 61 76 61 69  assembly is avai
134a0 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  lable...
134b0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  #..        check
134c0 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70  ForSQLiteInterop
134d0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 134e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 134f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 13500 68 65 63 6b 20 74 68 65 20 53 51 4c 69 74 65 20 heck the SQLite 13510 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d database and tem 13520 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 porary directori 13530 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a es... #.. 13540 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 13550 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 SQLiteDirectorie 13560 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
13570 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  l....        #..
13580 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
13590 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72  Attempt to deter
135a0 6d 69 6e 65 20 69 66 20 76 61 72 69 6f 75 73 20  mine if various
135b0 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
135c0 69 6f 6e 73 20 6e 65 65 64 65 64 20 66 6f 72 0d  ions needed for.
135d0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
135e0 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
135f0 73 20 77 65 72 65 20 65 6e 61 62 6c 65 64 20 66  s were enabled f
13600 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61  or the managed a
13610 73 73 65 6d 62 6c 79 2e 20 20 54 68 65 72 65 0d  ssembly.  There.
13620 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
13630 20 61 72 65 20 73 6f 6d 65 20 63 6f 6d 70 69 6c   are some compil
13640 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74  e-time options t
13650 68 61 74 20 6d 75 73 74 20 61 6c 73 6f 20 68 61  hat must also ha
13660 76 65 20 62 65 65 6e 20 65 6e 61 62 6c 65 64 0d  ve been enabled.
13670 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
13680 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70   for the interop
13690 20 61 73 73 65 6d 62 6c 79 20 69 6e 20 6f 72 64   assembly in ord
136a0 65 72 20 74 6f 20 62 65 20 65 66 66 65 63 74 69  er to be effecti
136b0 76 65 2e 20 20 46 6f 72 20 74 68 6f 73 65 0d 0a  ve.  For those..
136c0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
136d0 6f 70 74 69 6f 6e 73 2c 20 69 74 20 77 69 6c 6c  options, it will
136e0 20 62 65 20 61 73 73 75 6d 65 64 20 74 68 61 74   be assumed that
136f0 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20   it was enabled
13700 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 0d  for the interop.
13710 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
13720 20 61 73 73 65 6d 62 6c 79 20 69 66 20 69 74 20   assembly if it
13730 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20  was enabled for
13740 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65  the managed asse
13750 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23  mbly...        #
13760 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
13770 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  h defineConstant
13780 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
13790 20 20 20 20 20 20 43 48 45 43 4b 5f 53 54 41 54        CHECK_STAT
137a0 45 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 20 44  E COUNT_HANDLE D
137b0 45 42 55 47 20 49 4e 54 45 52 4f 50 5f 43 4f 44  EBUG INTEROP_COD
137c0 45 43 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47  EC INTEROP_DEBUG
137d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
137e0 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f  INTEROP_EXTENSIO
137f0 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45  N_FUNCTIONS INTE
13800 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45  ROP_LEGACY_CLOSE
13810 20 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 5c 0d 0a   INTEROP_LOG \..
13820 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45              INTE
13830 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49  ROP_TEST_EXTENSI
13840 4f 4e 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55  ON INTEROP_VIRTU
13850 41 4c 5f 54 41 42 4c 45 20 4e 45 54 5f 32 30 20  AL_TABLE NET_20
13860 4e 45 54 5f 33 35 20 5c 0d 0a 20 20 20 20 20 20  NET_35 \..
13870 20 20 20 20 20 20 4e 45 54 5f 34 30 20 4e 45 54        NET_40 NET
13880 5f 34 35 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  _45 NET_COMPACT_
13890 32 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  20 PLATFORM_COMP
138a0 41 43 54 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a  ACTFRAMEWORK \..
138b0 20 20 20 20 20 20 20 20 20 20 20 20 50 52 45 4c              PREL
138c0 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41  OAD_NATIVE_LIBRA
138d0 52 59 20 52 45 54 41 52 47 45 54 41 42 4c 45 20  RY RETARGETABLE
138e0 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20  SQLITE_STANDARD
138f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  \..            T
13900 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44  HROW_ON_DISPOSED
13910 20 54 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e   TRACE TRACE_CON
13920 4e 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 48 41  NECTION TRACE_HA
13930 4e 44 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20  NDLE \..
13940 20 20 20 20 54 52 41 43 45 5f 50 52 45 4c 4f 41      TRACE_PRELOA
13950 44 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e  D TRACE_STATEMEN
13960 54 20 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 20  T TRACE_WARNING
13970 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54  TRACK_MEMORY_BYT
13980 45 53 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ES \..
13990 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c    USE_INTEROP_DL
139a0 4c 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56 32  L USE_PREPARE_V2
139b0 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 20   WINDOWS] {..
139c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
139d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
139e0 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 69 6c 65  k if the compile
139f0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is
13a00 6c 69 73 74 65 64 20 69 6e 20 74 68 65 20 6c 69  listed in the li
13a10 73 74 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20  st of..
13a20 20 23 20 20 20 20 20 20 20 22 64 65 66 69 6e 65   #       "define
13a30 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70 74   constants" kept
13a40 20 74 72 61 63 6b 20 6f 66 20 62 79 20 74 68 65   track of by the
13a50 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
13a60 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  y...          #.
13a70 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
13a80 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43  ForSQLiteDefineC
13a90 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f  onstant $::test_ 13aa0 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65 43 channel$defineC
13ab0 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20 20 20  onstant..
13ac0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
13ad0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
13ae0 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65   Check the curre
13af0 6e 74 20 62 75 69 6c 64 20 79 65 61 72 2e 20 20  nt build year.
13b00 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 20  Basically, this
13b10 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20 20  indicates..
13b20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 63 68     #       which
13b30 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75   version of MSBu
13b40 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73 75 61  ild and/or Visua
13b50 6c 20 53 74 75 64 69 6f 20 77 61 73 20 75 73 65  l Studio was use
13b60 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20  d to..        #
13b70 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 20 74 68        compile th
13b80 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72  e assembly binar
13b90 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d  ies under test..
13ba0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
13bb0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 13bc0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 t_channel \.. 13bd0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 13be0 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 hecking for Syst 13bf0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 em.Data.SQLite b 13c00 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a uild year... ".. 13c10 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 79 65 .. set ye 13c20 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 ar [getBuildYear 13c30 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f ].. addCo 13c40 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 13c50 41 72 67 73 20 62 75 69 6c 64 59 65 61 72 2e 20 Args buildYear. 13c60 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20$year]..
13c70 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 13c80 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 13c90 73 20 5c 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d s \"$year \"\n]
13ca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
13cb0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
13cc0 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  heck the current
13cd0 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61   build configura
13ce0 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f 75  tion.  This shou
13cf0 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20  ld normally..
13d00 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
13d10 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f  either "Debug" o
13d20 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20  r "Release"...
13d30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13d40 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 13d50 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 13d60 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec 13d70 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. 13d80 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c Data.SQLite buil 13d90 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e d configuration. 13da0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 13db0 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f set configuratio 13dc0 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 n [getBuildConfi 13dd0 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 guration].. 13de0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 13df0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 [appendArgs bui 13e00 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e ldConfiguration. 13e10 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d$configuration]
13e20 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
13e30 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 13e40 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
13e50 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c 22  configuration \"
13e60 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
13e70 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
13e80 3a 20 54 72 79 20 74 6f 20 73 65 74 75 70 20 61  : Try to setup a
13e90 6e 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c  n interrupt call
13ea0 62 61 63 6b 20 75 73 69 6e 67 20 74 68 65 20 73  back using the s
13eb0 63 72 69 70 74 20 64 65 62 75 67 67 65 72 0d 0a  cript debugger..
13ec0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
13ed0 74 68 61 74 20 77 69 6c 6c 20 63 61 6e 63 65 6c  that will cancel
13ee0 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 69 65 73   all SQL queries
13ef0 20 69 6e 20 70 72 6f 67 72 65 73 73 20 66 6f 72   in progress for
13f00 20 61 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a 20   all database..
13f10 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
13f20 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e  onnections known
13f30 20 74 6f 20 74 68 69 73 20 69 6e 74 65 72 70 72   to this interpr
13f40 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23  eter...        #
13f50 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
13f60 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
13f70 28 73 71 6c 69 74 65 49 6e 74 65 72 72 75 70 74  (sqliteInterrupt
13f80 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65 6e  Callback)]} then
13f90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
13fa0 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43 61  tupDbInterruptCa
13fb0 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f 63  llback $::test_c 13fc0 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f 6c hannel$::test_l
13fd0 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  og..        }...
13fe0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
13ff0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
14000 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65  k for the native
14010 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2c   runtime option,
14020 20 77 68 69 63 68 20 77 6f 75 6c 64 20 6d 65 61   which would mea
14030 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 20 20 20  n we are..
14040 20 20 23 20 20 20 20 20 20 20 75 73 69 6e 67 20    #       using
14050 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
14060 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20  ssembly...
14070 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65    #..        che
14080 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69  ckForRuntimeOpti
14090 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  on $::test_chann 140a0 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 el native.... 140b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 140c0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 140d0 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 140e0 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68 65 should count the 140f0 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 number of conne 14100 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 ctions.. 14110 23 20 20 20 20 20 20 20 22 6f 70 65 6e 65 64 22 # "opened" 14120 20 61 6e 64 20 22 63 6c 6f 73 65 64 22 20 66 72 and "closed" fr 14130 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68 65 6e om the pool when 14140 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 determining if 14150 61 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 a test.. 14160 23 20 20 20 20 20 20 20 70 61 73 73 65 64 2e 20 # passed. 14170 20 44 69 73 61 62 6c 69 6e 67 20 74 68 69 73 20 Disabling this 14180 62 65 68 61 76 69 6f 72 20 69 73 20 73 6f 6d 65 behavior is some 14190 74 69 6d 65 73 20 6e 65 63 65 73 73 61 72 79 20 times necessary 141a0 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 (e.g... # 141b0 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 74 68 during th 141c0 65 20 72 65 6c 65 61 73 65 20 74 65 73 74 69 6e e release testin 141d0 67 20 70 72 6f 63 65 73 73 29 20 62 65 63 61 75 g process) becau 141e0 73 65 20 74 68 65 72 65 20 61 72 65 20 73 65 76 se there are sev 141f0 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 eral.. # 14200 20 20 20 20 20 20 74 65 73 74 73 20 74 68 61 74 tests that 14210 20 72 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f 70 rely on the "op 14220 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 ened from pool" 14230 63 6f 75 6e 74 20 62 65 69 6e 67 20 67 72 65 61 count being grea 14240 74 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ter.. # 14250 20 20 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e 20 than zero. 14260 20 54 68 65 73 65 20 74 65 73 74 73 20 6d 61 79 These tests may 14270 20 66 61 69 6c 20 64 75 65 20 74 6f 20 74 68 65 fail due to the 14280 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74 non-determinist 14290 69 63 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ic.. # 142a0 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f 66 20 behavior of 142b0 74 68 65 20 43 4c 52 20 47 43 2c 20 65 76 65 6e the CLR GC, even 142c0 20 77 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e when there is n 142d0 6f 20 62 75 67 20 69 6e 20 74 68 65 20 63 6f 64 o bug in the cod 142e0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 142f0 20 20 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e being tested. 14300 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 14310 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e checkForRun 14320 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 timeOption$::te
14330 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f  st_channel noPoo
14340 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 20  lCounts....
14350 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
14360 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65  NOTE: Report the
14370 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20   resource usage
14380 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67  prior to running
14390 20 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20   any tests...
143a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
143b0 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f  reportSQLiteReso
143c0 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68  urces $::test_ch 143d0 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 annel.... 143e0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 143f0 54 45 3a 20 53 68 6f 77 20 74 68 65 20 61 63 74 TE: Show the act 14400 69 76 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 ive test constra 14410 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ints... # 14420 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 14430 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
14440 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d  [appendArgs "---
14450 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a 20 22  - constraints: "
14460 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
14470 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f  [formatList [lso
14480 72 74 20 5b 67 65 74 43 6f 6e 73 74 72 61 69 6e  rt [getConstrain
14490 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d  ts]] <none>] \n]
144a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
144b0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
144c0 61 76 65 20 74 68 65 20 74 65 73 74 20 63 6f 6e  ave the test con
144d0 73 74 72 61 69 6e 74 73 20 66 6f 72 20 75 73 65  straints for use
144e0 20 62 79 20 74 68 72 65 61 64 73 20 63 72 65 61   by threads crea
144f0 74 65 64 20 69 6e 20 74 68 69 73 0d 0a 20 20 20  ted in this..
14500 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70       #       app
14510 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2e  lication domain.
14520 20 20 54 68 69 73 20 69 73 20 6e 65 63 65 73 73    This is necess
14530 61 72 79 20 62 65 63 61 75 73 65 20 61 6c 6c 20  ary because all
14540 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20  the Eagle..
14550 20 20 20 23 20 20 20 20 20 20 20 22 74 65 73 74     #       "test
14560 20 63 6f 6e 74 65 78 74 22 20 69 6e 66 6f 72 6d   context" inform
14570 61 74 69 6f 6e 20 69 73 20 70 65 72 2d 74 68 72  ation is per-thr
14580 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ead...        #.
14590 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69  .        if {![i
145a0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
145b0 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 5d 7d 20  t_constraints]}
145c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
145d0 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e    set ::test_con
145e0 73 74 72 61 69 6e 74 73 20 24 3a 3a 65 61 67 6c  straints $::eagl 145f0 65 5f 74 65 73 74 73 28 63 6f 6e 73 74 72 61 69 e_tests(constrai 14600 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d nts).. }. 14610 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 14620 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f # NOTE: Lo 14630 61 64 20 74 68 65 20 22 61 66 74 65 72 2d 63 6f ad the "after-co 14640 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f nstraints" custo 14650 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f m per-user and/o 14660 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 r per-host.. 14670 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 14680 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a settings now... 14690 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 146a0 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 uplevel 1 [li 146b0 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 st loadSQLiteTes 146c0 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 tSettings$::tes
146d0 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66 74 65 72  t_channel .after
146e0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
146f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
14700 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65  Show when our te
14710 73 74 73 20 61 63 74 75 61 6c 6c 79 20 62 65 67  sts actually beg
14720 61 6e 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20  an (now)...
14730 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
14740 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 14750 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 14760 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 14770 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 ---- System.Data 14780 2e 53 51 4c 69 74 65 20 74 65 73 74 73 20 62 65 .SQLite tests be 14790 67 61 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 gan at " \.. 147a0 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 [clock f 147b0 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 ormat [clock sec 147c0 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 onds]] \n].. 147d0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 147e0 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 proc runSQLit 147f0 65 54 65 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d eTestEpilogue {} 14800 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 14810 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 14820 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 running our cust 14830 6f 6d 20 65 70 69 6c 6f 67 75 65 20 69 66 20 74 om epilogue if t 14840 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 he main one has 14850 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 been.. # 14860 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 skipped... 14870 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 14880 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 14890 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65 61 67 :no(epilogue.eag 148a0 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 le)]} then {.. 148b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 148c0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 # NOTE: Show wh 148d0 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 en our tests act 148e0 75 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e 6f 77 ually ended (now 148f0 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 14900 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
14910 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
14920 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
14930 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79          "---- Sy
14940 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
14950 20 74 65 73 74 73 20 65 6e 64 65 64 20 61 74 20   tests ended at
14960 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
14970 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b   [clock format [
14980 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20  clock seconds]]
14990 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
149a0 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46  ..        # BUGF
149b0 49 58 3a 20 42 65 66 6f 72 65 20 63 68 65 63 6b  IX: Before check
149c0 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 72 65  ing the final re
149d0 73 6f 75 72 63 65 73 20 69 6e 20 75 73 65 20 62  sources in use b
149e0 79 20 53 51 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a  y SQLite, make..
149f0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
14a00 20 20 73 75 72 65 20 62 6f 74 68 20 6f 66 20 74    sure both of t
14a10 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65  he PRAGMA relate
14a20 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65  d directory name
14a30 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20  s are freed...
14a40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14a50 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44   checkForSQLiteD
14a60 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65  irectories $::te 14a70 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d st_channel true. 14a80 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 14a90 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c # NOTE: Al 14aa0 73 6f 20 72 65 70 6f 72 74 20 74 68 65 20 72 65 so report the re 14ab0 73 6f 75 72 63 65 20 75 73 61 67 65 20 61 66 74 source usage aft 14ac0 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 er running the t 14ad0 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ests... # 14ae0 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 .. report 14af0 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 SQLiteResources 14b00 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
14b10 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
14b20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
14b30 70 6f 72 74 20 74 68 65 20 63 72 69 74 69 63 61  port the critica
14b40 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20  l handle counts
14b50 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68  after running th
14b60 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20  e tests...
14b70 20 20 23 0d 0a 20 20 20 20 20 20 20 20 67 65 74    #..        get
14b80 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e  SQLiteHandleCoun
14b90 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts \$::test_chann
14ba0 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  el..      }..
14bb0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23   }.....    #####
14bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14bd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14be0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14c00 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23  ######..    ####
14c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14c20 23 23 23 23 23 23 23 23 23 20 45 4e 44 20 45 61  ######### END Ea
14c30 67 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23  gle ONLY #######
14c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14c50 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23  #######..    ###
14c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14c90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
14ca0 23 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d  ########..  }...
14cb0 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE:
14cc0 53 61 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66  Save the name of
14cd0 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63   the directory c
14ce0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66  ontaining this f
14cf0 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20  ile...  #..  if
14d00 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63  {![info exists c
14d10 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d  ommon_directory]
14d20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65  } then {..    se
14d30 74 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  t common_directo
14d40 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ry [file dirname
14d50 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d   [info script]].
14d60 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23  .  }....  #..  #
14d70 20 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74   NOTE: Provide t
14d80 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  he System.Data.S
14d90 51 4c 69 74 65 20 74 65 73 74 20 70 61 63 6b 61  QLite test packa
14da0 67 65 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70  ge to the interp
14db0 72 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70  reter...  #..  p
14dc0 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53  ackage provide S
14dd0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
14de0 65 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a     e.Test 1.0..}..