System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact b9f902c3e1d110885a786aa8a7bc1b65d32eb4b4:

• File Tests/common.eagle — part of check-in [fc38f756de] at 2012-12-31 18:19:34 on branch trunk — Modify test suite infrastructure to support canceling pending SQL queries when the interpreter is interrupted. (user: mistachkin size: 68277)

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b  etBuildYear {} {
0340: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0350: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
0360: 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74 69  the "year" setti
0370: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
0380: 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75 73  ridden by the us
0390: 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  er (e.g...
03a0: 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63  #       on the c
03b0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
03c0: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
03d0: 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 68 20  l exactly which
03e0: 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  set of..      #
03f0: 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 20 77        binaries w
0400: 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74  e are testing, t
0410: 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 75 73  hose produced us
0420: 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c 20 53  ing the Visual S
0430: 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20  tudio..      #
0440: 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c       2005, 2008,
0450: 20 32 30 31 30 2c 20 6f 72 20 32 30 31 32 20 62   2010, or 2012 b
0460: 75 69 6c 64 20 73 79 73 74 65 6d 73 2e 20 20 54  uild systems.  T
0470: 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20  o override this
0480: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20  value..      #
0490: 20 20 20 20 20 76 69 61 20 74 68 65 20 63 6f 6d       via the com
04a0: 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72  mand line, enter
04b0: 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c   a command simil
04c0: 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  ar to one of the
04d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
04e0: 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f  following (all o
04f0: 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20  n one line):..
0500: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20      #..      #
0510: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e       EagleShell.
0520: 65 78 65 20 2d 70 72 65 49 6e 69 74 69 61 6c 69  exe -preInitiali
0530: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61  ze "set test_yea
0540: 72 20 32 30 30 35 22 0d 0a 20 20 20 20 20 20 23  r 2005"..      #
0550: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e           -file .
0560: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67  \path\to\all.eag
0570: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  le..      #..
0580: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0590: 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65 49 6e  Shell.exe -preIn
05a0: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
05b0: 73 74 5f 79 65 61 72 20 32 30 30 38 22 0d 0a 20  st_year 2008"..
05c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
05d0: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
05e0: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
05f0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0600: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
0610: 2d 70 72 65 49 6e 69 74 69 61 6c 69 7a 65 20 22  -preInitialize "
0620: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
0630: 31 30 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  10"..      #
0640: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
0650: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
0660: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0670: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0680: 6c 2e 65 78 65 20 2d 70 72 65 49 6e 69 74 69 61  l.exe -preInitia
0690: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
06a0: 65 61 72 20 32 30 31 32 22 0d 0a 20 20 20 20 20  ear 2012"..
06b0: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
06c0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
06d0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
06e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
06f0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65  leShell.exe -pre
0700: 49 6e 69 74 69 61 6c 69 7a 65 20 22 75 6e 73 65  Initialize "unse
0710: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65  t -nocomplain te
0720: 73 74 5f 79 65 61 72 22 0d 0a 20 20 20 20 20 20  st_year"..
0730: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20  #         -file
0740: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
0750: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  gle..      #..
0760: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
0770: 69 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72  ists ::test_year
0780: 5d 20 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e  ] && [string len
0790: 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 72  gth $::test_year 07a0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 07b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 07c0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 07d0: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 07e0: 20 79 65 61 72 2e 20 20 49 66 20 74 68 69 73 20 year. If this 07f0: 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20 variable is not 0800: 73 65 74 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 set, the.. 0810: 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c # defaul 0820: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 t value will be 0830: 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72 based on whether 0840: 20 6f 72 20 6e 6f 74 20 45 61 67 6c 65 20 68 61 or not Eagle ha 0850: 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 20 20 s been.. 0860: 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 64 # compiled 0870: 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c 52 against the CLR 0880: 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 76 34 2e v2.0 or CLR v4. 0890: 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 0... #.. 08a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
08b0: 3a 74 65 73 74 5f 79 65 61 72 0d 0a 20 20 20 20  :test_year..
08c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
08d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
08e0: 20 4e 4f 54 45 3a 20 49 66 20 45 61 67 6c 65 20   NOTE: If Eagle
08f0: 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c 65  has been compile
0900: 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c  d against the CL
0910: 52 20 76 34 2e 30 2c 20 75 73 65 20 22 32 30 31  R v4.0, use "201
0920: 30 22 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23  0" by..        #
0930: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 28         default (
0940: 77 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 30  we could use "20
0950: 31 32 22 20 69 6e 20 74 68 61 74 20 63 61 73 65  12" in that case
0960: 20 61 73 20 77 65 6c 6c 29 20 61 73 20 74 68 65   as well) as the
0970: 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23   test..        #
0980: 20 20 20 20 20 20 20 79 65 61 72 3b 20 6f 74 68         year; oth
0990: 65 72 77 69 73 65 2c 20 75 73 65 20 22 32 30 30  erwise, use "200
09a0: 38 22 20 62 79 20 64 65 66 61 75 6c 74 20 28 77  8" by default (w
09b0: 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 30 30  e could use "200
09c0: 35 22 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 23  5" in..        #
09d0: 20 20 20 20 20 20 20 74 68 61 74 20 63 61 73 65         that case
09e0: 20 61 73 20 77 65 6c 6c 29 2e 20 20 49 66 20 61   as well).  If a
09f0: 6e 6f 74 68 65 72 20 6d 61 6a 6f 72 20 5b 69 6e  nother major [in
0a00: 63 6f 6d 70 61 74 69 62 6c 65 5d 20 76 65 72 73  compatible] vers
0a10: 69 6f 6e 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  ion of..
0a20: 23 20 20 20 20 20 20 20 74 68 65 20 43 4c 52 20  #       the CLR
0a30: 69 73 20 72 65 6c 65 61 73 65 64 2c 20 74 68 69  is released, thi
0a40: 73 20 63 68 65 63 6b 20 77 69 6c 6c 20 68 61 76  s check will hav
0a50: 65 20 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e  e to be changed.
0a60: 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 23    The..        #
0a70: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 74         default t
0a80: 65 73 74 20 79 65 61 72 20 74 6f 20 75 73 65 20  est year to use
0a90: 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72  for a particular
0aa0: 20 43 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79   CLR version may
0ab0: 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20   be..        #
0ac0: 20 20 20 20 20 6f 76 65 72 72 69 64 64 65 6e 20       overridden
0ad0: 62 79 20 73 65 74 74 69 6e 67 20 74 68 65 20 67  by setting the g
0ae0: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 22  lobal variable "
0af0: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 24  test_year_clr_v$0b00: 58 22 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 X",.. # 0b10: 20 20 20 20 20 77 68 65 72 65 20 22 24 58 22 20 where "$X"
0b20: 6d 61 79 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20  may [currently]
0b30: 62 65 20 65 69 74 68 65 72 20 22 32 22 20 6f 72  be either "2" or
0b40: 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23   "4"...        #
0b50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68  ..        if {[h
0b60: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d  aveConstraint im
0b70: 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74  ageRuntime40]} t
0b80: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
0b90: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
0ba0: 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c  s ::test_year_cl
0bb0: 72 5f 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20  r_v4] && \..
0bc0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
0bd0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74  g length $::test 0be0: 5f 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 _year_clr_v4] > 0bf0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 0c00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 0c10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 0c20: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 0c30: 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 68 test year for th 0c40: 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 e CLR v4.0... 0c50: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 0c60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
0c70: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f  ::test_year_clr_
0c80: 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  v4..          }
0c90: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0ca0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
0cb0: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
0cc0: 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74 20  he default test
0cd0: 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52  year for the CLR
0ce0: 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20   v4.0...
0cf0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
0d00: 20 20 20 72 65 74 75 72 6e 20 32 30 31 30 3b 20     return 2010;
0d10: 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61  # TODO: Good "fa
0d20: 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f  llback" default?
0d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
0d40: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
0d50: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
0d60: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
0d70: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20  st_year_clr_v2]
0d80: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
0d90: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
0da0: 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f  th $::test_year_ 0db0: 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 clr_v2] > 0} the 0dc0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 0dd0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 0de0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 0df0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 79 specified test y 0e00: 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 ear for the CLR 0e10: 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 v2.0... 0e20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 0e30: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 return$::test
0e40: 5f 79 65 61 72 5f 63 6c 72 5f 76 32 0d 0a 20 20  _year_clr_v2..
0e50: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
0e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
0e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
0e80: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66  OTE: Use the def
0e90: 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20 66  ault test year f
0ea0: 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e  or the CLR v2.0.
0eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
0ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
0ed0: 75 72 6e 20 32 30 30 38 3b 20 23 20 54 4f 44 4f  urn 2008; # TODO
0ee0: 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b  : Good "fallback
0ef0: 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20  " default?..
0f00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
0f10: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
0f20: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
0f30: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72  getBuildConfigur
0f40: 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20  ation {} {..
0f50: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
0f60: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22 63  E: See if the "c
0f70: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73 65  onfiguration" se
0f80: 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f  tting has been o
0f90: 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65  verridden by the
0fa0: 20 75 73 65 72 0d 0a 20 20 20 20 20 20 23 20 20   user..      #
0fb0: 20 20 20 20 20 28 65 2e 67 2e 20 6f 6e 20 74 68       (e.g. on th
0fc0: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e  e command line).
0fd0: 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e    This helps con
0fe0: 74 72 6f 6c 20 65 78 61 63 74 6c 79 20 77 68 69  trol exactly whi
0ff0: 63 68 20 73 65 74 0d 0a 20 20 20 20 20 20 23 20  ch set..      #
1000: 20 20 20 20 20 20 6f 66 20 62 69 6e 61 72 69 65        of binarie
1010: 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67  s we are testing
1020: 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75 69   (i.e. those bui
1030: 6c 74 20 69 6e 20 74 68 65 20 22 44 65 62 75 67  lt in the "Debug
1040: 22 20 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20  " or..      #
1050: 20 20 20 20 22 52 65 6c 65 61 73 65 22 20 62 75      "Release" bu
1060: 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ild configuratio
1070: 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69 64  ns).  To overrid
1080: 65 20 74 68 69 73 20 76 61 6c 75 65 20 76 69 61  e this value via
1090: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
10a0: 20 20 20 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65      command line
10b0: 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e  , enter a comman
10c0: 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65  d similar to one
10d0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
10e0: 67 20 28 61 6c 6c 0d 0a 20 20 20 20 20 20 23 20  g (all..      #
10f0: 20 20 20 20 20 20 6f 6e 20 6f 6e 65 20 6c 69 6e        on one lin
1100: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  e):..      #..
1110: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
1120: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65 49  eShell.exe -preI
1130: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74  nitialize "set t
1140: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
1150: 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20 20  n Debug"..
1160: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20  #         -file
1170: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
1180: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  gle..      #..
1190: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
11a0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65 49  eShell.exe -preI
11b0: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74  nitialize "set t
11c0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
11d0: 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20 20  n Release"..
11e0: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
11f0: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
1200: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
1210: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61        #       Ea
1220: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66 69  gleShell.exe -fi
1230: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c  le .\path\to\all
1240: 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74 0d  .eagle -preTest.
1250: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
1260: 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c   "unset -nocompl
1270: 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67 75  ain test_configu
1280: 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 23  ration"..      #
1290: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
12a0: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
12b0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 26  configuration] &
12c0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
12d0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 12e0: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 :test_configurat 12f0: 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ion] > 0} then { 1300: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1310: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 1320: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 the specified t 1330: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f est configuratio 1340: 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 n. The default 1350: 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20 20 value used.. 1360: 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 # for 1370: 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 73 this variable is 1380: 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 20 73 "Release", as s 1390: 65 74 20 62 79 20 74 68 65 20 74 65 73 74 20 73 et by the test s 13a0: 75 69 74 65 20 69 74 73 65 6c 66 2e 0d 0a 20 20 uite itself... 13b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13c0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f return$::test_
13d0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  configuration..
13e0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
13f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1400: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72 6d 61 6c    # NOTE: Normal
1410: 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e 65 76 65  ly, we will neve
1420: 72 20 68 69 74 20 74 68 69 73 20 63 61 73 65 20  r hit this case
1430: 62 65 63 61 75 73 65 20 74 68 65 20 76 61 6c 75  because the valu
1440: 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  e of the..
1450: 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63    #       test c
1460: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 61 72  onfiguration var
1470: 69 61 62 6c 65 20 69 73 20 61 6c 77 61 79 73 20  iable is always
1480: 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 20  set by the test
1490: 73 75 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23  suite..        #
14a0: 20 20 20 20 20 20 20 69 74 73 65 6c 66 3b 20 68         itself; h
14b0: 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 20 62  owever, it can b
14c0: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 75 73 69  e overridden usi
14d0: 6e 67 20 74 68 65 20 75 6e 73 65 74 20 63 6f 6d  ng the unset com
14e0: 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20  mand..        #
14f0: 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 2d        from the -
1500: 70 72 65 54 65 73 74 20 6f 70 74 69 6f 6e 20 74  preTest option t
1510: 6f 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  o the test suite
1520: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1530: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 1540: 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 63 eagle_platform(c 1550: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 0d 0a 20 onfiguration).. 1560: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 1570: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 .. proc getBu 1580: 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 ildDirectory {} 1590: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 15a0: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 # NOTE: See if 15b0: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 the "native" ru 15c0: 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 ntime option has 15d0: 20 62 65 65 6e 20 73 65 74 2e 20 20 49 66 20 73 been set. If s 15e0: 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20 o, use the.. 15f0: 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 # direct 1600: 6f 72 79 20 66 6f 72 20 74 68 65 20 6d 69 78 65 ory for the mixe 1610: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 d-mode assembly 1620: 28 61 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69 (a.k.a. the nati 1630: 76 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 ve interop.. 1640: 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 1650: 6c 79 29 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20 ly). To enable 1660: 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 this option via 1670: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line 1680: 2c 20 65 6e 74 65 72 20 61 0d 0a 20 20 20 20 20 , enter a.. 1690: 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 # command 16a0: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 similar to one 16b0: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 of the following 16c0: 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e (all on one lin 16d0: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 e):.. #.. 16e0: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 16f0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 eShell.exe -init 1700: 69 61 6c 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f ialize -runtimeO 1710: 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 ption native.. 1720: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 # -f 1730: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c ile .\path\to\al 1740: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 l.eagle.. # 1750: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1760: 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 20 6f To enable this o 1770: 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 63 6f ption via the co 1780: 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72 mmand line prior 1790: 20 74 6f 20 74 68 65 20 22 62 65 74 61 20 31 36 to the "beta 16 17a0: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ".. # 17b0: 20 72 65 6c 65 61 73 65 20 6f 66 20 45 61 67 6c release of Eagl 17c0: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 e, the following 17d0: 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65 command must be 17e0: 20 75 73 65 64 20 69 6e 73 74 65 61 64 0d 0a 20 used instead.. 17f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 28 61 6c # (al 1800: 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 so all on one li 1810: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ne):.. #.. 1820: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 1830: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 leShell.exe -ini 1840: 74 69 61 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69 tialize -postIni 1850: 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23 tialize.. # 1860: 20 20 20 20 20 20 20 20 20 22 6f 62 6a 65 63 74 "object 1870: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 invoke Interpre 1880: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 41 64 ter.GetActive Ad 1890: 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e dRuntimeOption n 18a0: 61 74 69 76 65 22 0d 0a 20 20 20 20 20 20 23 20 ative".. # 18b0: 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c -file .\ 18c0: 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c path\to\all.eagl 18d0: 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 e.. #.. 18e0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 18f0: 74 73 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 ts ::build_direc 1900: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tory] && \.. 1910: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 1920: 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69 ngth$::build_di
1930: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68  rectory] > 0} th
1940: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
1950: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1960: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66   The location of
1970: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
1980: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
1990: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
19a0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
19b0: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72  fore, use it ver
19c0: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
19d0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
19e0: 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63  n $::build_direc 19f0: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 1a00: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 1a10: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1a20: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 Figure out the 1a30: 62 75 69 6c 64 20 62 61 73 65 20 64 69 72 65 63 build base direc 1a40: 74 6f 72 79 2e 20 20 54 68 69 73 20 77 69 6c 6c tory. This will 1a50: 20 62 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 be the director 1a60: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 1a70: 20 20 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 that contains 1a80: 20 74 68 65 20 61 63 74 75 61 6c 20 62 75 69 6c the actual buil 1a90: 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f d output directo 1aa0: 72 79 20 28 65 2e 67 2e 20 22 62 69 6e 22 29 2e ry (e.g. "bin"). 1ab0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1ac0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 1ad0: 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 62 61 xists ::build_ba 1ae0: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 se_directory] && 1af0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b00: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
1b10: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
1b20: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
1b30: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
1b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
1b50: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e  TE: The location
1b60: 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 62 61   of the build ba
1b70: 73 65 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  se directory has
1b80: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
1b90: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  ;..          #
1ba0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore,
1bb0: 75 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e  use it verbatim.
1bc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1bd0: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74           set pat
1be0: 68 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f  h $::build_base_ 1bf0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 1c00: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in 1c10: 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d fo exists ::comm 1c20: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 on_directory] && 1c30: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c40: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
1c50: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
1c60: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
1c70: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1c80: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1c90: 4e 65 78 74 2c 20 66 61 6c 6c 62 61 63 6b 20 74  Next, fallback t
1ca0: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64 69 72  o the parent dir
1cb0: 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f 6e  ectory of the on
1cc0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20  e containing..
1cd0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1ce0: 74 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e 20  this file (i.e.
1cf0: 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c  "common.eagle"),
1d00: 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   if available...
1d10: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1d20: 20 20 20 20 20 20 20 73 65 74 20 70 61 74 68 20         set path
1d30: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a  [file dirname $: 1d40: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 :common_director 1d50: 79 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c y].. } el 1d60: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 1d70: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1d80: 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 OTE: Finally, fa 1d90: 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 70 61 llback to the pa 1da0: 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f rent directory o 1db0: 66 20 74 68 65 20 45 61 67 6c 65 54 65 73 74 0d f the EagleTest. 1dc0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 1dd0: 20 20 20 70 61 74 68 2e 20 20 54 68 65 20 45 61 path. The Ea 1de0: 67 6c 65 54 65 73 74 20 70 61 63 6b 61 67 65 20 gleTest package 1df0: 67 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 guarantees that 1e00: 74 68 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 this variable.. 1e10: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1e20: 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 will be set to 1e30: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f the directory co 1e40: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 72 ntaining the fir 1e50: 73 74 20 66 69 6c 65 20 74 6f 0d 0a 20 20 20 20 st file to.. 1e60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 # ex 1e70: 65 63 75 74 65 20 74 68 65 20 5b 72 75 6e 54 65 ecute the [runTe 1e80: 73 74 50 72 6f 6c 6f 67 75 65 5d 20 73 63 72 69 stPrologue] scri 1e90: 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65 pt library proce 1ea0: 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 dure... 1eb0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 #.. se 1ec0: 74 20 70 61 74 68 20 5b 66 69 6c 65 20 64 69 72 t path [file dir 1ed0: 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20 name$::path]..
1ee0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1ef0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1f00: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e   NOTE: If the "n
1f10: 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f  ative" runtime o
1f20: 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68  ption is set, th
1f30: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
1f40: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23  embly..        #
1f50: 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20         is being
1f60: 74 65 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74  tested.  In that
1f70: 20 63 61 73 65 2c 20 74 68 65 20 70 61 74 68 20   case, the path
1f80: 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  to the build dir
1f90: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  ectory..
1fa0: 23 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e  #       will con
1fb0: 74 61 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72  tain the platfor
1fc0: 6d 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74  m name and all t
1fd0: 68 65 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65  he binaries unde
1fe0: 72 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  r test..
1ff0: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  #       should b
2000: 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61  e present in tha
2010: 74 20 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66  t directory.  If
2020: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75   the "native" ru
2030: 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23  ntime..        #
2040: 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73         option is
2050: 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75   not set, the bu
2060: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 77 69  ild directory wi
2070: 6c 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64  ll be considered
2080: 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20   to be..
2090: 23 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72  #       "platfor
20a0: 6d 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68  m-neutral", with
20b0: 20 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63   the notable exc
20c0: 65 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61  eption of any na
20d0: 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20  tive..        #
20e0: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28        assembly (
20f0: 65 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74  e.g. "SQLite.Int
2100: 65 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65  erop.dll") copie
2110: 64 20 74 68 65 72 65 20 64 75 72 69 6e 67 20 74  d there during t
2120: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
2130: 20 20 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73      build proces
2140: 73 20 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68  s itself.  If th
2150: 65 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20  e build process
2160: 73 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74  somehow does not
2170: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2180: 20 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76    copy the nativ
2190: 65 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74  e assembly for t
21a0: 68 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f  his platform, mo
21b0: 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d  st of the tests.
21c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
21d0: 20 69 6e 20 74 68 65 20 73 75 69 74 65 20 77 69   in the suite wi
21e0: 6c 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69  ll simply be ski
21f0: 70 70 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79  pped.  Generally
2200: 20 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65   speaking, there
2210: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2220: 20 20 61 72 65 20 74 77 6f 20 77 61 79 73 20 74    are two ways t
2230: 6f 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61  o build the bina
2240: 72 69 65 73 20 77 68 65 6e 20 70 72 65 70 61 72  ries when prepar
2250: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a  ing to run the..
2260: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2270: 74 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20  test suite:..
2280: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2290: 23 20 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64  #       1. Build
22a0: 20 74 68 65 20 73 65 70 61 72 61 74 65 20 6d 61   the separate ma
22b0: 6e 61 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65  naged and native
22c0: 20 61 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e   assemblies usin
22d0: 67 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20  g some..
22e0: 23 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61  #          comma
22f0: 6e 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d  nds similar to:.
2300: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2310: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62      #          b
2320: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69  uild.bat ${Confi 2330: 67 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 guration}Managed 2340: 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d Only${Platform}
2350: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2360: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24       build.bat $2370: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e {Configuration}N 2380: 61 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 ativeOnly${Plat
2390: 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23  form}..        #
23a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
23b0: 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e       Where ${Con 23c0: 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 figuration} is e 23d0: 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 ither "Debug" or 23e0: 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a "Release" and.. 23f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2400: 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69${Platform} i
2410: 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22  s either "Win32"
2420: 20 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20   or "x64"...
2430: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2440: 20 20 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20         2. Build
2450: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
2460: 73 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20  ssembly using a
2470: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20  command similar
2480: 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  to:..        #..
2490: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
24a0: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43     build.bat ${C 24b0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b onfiguration}${
24c0: 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20  Platform}..
24d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
24e0: 20 20 20 20 20 20 20 20 20 57 68 65 72 65 20 24           Where $24f0: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 {Configuration} 2500: 69 73 20 65 69 74 68 65 72 20 22 44 65 62 75 67 is either "Debug 2510: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 " or "Release" a 2520: 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 nd.. # 2530: 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72${Platfor
2540: 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 57 69  m} is either "Wi
2550: 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20  n32" or "x64".
2560: 49 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  If this command
2570: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
2580: 20 20 20 20 20 20 20 75 73 65 64 2c 20 76 61 72         used, var
2590: 69 6f 75 73 20 74 65 73 74 73 20 74 68 61 74 20  ious tests that
25a0: 72 65 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65  require suppleme
25b0: 6e 74 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20  ntary managed..
25c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
25d0: 20 20 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e    assemblies (e.
25e0: 67 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20  g. LINQ) may be
25f0: 73 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74  skipped unless t
2600: 68 6f 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20  hose binaries..
2610: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
2620: 20 20 61 72 65 20 73 75 62 73 65 71 75 65 6e 74    are subsequent
2630: 6c 79 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74  ly copied into t
2640: 68 65 20 63 6f 72 72 65 63 74 20 64 69 72 65 63  he correct direc
2650: 74 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20  tory (i.e. by..
2660: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
2670: 20 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22    "test_all.bat"
2680: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  )...        #..
2690: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e         #       N
26a0: 6f 74 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20  ote that all of
26b0: 74 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e  the build comman
26c0: 64 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65  ds above will de
26d0: 66 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a  fault to using..
26e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
26f0: 74 68 65 20 6c 61 74 65 73 74 20 76 65 72 73 69  the latest versi
2700: 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76  on of MSBuild av
2710: 61 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20  ailable and the
2720: 22 74 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d  "test_year" may.
2730: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2740: 20 6e 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75   need to be adju
2750: 73 74 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79  sted accordingly
2760: 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e   to actually run
2770: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e   the test suite.
2780: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2790: 20 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 63    Refer to the c
27a0: 6f 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42  omments in [getB
27b0: 75 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f  uildYear] for mo
27c0: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f  re information o
27d0: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
27e0: 20 20 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68     how to set th
27f0: 69 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20  is variable...
2800: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2810: 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65   if {[hasRuntime
2820: 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20  Option native]}
2830: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2840: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a    return [file j
2850: 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20 5b 67  oin $path bin [g 2860: 65 74 42 75 69 6c 64 59 65 61 72 5d 20 5b 6d 61 etBuildYear] [ma 2870: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 chineToPlatform 2880: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2890: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
28a0: 28 6d 61 63 68 69 6e 65 29 5d 20 5b 67 65 74 42  (machine)] [getB
28b0: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
28c0: 6e 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  n]]..        } e
28d0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
28e0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f   return [file jo
28f0: 69 6e 20 24 70 61 74 68 20 62 69 6e 20 5b 67 65  in $path bin [ge 2900: 74 42 75 69 6c 64 59 65 61 72 5d 20 5b 67 65 74 tBuildYear] [get 2910: 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 BuildConfigurati 2920: 6f 6e 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 on] \.. 2930: 20 20 20 20 20 62 69 6e 5d 0d 0a 20 20 20 20 20 bin].. 2940: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 2950: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 2960: 63 20 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 c getBuildFileNa 2970: 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 me { fileName } 2980: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 2990: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return 29a0: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 s the specified 29b0: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 file name as if 29c0: 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 it were located 29d0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 in the.. # 29e0: 20 20 20 20 20 20 62 75 69 6c 64 20 64 69 72 65 build dire 29f0: 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e ctory, discardin 2a00: 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 g any directory 2a10: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 information pres 2a20: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ent.. # 2a30: 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e in the file n 2a40: 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 ame as provided 2a50: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... 2a60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 2a70: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 eturn [file nati 2a80: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 vename \.. 2a90: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b [file join [ 2aa0: 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 getBuildDirector 2ab0: 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 y] [file tail$f
2ac0: 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20  ileName]]]..
2ad0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
2ae0: 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72  etBinaryDirector
2af0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  y {} {..      #.
2b00: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
2b10: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65  his procedure re
2b20: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74  turns the direct
2b30: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65  ory where the te
2b40: 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a  st application..
2b50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74        #       it
2b60: 73 65 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45  self (i.e. the E
2b70: 61 67 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c  agle shell) is l
2b80: 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20 77 69  ocated.  This wi
2b90: 6c 6c 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20  ll be used as..
2ba0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
2bb0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72   destination for
2bc0: 20 74 68 65 20 63 6f 70 69 65 64 20 53 79 73 74   the copied Syst
2bd0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e  em.Data.SQLite n
2be0: 61 74 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20  ative and..
2bf0: 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64   #       managed
2c00: 20 61 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65   assemblies (i.e
2c10: 2e 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69  . because this i
2c20: 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77  s one of the few
2c30: 20 70 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23   places..      #
2c40: 20 20 20 20 20 20 20 77 68 65 72 65 20 74 68 65         where the
2c50: 20 43 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c   CLR will actual
2c60: 6c 79 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64  ly find and load
2c70: 20 74 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e   them properly).
2c80: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
2c90: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
2ca0: 73 20 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63  s ::binary_direc
2cb0: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
2cc0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
2cd0: 6e 67 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64  ngth $::binary_d 2ce0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 2cf0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 2d00: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2d10: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 2d20: 66 20 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 f the binary dir 2d30: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 2d40: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 overridden;.. 2d50: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 2d60: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 refore, use it v 2d70: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 erbatim... 2d80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 2d90: 75 72 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 urn$::binary_di
2da0: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
2db0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
2dc0: 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69   return [info bi
2dd0: 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  nary]..      }..
2de0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
2df0: 6f 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c 65  oc getBinaryFile
2e00: 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20  Name { fileName
2e10: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
2e20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
2e30: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65  rns the specifie
2e40: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69  d file name as i
2e50: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65  f it were locate
2e60: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  d in the..
2e70: 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64  #       binary d
2e80: 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72  irectory, discar
2e90: 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f  ding any directo
2ea0: 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70  ry information p
2eb0: 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20  resent..      #
2ec0: 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c        in the fil
2ed0: 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64  e name as provid
2ee0: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
2ef0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
2f00: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e    return [file n
2f10: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
2f20: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
2f30: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
2f40: 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69  ctory] [file tai
2f50: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a  l $fileName]]].. 2f60: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 2f70: 6f 63 20 67 65 74 43 6f 72 65 42 69 6e 61 72 79 oc getCoreBinary 2f80: 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 73 74 61 6e FileName { {stan 2f90: 64 61 72 64 20 66 61 6c 73 65 7d 20 7d 20 7b 0d dard false} } {. 2fa0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2fb0: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 # NOTE: Returns 2fc0: 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f the full path fo 2fd0: 72 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 r the file conta 2fe0: 69 6e 69 6e 67 20 74 68 65 20 63 6f 72 65 20 53 ining the core S 2ff0: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20 20 QLite.. # 3000: 20 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f 64 library cod 3010: 65 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 e for this platf 3020: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 orm... #.. 3030: 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e if {[hasRun 3040: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 timeOption nativ 3050: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 3060: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 3070: 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 NOTE: Return th 3080: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 3090: 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e embly file name. 30a0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 30b0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 30c0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a e nativename \.. 30d0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 30e0: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 e join [getBinar 30f0: 79 44 69 72 65 63 74 6f 72 79 5d 20 53 79 73 74 yDirectory] Syst 3100: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 3110: 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c ll]].. } el 3120: 73 65 69 66 20 7b 24 73 74 61 6e 64 61 72 64 7d seif {$standard}
3130: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
3140: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
3150: 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e  TE: Return the n
3160: 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64  ative-only stand
3170: 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61  ard SQLite libra
3180: 72 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20  ry file name...
3190: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
31a0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e    return [file n
31b0: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
31c0: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a           [file j
31d0: 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69  oin [getBinaryDi
31e0: 72 65 63 74 6f 72 79 5d 20 73 71 6c 69 74 65 33  rectory] sqlite3
31f0: 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20  .dll]]..      }
3200: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
3210: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
3220: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61  E: Return the na
3230: 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f  tive-only intero
3240: 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20  p assembly file
3250: 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  name...        #
3260: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3270: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
3280: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
3290: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
32a0: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d  BinaryDirectory]
32b0: 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e   SQLite.Interop.
32c0: 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  dll]]..      }..
32d0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
32e0: 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65  oc getCommonDire
32f0: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20  ctory {} {..
3300: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
3310: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  E: This procedur
3320: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69  e returns the di
3330: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68  rectory where th
3340: 65 20 74 65 73 74 20 73 63 72 69 70 74 73 0d 0a  e test scripts..
3350: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68        #       sh
3360: 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e  ould be located.
3370: 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68    By default, th
3380: 69 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73 20  is just returns
3390: 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20  the Eagle..
33a0: 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20   #       binary
33b0: 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20  directory...
33c0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
33d0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f  info exists ::co
33e0: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20  mmon_directory]
33f0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
3400: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $3410: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f ::common_directo 3420: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ry] > 0} then {. 3430: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 3440: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 3450: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 location of the 3460: 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79 common directory 3470: 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a has been set;.. 3480: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 3490: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 therefore, use i 34a0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 34b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
34c0: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72  :common_director
34d0: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69  y..      } elsei
34e0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
34f0: 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f  ::vendor_directo
3500: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ry] && \..
3510: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
3520: 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72  th $::vendor_dir 3530: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 ectory] > 0} the 3540: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 3550: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 3560: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 The location of 3570: 74 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 63 the vendor direc 3580: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 tory has been se 3590: 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 t;.. # 35a0: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 therefore, u 35b0: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 se it... 35c0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 35d0: 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 n$::vendor_dire
35e0: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65  ctory..      } e
35f0: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  lseif {[info exi
3600: 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72  sts ::tcl_librar
3610: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
3620: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
3630: 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79  h $::tcl_library 3640: 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 ] > 0 && \.. 3650: 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69 [file isdi 3660: 72 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c rectory$::tcl_l
3670: 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ibrary]} then {.
3680: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
3690: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
36a0: 76 61 72 69 61 62 6c 65 20 77 69 74 68 20 74 68  variable with th
36b0: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  e location of th
36c0: 65 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79  e script library
36d0: 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20   is..        #
36e0: 20 20 20 20 20 73 65 74 20 61 6e 64 20 61 70 70       set and app
36f0: 65 61 72 73 20 74 6f 20 62 65 20 61 20 72 65 61  ears to be a rea
3700: 6c 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65  l directory (i.e
3710: 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a  . not embedded..
3720: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
3730: 77 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b 20  within a file);
3740: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
3750: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
3760: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 3770: 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20 :tcl_library.. 3780: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 3790: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 37a0: 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 # NOTE: Fallbac 37b0: 6b 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f k to the directo 37c0: 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 ry containing th 37d0: 65 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20 e executable... 37e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 37f0: 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 return [info b 3800: 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d inary].. }. 3810: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 3820: 72 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 44 roc getDatabaseD 3830: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. 3840: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 3850: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 3860: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 dure returns the 3870: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where 3880: 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 the test databa 3890: 73 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ses.. # 38a0: 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 should be loc 38b0: 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c ated. By defaul 38c0: 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 t, this just use 38d0: 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d s the temporary. 38e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 38f0: 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 irectory configu 3900: 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 red for this sys 3910: 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 tem... #.. 3920: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 3930: 78 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 xists ::database 3940: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 3950: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 3960: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 ing length$::da
3970: 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79  tabase_directory
3980: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
3990: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
39a0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
39b0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61  cation of the da
39c0: 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79  tabase directory
39d0: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
39e0: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23  dden;..        #
39f0: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65         therefore
3a00: 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20  , use it...
3a10: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
3a20: 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73 65  turn $::database 3a30: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 _directory.. 3a40: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 } elseif {[inf 3a50: 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 o exists ::scrat 3a60: 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 ch_directory] && 3a70: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 3a80: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
3a90: 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72  scratch_director
3aa0: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  y] > 0} then {..
3ab0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
3ac0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c     # NOTE: The l
3ad0: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ocation of the s
3ae0: 63 72 61 74 63 68 20 64 69 72 65 63 74 6f 72 79  cratch directory
3af0: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
3b00: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23  dden;..        #
3b10: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65         therefore
3b20: 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20  , use it...
3b30: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
3b40: 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f  turn $::scratch_ 3b50: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 3b60: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 3b70: 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 return [getTe 3b80: 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 mporaryPath].. 3b90: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 3ba0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 6d . proc getTem 3bb0: 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 20 poraryDirectory 3bc0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 3bd0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 3be0: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 s procedure retu 3bf0: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 rns the director 3c00: 79 20 77 68 65 72 65 20 74 68 65 20 74 65 6d 70 y where the temp 3c10: 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 20 orary files.. 3c20: 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c # shoul 3c30: 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 d be located. B 3c40: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 y default, this 3c50: 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 65 just uses the te 3c60: 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 mporary.. # 3c70: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 directory 3c80: 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 configured for 3c90: 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 this system... 3ca0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 3cb0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 3cc0: 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 temporary_direct 3cd0: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ory] && \.. 3ce0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 3cf0: 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 gth$::temporary
3d00: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d  _directory] > 0}
3d10: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
3d20: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
3d30: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e  TE: The location
3d40: 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
3d50: 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20  y directory has
3d60: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b  been overridden;
3d70: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
3d80: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
3d90: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
3da0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3db0: 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72  $::temporary_dir 3dc0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } 3dd0: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 elseif {[info ex 3de0: 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 ists ::scratch_d 3df0: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a irectory] && \.. 3e00: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 3e10: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 g length$::scra
3e20: 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e  tch_directory] >
3e30: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
3e40: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
3e50: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74   NOTE: The locat
3e60: 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74  ion of the scrat
3e70: 63 68 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  ch directory has
3e80: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
3e90: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ;..        #
3ea0: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73     therefore, us
3eb0: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  e it...        #
3ec0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
3ed0: 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65   $::scratch_dire 3ee0: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 3ef0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 3f00: 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 eturn [getTempor 3f10: 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 aryPath].. 3f20: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 3f30: 20 70 72 6f 63 20 67 65 74 54 65 73 74 4f 76 65 proc getTestOve 3f40: 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20 7b rridesPreamble { 3f50: 20 7b 65 78 74 72 61 56 61 72 4e 61 6d 65 73 20 {extraVarNames 3f60: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 ""} } {.. s 3f70: 65 74 20 76 61 72 4e 61 6d 65 73 20 5b 6c 69 73 et varNames [lis 3f80: 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 t].... #.. 3f90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 3fa0: 61 76 61 69 6c 61 62 6c 65 2c 20 73 74 61 72 74 available, start 3fb0: 20 77 69 74 68 20 74 68 65 20 6d 61 73 74 65 72 with the master 3fc0: 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 6f 76 list of test ov 3fd0: 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 23 20 erride.. # 3fe0: 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 73 2e variables. 3ff0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 4000: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 4010: 73 20 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 s ::test_overrid 4020: 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 es] && \.. 4030: 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a [llength$::
4040: 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20  test_overrides]
4050: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
4060: 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e       eval lappen
4070: 64 20 76 61 72 4e 61 6d 65 73 20 24 3a 3a 74 65  d varNames $::te 4080: 73 74 5f 6f 76 65 72 72 69 64 65 73 0d 0a 20 20 st_overrides.. 4090: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 40a0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 40b0: 49 66 20 72 65 71 75 65 73 74 65 64 20 62 79 20 If requested by 40c0: 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 64 64 20 our caller, add 40d0: 61 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 any additional v 40e0: 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 ariable.. # 40f0: 20 20 20 20 20 20 20 6e 61 6d 65 73 20 74 6f 20 names to 4100: 63 6f 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 copy now... 4110: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c #.. if {[l 4120: 6c 65 6e 67 74 68 20 24 65 78 74 72 61 56 61 72 length$extraVar
4130: 4e 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e  Names] > 0} then
4140: 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c   {..        eval
4150: 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65   lappend varName
4160: 73 20 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73  s $extraVarNames 4170: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 4180: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 4190: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 73 63 TE: Build the sc 41a0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f ript fragment to 41b0: 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 be returned by 41c0: 70 72 6f 63 65 73 73 69 6e 67 20 65 61 63 68 0d processing each. 41d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 . # v 41e0: 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 ariable name and 41f0: 20 61 64 64 69 6e 67 20 74 68 65 20 6e 65 63 65 adding the nece 4200: 63 65 73 73 61 72 79 20 73 63 72 69 70 74 20 66 cessary script f 4210: 72 61 67 6d 65 6e 74 73 20 66 6f 72 0d 0a 20 20 ragments for.. 4220: 20 20 20 20 23 20 20 20 20 20 20 20 65 61 63 68 # each 4230: 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a one... #.. 4240: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 set result 4250: 20 22 22 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 "".... for 4260: 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 76 61 each varName$va
4270: 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  rNames {..
4280: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
4290: 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 71  OTE: Build the q
42a0: 75 61 6c 69 66 69 65 64 20 67 6c 6f 62 61 6c 20  ualified global
42b0: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a  variable name...
42c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
42d0: 20 20 20 73 65 74 20 66 75 6c 6c 56 61 72 4e 61     set fullVarNa
42e0: 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 3a  me [appendArgs :
42f0: 3a 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20  : $varName].... 4300: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4310: 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 # NOTE: Does t 4320: 68 65 20 76 61 72 69 61 62 6c 65 20 65 78 69 73 he variable exis 4330: 74 20 69 6e 20 74 68 69 73 20 69 6e 74 65 72 70 t in this interp 4340: 72 65 74 65 72 20 63 6f 6e 74 65 78 74 3f 0d 0a reter context?.. 4350: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 4360: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 4370: 73 74 73 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 sts$fullVarName
4380: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
4390: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
43a0: 20 20 23 20 4e 4f 54 45 3a 20 41 70 70 65 6e 64    # NOTE: Append
43b0: 20 61 20 73 63 72 69 70 74 20 66 72 61 67 6d 65   a script fragme
43c0: 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74  nt to the result
43d0: 20 74 68 61 74 20 77 69 6c 6c 20 63 6f 72 72 65   that will corre
43e0: 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ctly..
43f0: 23 20 20 20 20 20 20 20 63 6f 70 79 20 61 6e 79  #       copy any
4400: 20 63 6f 6e 74 61 69 6e 65 64 20 76 61 6c 75 65   contained value
4410: 20 74 6f 20 61 6e 6f 74 68 65 72 20 69 6e 74 65   to another inte
4420: 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78 74 2e  rpreter context.
4430: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
4440: 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20           append
4450: 72 65 73 75 6c 74 20 5c 6e 20 22 73 65 74 20 22  result \n "set "
4460: 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 20 22 20   $fullVarName " 4470: 5c 7b 22 20 5b 73 65 74 20 24 66 75 6c 6c 56 61 \{" [set$fullVa
4480: 72 4e 61 6d 65 5d 20 5c 7d 0d 0a 20 20 20 20 20  rName] \}..
4490: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
44a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
44b0: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 72  # NOTE: If the r
44c0: 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 6f  esult contains o
44d0: 6e 65 20 6f 72 20 6d 6f 72 65 20 73 63 72 69 70  ne or more scrip
44e0: 74 20 66 72 61 67 6d 65 6e 74 73 2c 20 61 70 70  t fragments, app
44f0: 65 6e 64 20 61 0d 0a 20 20 20 20 20 20 23 20 20  end a..      #
4500: 20 20 20 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20       newline...
4510: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
4520: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
4530: 20 24 72 65 73 75 6c 74 5d 20 3e 20 30 7d 20 74   $result] > 0} t 4540: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a 4550: 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 0d ppend result \n. 4560: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 4570: 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
4580: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
4590: 70 72 6f 63 20 67 65 74 41 70 70 44 6f 6d 61 69  proc getAppDomai
45a0: 6e 50 72 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65  nPreamble { {pre
45b0: 66 69 78 20 22 22 7d 20 7b 73 75 66 66 69 78 20  fix ""} {suffix
45c0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ""} } {..      #
45d0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
45e0: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72  This procedure r
45f0: 65 74 75 72 6e 73 20 61 20 74 65 73 74 20 73 65  eturns a test se
4600: 74 75 70 20 73 63 72 69 70 74 20 66 72 61 67 6d  tup script fragm
4610: 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72  ent suitable for
4620: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4630: 65 76 61 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e  evaluation by an
4640: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65   interpreter cre
4650: 61 74 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61  ated in an isola
4660: 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d  ted application.
4670: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
4680: 6f 6d 61 69 6e 2e 20 20 54 68 65 20 73 63 72 69  omain.  The scri
4690: 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e  pt fragment bein
46a0: 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20  g returned will
46b0: 62 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79  be surrounded by
46c0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
46d0: 74 68 65 20 70 72 65 66 69 78 20 61 6e 64 20 73  the prefix and s
46e0: 75 66 66 69 78 20 22 73 63 72 69 70 74 20 66 72  uffix "script fr
46f0: 61 67 6d 65 6e 74 73 22 20 73 70 65 63 69 66 69  agments" specifi
4700: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
4710: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
4720: 20 69 66 20 61 6e 79 2e 20 20 54 68 65 20 65 6e   if any.  The en
4730: 74 69 72 65 20 73 63 72 69 70 74 20 62 65 69 6e  tire script bein
4740: 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20  g returned will
4750: 62 65 20 73 75 62 73 74 69 74 75 74 65 64 20 76  be substituted v
4760: 69 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ia..      #
4770: 20 20 5b 73 75 62 73 74 5d 2c 20 69 6e 20 74 68    [subst], in th
4780: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72  e context of our
4790: 20 63 61 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20   caller, before
47a0: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d  being returned..
47b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 54  .      #       T
47c0: 68 69 73 20 73 74 65 70 20 69 73 20 6e 65 63 65  his step is nece
47d0: 73 73 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f  ssary so that so
47e0: 6d 65 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65  me limited conte
47f0: 78 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d  xt information,.
4800: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70  .      #       p
4810: 72 69 6d 61 72 69 6c 79 20 72 65 6c 61 74 65 64  rimarily related
4820: 20 74 6f 20 74 68 65 20 74 65 73 74 69 6e 67 20   to the testing
4830: 64 69 72 65 63 74 6f 72 69 65 73 2c 20 63 61 6e  directories, can
4840: 20 62 65 20 74 72 61 6e 73 66 65 72 72 65 64 0d   be transferred.
4850: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
4860: 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65  o the interprete
4870: 72 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65  r in the isolate
4880: 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f  d application do
4890: 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d  main, making it.
48a0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
48b0: 62 6c 65 20 74 6f 20 73 75 63 63 65 73 73 66 75  ble to successfu
48c0: 6c 6c 79 20 72 75 6e 20 74 65 73 74 73 20 74 68  lly run tests th
48d0: 61 74 20 72 65 71 75 69 72 65 20 6f 6e 65 20 6f  at require one o
48e0: 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20  r more of the..
48f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
4900: 65 73 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  es in one of the
4910: 20 74 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f   testing directo
4920: 72 69 65 73 2e 20 20 43 61 6c 6c 65 72 73 20 73  ries.  Callers s
4930: 68 6f 75 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20  hould keep in..
4940: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 6e       #       min
4950: 64 20 74 68 61 74 20 74 68 65 20 74 65 73 74 20  d that the test
4960: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20  script fragment
4970: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 63  being returned c
4980: 61 6e 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20  annot rely on..
4990: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 79       #       any
49a0: 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20   script library
49b0: 70 72 6f 63 65 64 75 72 65 73 20 74 68 61 74 20  procedures that
49c0: 61 72 65 20 6e 6f 74 20 70 72 6f 76 69 64 65 64  are not provided
49d0: 20 62 79 20 74 68 65 20 45 61 67 6c 65 0d 0a 20   by the Eagle..
49e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62       #       lib
49f0: 72 61 72 79 20 70 61 63 6b 61 67 65 20 28 69 2e  rary package (i.
4a00: 65 2e 20 22 69 6e 69 74 2e 65 61 67 6c 65 22 29  e. "init.eagle")
4a10: 2c 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73  , including thos
4a20: 65 20 70 72 6f 76 69 64 65 64 20 62 79 0d 0a 20  e provided by..
4a30: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
4a40: 20 45 61 67 6c 65 20 74 65 73 74 20 70 61 63 6b   Eagle test pack
4a50: 61 67 65 2c 20 75 6e 6c 65 73 73 20 74 68 65 20  age, unless the
4a60: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  file containing
4a70: 74 68 65 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a  them is loaded..
4a80: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61        #       ma
4a90: 6e 75 61 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20  nually via some
4aa0: 6f 74 68 65 72 20 6d 65 63 68 61 6e 69 73 6d 20  other mechanism
4ab0: 28 65 2e 67 2e 20 62 79 20 69 6e 63 6c 75 64 69  (e.g. by includi
4ac0: 6e 67 20 61 70 70 72 6f 70 72 69 61 74 65 0d 0a  ng appropriate..
4ad0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 70        #       [p
4ae0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 5d 20  ackage require]
4af0: 6f 72 20 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d  or [source] comm
4b00: 61 6e 64 73 20 69 6e 20 74 68 65 20 70 72 65 66  ands in the pref
4b10: 69 78 20 6f 72 20 73 75 66 66 69 78 0d 0a 20 20  ix or suffix..
4b20: 20 20 20 20 23 20 20 20 20 20 20 20 73 63 72 69      #       scri
4b30: 70 74 20 66 72 61 67 6d 65 6e 74 73 29 2e 20 20  pt fragments).
4b40: 41 6c 73 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62  Also, all variab
4b50: 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 61 6e  le references an
4b60: 64 20 61 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20  d all nested..
4b70: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d      #       comm
4b80: 61 6e 64 73 20 28 69 2e 65 2e 20 74 68 6f 73 65  ands (i.e. those
4b90: 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b   in square brack
4ba0: 65 74 73 29 20 63 6f 6e 74 61 69 6e 65 64 20 69  ets) contained i
4bb0: 6e 20 74 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20  n the final..
4bc0: 20 20 20 23 20 20 20 20 20 20 20 73 63 72 69 70     #       scrip
4bd0: 74 20 66 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20  t fragment will
4be0: 65 6e 64 20 75 70 20 62 65 69 6e 67 20 65 76 61  end up being eva
4bf0: 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20 63 6f  luated in the co
4c00: 6e 74 65 78 74 20 6f 66 20 74 68 65 0d 0a 20 20  ntext of the..
4c10: 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c      #       call
4c20: 69 6e 67 20 69 6e 74 65 72 70 72 65 74 65 72 20  ing interpreter
4c30: 61 6e 64 20 6e 6f 74 20 74 68 65 20 74 61 72 67  and not the targ
4c40: 65 74 20 69 6e 74 65 72 70 72 65 74 65 72 20 63  et interpreter c
4c50: 72 65 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20  reated in the..
4c60: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 6f       #       iso
4c70: 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f  lated applicatio
4c80: 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20  n domain unless
4c90: 74 68 65 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73  the dollar signs
4ca0: 20 61 6e 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a   and/or square..
4cb0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 72        #       br
4cc0: 61 63 6b 65 74 73 20 61 72 65 20 73 70 65 63 69  ackets are speci
4cd0: 61 6c 6c 79 20 71 75 6f 74 65 64 20 77 69 74 68  ally quoted with
4ce0: 20 62 61 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20   backslashes...
4cf0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
4d00: 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20  turn [uplevel 1
4d10: 5b 6c 69 73 74 20 73 75 62 73 74 20 5b 61 70 70  [list subst [app
4d20: 65 6e 64 41 72 67 73 20 24 70 72 65 66 69 78 20  endArgs $prefix 4d30: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 4d40: 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e hasRuntimeOption 4d50: 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b native]} then { 4d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 4d70: 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 ct invoke Interp 4d80: 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 reter.GetActive 4d90: 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e AddRuntimeOption 4da0: 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 native.. 4db0: 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67 65 74 }.. } [get 4dc0: 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 TestOverridesPre 4dd0: 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61 74 68 amble [list path 4de0: 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d 5d 20 test_channel]] 4df0: 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 20 20$suffix]]]..
4e00: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
4e10: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
4e20: 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a  { fileName } {..
4e30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
4e40: 20 4e 4f 54 45 3a 20 49 66 20 77 65 20 63 61 6e   NOTE: If we can
4e50: 6e 6f 74 20 63 6f 70 79 20 74 68 65 20 61 73 73  not copy the ass
4e60: 65 6d 62 6c 79 20 74 68 65 6e 20 69 74 20 69 73  embly then it is
4e70: 20 70 72 6f 62 61 62 6c 79 20 61 6c 72 65 61 64   probably alread
4e80: 79 20 6c 6f 61 64 65 64 2e 0d 0a 20 20 20 20 20  y loaded...
4e90: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f   #..      set so
4ea0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65  urceFileName [ge
4eb0: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24  tBuildFileName $4ec0: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... 4ed0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex 4ee0: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 ists$sourceFile
4ef0: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
4f00: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 4f10: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 4f20: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 4f30: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk 4f40: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 75 ipped copying bu 4f50: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 73 6f ild file \""$so
4f60: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
4f80: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
4f90: 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  st\n"]....
4fa0: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20    return..
4fb0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74  }....      set t
4fc0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67  argetFileName [g
4fd0: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
4fe0: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 4ff0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 5000: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 5010: 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 file copy -forc 5020: 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d e$sourceFileNam
5030: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  e $targetFileNam 5040: 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b e}] == 0} then { 5050: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 5060: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
5070: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
5080: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
5090: 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69   copied build fi
50a0: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou 50b0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 rceFileName "\" 50c0: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 to \"" \.. 50d0: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c$targetFil
50e0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
50f0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
5100: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 5110: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 5120: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 5130: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c "---- fail 5140: 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c 64 ed to copy build 5150: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 file from \""$
5160: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c  sourceFileName \
5170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c  ..            "\
5180: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74  " to \"" $target 5190: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a FileName \"\n].. 51a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 51b0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 ... proc tryD 51c0: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 51d0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a { fileName } {.. 51e0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 51f0: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c me [getBinaryFil 5200: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d eName$fileName]
5210: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
5220: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 5230: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 5240: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
5250: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
5260: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
5270: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
5280: 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20  kipped deleting
5290: 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20  binary file \""
52a0: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  $fileName \.. 52b0: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 "\", it 52c0: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c does not exist\ 52d0: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 n"].... r 52e0: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a eturn.. }.. 52f0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 5300: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 ch {file delete 5310: 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30$fileName}] == 0
5320: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
5330: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 5340: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 5350: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 5360: 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 "---- deleted 5370: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 binary file \"" 5380: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d$fileName \"\n]
5390: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
53a0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
53b0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 53c0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 53d0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 53e0: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 53f0: 65 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 e binary file \" 5400: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e "$fileName \"\n
5410: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
5420: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
5430: 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b  ryCopyAssembly {
5440: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 64 62 20 74   fileName {pdb t
5450: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
5460: 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65  tryCopyBuildFile
5470: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20   $fileName.... 5480: 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 if {$pdb} th
5490: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72  en {..        tr
54a0: 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 5b  yCopyBuildFile [
54b0: 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65  appendArgs [file
54c0: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e   rootname $fileN 54d0: 61 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20 20 ame] .pdb].. 54e0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 54f0: 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 proc tryDelet 5500: 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 eAssembly { file 5510: 4e 61 6d 65 20 7b 70 64 62 20 74 72 75 65 7d 20 Name {pdb true} 5520: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 } {.. tryDe 5530: 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 leteBinaryFile$
5540: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20  fileName....
5550: 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e    if {$pdb} then 5560: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44 {.. tryD 5570: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 5580: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c [appendArgs [fil 5590: 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 e rootname$file
55a0: 4e 61 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20  Name] .pdb]..
55b0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
55c0: 20 20 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64      proc tryLoad
55d0: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e  Assembly { fileN
55e0: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  ame } {..      s
55f0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74  et fileName [get
5600: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $5610: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... 5620: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 if {[catch {s 5630: 65 74 20 61 73 73 65 6d 62 6c 79 20 5c 0d 0a 20 et assembly \.. 5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 [ob 5650: 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 ject load -loadt 5660: 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 ype File -alias 5670: 24 66 69 6c 65 4e 61 6d 65 5d 7d 5d 20 3d 3d 20$fileName]}] ==
5680: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
5690: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
56a0: 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 64 20 74  NOTE: Now, add t
56b0: 68 65 20 6e 65 63 65 73 73 61 72 79 20 74 65 73  he necessary tes
56c0: 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20  t constraint...
56d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
56e0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
56f0: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b  [file rootname [
5700: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN 5710: 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ame]].... 5720: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 5730: 54 45 3a 20 47 72 61 62 20 74 68 65 20 69 6d 61 TE: Grab the ima 5740: 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 ge runtime versi 5750: 6f 6e 20 66 72 6f 6d 20 74 68 65 20 61 73 73 65 on from the asse 5760: 6d 62 6c 79 20 62 65 63 61 75 73 65 0d 0a 20 20 mbly because.. 5770: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se 5780: 76 65 72 61 6c 20 74 65 73 74 73 20 72 65 6c 79 veral tests rely 5790: 20 6f 6e 20 69 74 20 68 61 76 69 6e 67 20 61 20 on it having a 57a0: 63 65 72 74 61 69 6e 20 76 61 6c 75 65 2e 0d 0a certain value... 57b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 57c0: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 57d0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 [appendArgs [fi 57e0: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
57f0: 65 5d 20 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  e] _ \..
5800: 20 20 20 20 5b 24 61 73 73 65 6d 62 6c 79 20 49      [$assembly I 5810: 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 mageRuntimeVersi 5820: 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 on]].... 5830: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 5840: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 66 75 E: Return the fu 5850: 6c 6c 20 70 61 74 68 20 6f 66 20 74 68 65 20 6c ll path of the l 5860: 6f 61 64 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 oaded file... 5870: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5880: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 return$fileName
5890: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
58a0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
58b0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
58c0: 20 69 73 53 51 4c 69 74 65 52 65 61 64 79 20 7b   isSQLiteReady {
58d0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
58e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
58f0: 20 70 72 6f 63 65 64 75 72 65 20 6d 75 73 74 20   procedure must
5900: 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  return non-zero
5910: 6f 6e 6c 79 20 69 66 20 74 68 65 20 53 51 4c 69  only if the SQLi
5920: 74 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  te native..
5930: 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79   #       library
5940: 20 61 6e 64 20 74 68 65 20 53 79 73 74 65 6d 2e   and the System.
5950: 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61  Data.SQLite mana
5960: 67 65 64 20 61 73 73 65 6d 62 6c 79 20 61 72 65  ged assembly are
5970: 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23   loaded..      #
5980: 20 20 20 20 20 20 20 61 6e 64 20 72 65 61 64 79         and ready
5990: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the
59a0: 74 65 73 74 20 73 75 69 74 65 2e 20 20 43 75 72  test suite.  Cur
59b0: 72 65 6e 74 6c 79 2c 20 74 68 69 73 20 70 72 6f  rently, this pro
59c0: 63 65 64 75 72 65 0d 0a 20 20 20 20 20 20 23 20  cedure..      #
59d0: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be
59e0: 63 61 6c 6c 65 64 20 6f 6e 6c 79 20 61 66 74 65  called only afte
59f0: 72 20 74 68 65 20 5b 74 72 79 4c 6f 61 64 41 73  r the [tryLoadAs
5a00: 73 65 6d 62 6c 79 5d 20 70 72 6f 63 65 64 75 72  sembly] procedur
5a10: 65 20 68 61 73 0d 0a 20 20 20 20 20 20 23 20 20  e has..      #
5a20: 20 20 20 20 20 62 65 65 6e 20 63 61 6c 6c 65 64       been called
5a30: 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 20 74 68   to probe for th
5a40: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
5a50: 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73  Lite managed ass
5a60: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20  embly..      #
5a70: 20 20 20 20 20 61 6e 64 20 74 68 65 20 5b 63 68       and the [ch
5a80: 65 63 6b 46 6f 72 53 51 4c 69 74 65 5d 20 70 72  eckForSQLite] pr
5a90: 6f 63 65 64 75 72 65 20 68 61 73 20 62 65 65 6e  ocedure has been
5aa0: 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65   called to probe
5ab0: 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20   for..      #
5ac0: 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 6e      the SQLite n
5ad0: 61 74 69 76 65 20 6c 69 62 72 61 72 79 3b 20 6f  ative library; o
5ae0: 74 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 70  therwise, this p
5af0: 72 6f 63 65 64 75 72 65 20 77 69 6c 6c 20 73 69  rocedure will si
5b00: 6d 70 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  mply..      #
5b10: 20 20 20 20 61 6c 77 61 79 73 20 72 65 74 75 72      always retur
5b20: 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 23  n zero...      #
5b30: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
5b40: 65 78 70 72 20 7b 5b 68 61 76 65 43 6f 6e 73 74  expr {[haveConst
5b50: 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74  raint System.Dat
5b60: 61 2e 53 51 4c 69 74 65 5d 20 26 26 20 5c 0d 0a  a.SQLite] && \..
5b70: 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 43            [haveC
5b80: 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65  onstraint SQLite
5b90: 5d 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ]}]..    }.....
5ba0: 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72     proc checkFor
5bb0: 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c  SQLite { channel
5bc0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74   } {..      tput
5bd0: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- 5be0: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 63 6f checking for co 5bf0: 72 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 re SQLite librar 5c00: 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 y... ".... 5c10: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 5c20: 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 5c30: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 5c40: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 +NonPublic Syst 5c50: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S 5c60: 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 20 20 QLite3 \.. 5c70: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 56 65 SQLiteVe 5c80: 72 73 69 6f 6e 7d 20 76 65 72 73 69 6f 6e 5d 20 rsion} version] 5c90: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 5ca0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5cb0: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 5cc0: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo 5cd0: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden 5ce0: 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 tifier for the S 5cf0: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 QLite.. # 5d00: 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 core libr 5d10: 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ary... #. 5d20: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 5d30: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 5d40: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 5d50: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 5d60: 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 Public System.Da 5d70: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 5d80: 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 3 \.. 5d90: 20 20 20 20 20 53 51 4c 69 74 65 53 6f 75 72 63 SQLiteSourc 5da0: 65 49 64 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 eId} sourceId]} 5db0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 5dc0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 5dd0: 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 NOTE: We failed 5de0: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo 5df0: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden 5e00: 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 tifier... 5e10: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 5e20: 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b set sourceId unk 5e30: 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d nown.. }. 5e40: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 5e50: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 # NOTE: Ye 5e60: 73 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f s, the SQLite co 5e70: 72 65 20 6c 69 62 72 61 72 79 20 61 70 70 65 61 re library appea 5e80: 72 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 rs to be availab 5e90: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 5ea0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 5eb0: 72 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a raint SQLite.... 5ec0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
5ed0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
5ee0: 67 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73  gs "yes (" $vers 5ef0: 69 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 ion " "$sourceI
5f00: 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  d ")\n"]..
5f10: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
5f20: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 5f30: 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a no\n.. }.. 5f40: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 5f50: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 oc checkForSQLit 5f60: 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 eDefineConstant 5f70: 7b 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d { channel name } 5f80: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 {.. tputs 5f90: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
5fa0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
5fb0: 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67    "---- checking
5fc0: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61   for System.Data
5fd0: 2e 53 51 4c 69 74 65 20 64 65 66 69 6e 65 20 63  .SQLite define c
5fe0: 6f 6e 73 74 61 6e 74 20 5c 22 22 20 24 6e 61 6d  onstant \"" $nam 5ff0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 e \.. " 6000: 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 \"... "].... 6010: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob 6030: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 6040: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 gs +NonPublic Sy 6050: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 6060: 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 .SQLite3 \.. 6070: 20 20 20 20 20 20 20 20 20 20 44 65 66 69 6e 65 Define 6080: 43 6f 6e 73 74 61 6e 74 73 7d 20 64 65 66 69 6e Constants} defin 6090: 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 eConstants] == 0 60a0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 60b0: 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d if {[lsearch - 60c0: 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 24 64 exact -nocase$d
60d0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 20 24  efineConstants $60e0: 6e 61 6d 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65 name] != -1} the 60f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 6100: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 6110: 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20 64 65 TE: Yes, this de 6120: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 77 61 fine constant wa 6130: 73 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 20 74 s enabled when t 6140: 68 65 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 he managed.. 6150: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 # as 6160: 73 65 6d 62 6c 79 20 77 61 73 20 63 6f 6d 70 69 sembly was compi 6170: 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 led... 6180: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 #.. add 6190: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 61a0: 6e 64 41 72 67 73 20 64 65 66 69 6e 65 43 6f 6e ndArgs defineCon 61b0: 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 stant.System.Dat 61c0: 61 2e 53 51 4c 69 74 65 2e 20 24 6e 61 6d 65 5d a.SQLite.$name]
61d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70  ....          tp
61e0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73  uts $channel yes 61f0: 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c \n.. } el 6200: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 6210: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e tputs$channel n
6220: 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  o\n..        }..
6230: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
6240: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 6250: 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e 0d 0a hannel error\n.. 6260: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 6270: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 ... proc getD 6280: 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 7b 7d ateTimeFormat {} 6290: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 62a0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 62b0: 70 72 6f 63 65 64 75 72 65 20 73 69 6d 70 6c 79 procedure simply 62c0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 22 64 65 returns the "de 62d0: 66 61 75 6c 74 22 20 44 61 74 65 54 69 6d 65 20 fault" DateTime 62e0: 66 6f 72 6d 61 74 20 75 73 65 64 0d 0a 20 20 20 format used.. 62f0: 20 20 20 23 20 20 20 20 20 20 20 62 79 20 74 68 # by th 6300: 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 e test suite... 6310: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 6320: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 6330: 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 :datetime_format 6340: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 6350: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 6360: 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72$::datetime_for
6370: 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  mat] > 0} then {
6380: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
6390: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
63a0: 75 72 6e 20 74 68 65 20 6d 61 6e 75 61 6c 6c 79  urn the manually
63b0: 20 6f 76 65 72 72 69 64 64 65 6e 20 76 61 6c 75   overridden valu
63c0: 65 20 66 6f 72 20 74 68 65 20 44 61 74 65 54 69  e for the DateTi
63d0: 6d 65 20 66 6f 72 6d 61 74 2e 0d 0a 20 20 20 20  me format...
63e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
63f0: 65 74 75 72 6e 20 24 3a 3a 64 61 74 65 74 69 6d  eturn $::datetim 6400: 65 5f 66 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 e_format.. 6410: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 6420: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 6430: 4f 54 45 3a 20 52 65 74 75 72 6e 20 61 6e 20 49 OTE: Return an I 6440: 53 4f 38 36 30 31 20 44 61 74 65 54 69 6d 65 20 SO8601 DateTime 6450: 66 6f 72 6d 61 74 20 63 6f 6d 70 61 74 69 62 6c format compatibl 6460: 65 20 77 69 74 68 20 53 51 4c 69 74 65 2c 0d 0a e with SQLite,.. 6470: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 6480: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 6490: 74 65 2c 20 61 6e 64 20 73 75 69 74 61 62 6c 65 te, and suitable 64a0: 20 66 6f 72 20 72 6f 75 6e 64 2d 74 72 69 70 70 for round-tripp 64b0: 69 6e 67 20 77 69 74 68 20 74 68 65 0d 0a 20 20 ing with the.. 64c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 44 61 # Da 64d0: 74 65 54 69 6d 65 20 63 6c 61 73 73 20 6f 66 20 teTime class of 64e0: 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 2e 20 20 the framework. 64f0: 49 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 If this value is 6500: 20 63 68 61 6e 67 65 64 2c 0d 0a 20 20 20 20 20 changed,.. 6510: 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 6f # vario 6520: 75 73 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 us tests may fai 6530: 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 l... #.. 6540: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 79 return "y 6550: 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a yyy-MM-dd HH:mm: 6560: 73 73 2e 46 46 46 46 46 46 46 4b 22 0d 0a 20 20 ss.FFFFFFFK".. 6570: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 6580: 0a 20 20 20 20 70 72 6f 63 20 65 6e 75 6d 65 72 . proc enumer 6590: 61 62 6c 65 54 6f 4c 69 73 74 20 7b 20 65 6e 75 ableToList { enu 65a0: 6d 65 72 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 merable } {.. 65b0: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c set result [l 65c0: 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ist].... if 65d0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 65e0: 20 24 65 6e 75 6d 65 72 61 62 6c 65 5d 20 3d 3d$enumerable] ==
65f0: 20 30 20 7c 7c 20 24 65 6e 75 6d 65 72 61 62 6c   0 || $enumerabl 6600: 65 20 65 71 20 22 6e 75 6c 6c 22 7d 20 74 68 65 e eq "null"} the 6610: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret 6620: 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 urn$result..
6630: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62     }....      ob
6640: 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c  ject foreach -al
6650: 69 61 73 20 69 74 65 6d 20 24 65 6e 75 6d 65 72  ias item $enumer 6660: 61 62 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 able {.. 6670: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 6680: 74 68 20 24 69 74 65 6d 5d 20 3e 20 30 7d 20 74 th$item] > 0} t
6690: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
66a0: 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20   lappend result
66b0: 5b 24 69 74 65 6d 20 54 6f 53 74 72 69 6e 67 5d  [$item ToString] 66c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 66d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 66e0: 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 turn$result..
66f0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
6700: 20 63 61 74 63 68 41 6e 64 52 65 74 75 72 6e 20   catchAndReturn
6710: 7b 20 73 63 72 69 70 74 20 7b 73 74 61 63 6b 54  { script {stackT
6720: 72 61 63 65 20 66 61 6c 73 65 7d 20 7b 73 74 72  race false} {str
6730: 69 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  ict true} } {..
6740: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
6750: 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74  NOTE: Evaluate t
6760: 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64  he script provid
6770: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
6780: 20 69 6e 20 74 68 65 69 72 20 63 6f 6e 74 65 78   in their contex
6790: 74 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  t,..      #
67a0: 20 20 63 61 70 74 75 72 69 6e 67 20 62 6f 74 68    capturing both
67b0: 20 74 68 65 20 72 65 73 75 6c 74 20 61 6e 64 20   the result and
67c0: 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  the return code.
67d0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
67e0: 20 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68   set code [catch
67f0: 20 7b 75 70 6c 65 76 65 6c 20 31 20 24 73 63 72   {uplevel 1 $scr 6800: 69 70 74 7d 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a ipt} result].... 6810: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 6820: 20 4e 4f 54 45 3a 20 44 69 64 20 74 68 65 20 73 NOTE: Did the s 6830: 63 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 cript provided b 6840: 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 4e 4f 54 y our caller NOT 6850: 20 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72 3f raise an error? 6860: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6870: 20 69 66 20 7b 24 73 74 72 69 63 74 20 26 26 20 if {$strict &&
6880: 24 63 6f 64 65 20 3d 3d 20 30 20 7c 7c 20 21 24  $code == 0 || !$
6890: 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 65 20  strict && $code 68a0: 21 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 != 1} then {.. 68b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 68c0: 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 # NOTE: Success 68d0: 2e 20 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 . Return a list 68e0: 20 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e with the return 68f0: 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 code and the re 6900: 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 sult... # 6910: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 6920: 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 [list$code $re 6930: 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 sult].. } e 6940: 6c 73 65 69 66 20 7b 24 73 74 61 63 6b 54 72 61 lseif {$stackTra
6950: 63 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ce} then {..
6960: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
6970: 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20   NOTE: Failure.
6980: 20 4f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74   Our caller want
6990: 73 20 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74  s a full stack t
69a0: 72 61 63 65 20 28 69 66 20 61 70 70 6c 69 63 61  race (if applica
69b0: 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23  ble),..        #
69c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 20         return a
69d0: 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65  list with the re
69e0: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68  turn code and th
69f0: 65 20 72 65 73 75 6c 74 20 76 65 72 62 61 74 69  e result verbati
6a00: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  m...        #..
6a10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
6a20: 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c  ist $code$resul
6a30: 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  t]..      } else
6a40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
6a50: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46         # NOTE: F
6a60: 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c  ailure.  Our cal
6a70: 6c 65 72 20 64 6f 65 73 20 6e 6f 74 20 77 61 6e  ler does not wan
6a80: 74 20 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74  t a full stack t
6a90: 72 61 63 65 20 28 69 66 0d 0a 20 20 20 20 20 20  race (if..
6aa0: 20 20 23 20 20 20 20 20 20 20 61 70 70 6c 69 63    #       applic
6ab0: 61 62 6c 65 29 2c 20 72 65 74 75 72 6e 20 61 20  able), return a
6ac0: 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65  list with the re
6ad0: 74 75 72 6e 20 63 6f 64 65 2c 20 74 68 65 20 65  turn code, the e
6ae0: 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20  rror..        #
6af0: 20 20 20 20 20 20 63 6f 64 65 20 66 6f 72 20 74        code for t
6b00: 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20  he interpreter,
6b10: 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65  and the error me
6b20: 73 73 61 67 65 20 75 70 20 74 6f 20 74 68 65 0d  ssage up to the.
6b30: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6b40: 20 70 6f 69 6e 74 20 77 68 65 72 65 20 74 68 65   point where the
6b50: 20 73 74 61 63 6b 20 74 72 61 63 65 20 73 68 6f   stack trace sho
6b60: 75 6c 64 20 73 74 61 72 74 2e 0d 0a 20 20 20 20  uld start...
6b70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
6b80: 65 74 20 69 6e 64 65 78 20 5b 73 74 72 69 6e 67  et index [string
6b90: 20 66 69 72 73 74 20 22 20 20 20 61 74 20 22 20   first "   at "
6ba0: 24 72 65 73 75 6c 74 5d 3b 20 23 20 48 41 43 4b  $result]; # HACK 6bb0: 3a 20 52 65 6c 69 61 62 6c 65 3f 0d 0a 0d 0a 20 : Reliable?.... 6bc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l 6bd0: 69 73 74 20 24 63 6f 64 65 20 24 3a 3a 65 72 72 ist$code $::err 6be0: 6f 72 43 6f 64 65 20 5b 65 78 70 72 20 7b 24 69 orCode [expr {$i
6bf0: 6e 64 65 78 20 21 3d 20 2d 31 20 3f 20 5c 0d 0a  ndex != -1 ? \..
6c00: 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
6c10: 69 6e 67 20 74 72 69 6d 20 5b 73 74 72 69 6e 67  ing trim [string
6c20: 20 72 61 6e 67 65 20 24 72 65 73 75 6c 74 20 30   range $result 0 6c30: 20 24 69 6e 64 65 78 5d 5d 20 3a 20 24 72 65 73$index]] : $res 6c40: 75 6c 74 7d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d ult}]].. }. 6c50: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 6c60: 72 6f 63 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 roc compileCShar 6c70: 70 57 69 74 68 20 7b 0d 0a 20 20 20 20 20 20 20 pWith {.. 6c80: 20 20 20 20 20 74 65 78 74 20 6d 65 6d 6f 72 79 text memory 6c90: 20 73 79 6d 62 6f 6c 73 20 73 74 72 69 63 74 20 symbols strict 6ca0: 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 65 resultsVarName e 6cb0: 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 66 69 6c rrorsVarName fil 6cc0: 65 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 eNames.. 6cd0: 20 20 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20 20 args } {.. 6ce0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 6cf0: 4f 54 45 3a 20 53 69 6e 63 65 20 77 65 20 61 72 OTE: Since we ar 6d00: 65 20 67 6f 69 6e 67 20 74 6f 20 75 73 65 20 74 e going to use t 6d10: 68 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20 his method name 6d20: 61 20 6c 6f 74 2c 20 61 73 73 69 67 6e 20 69 74 a lot, assign it 6d30: 20 74 6f 20 61 0d 0a 20 20 20 20 20 20 23 20 20 to a.. # 6d40: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 66 69 variable fi 6d50: 72 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 rst... #.. 6d60: 20 20 20 20 20 73 65 74 20 61 64 64 20 52 65 66 set add Ref 6d70: 65 72 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 erencedAssemblie 6d80: 73 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 20 20 23 s.Add.... # 6d90: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 6da0: 43 72 65 61 74 65 20 74 68 65 20 62 61 73 65 20 Create the base 6db0: 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 command to evalu 6dc0: 61 74 65 20 61 6e 64 20 61 64 64 20 74 68 65 20 ate and add the 6dd0: 70 72 6f 70 65 72 74 79 20 73 65 74 74 69 6e 67 property setting 6de0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 6df0: 20 74 68 61 74 20 61 72 65 20 61 6c 6d 6f 73 74 that are almost 6e00: 20 61 6c 77 61 79 73 20 6e 65 65 64 65 64 20 62 always needed b 6e10: 79 20 6f 75 72 20 75 6e 69 74 20 74 65 73 74 73 y our unit tests 6e20: 20 28 69 2e 65 2e 20 74 68 65 20 53 79 73 74 65 (i.e. the Syste 6e30: 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 m.. # 6e40: 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 and System.Data 6e50: 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72 65 assembly refere 6e60: 6e 63 65 73 29 2e 0d 0a 20 20 20 20 20 20 23 0d nces)... #. 6e70: 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 . set comma 6e80: 6e 64 20 5b 6c 69 73 74 20 63 6f 6d 70 69 6c 65 nd [list compile 6e90: 43 53 68 61 72 70 20 24 74 65 78 74 20 24 6d 65 CSharp$text $me 6ea0: 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73 mory$symbols $s 6eb0: 74 72 69 63 74 20 72 65 73 75 6c 74 73 20 5c 0d trict results \. 6ec0: 0a 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 . error 6ed0: 73 20 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c s$add System.dl
6ee0: 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61  l $add System.Da 6ef0: 74 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 ta.dll$add Syst
6f00: 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20  em.Xml.dll]....
6f10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
6f20: 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 68  NOTE: Add all th
6f30: 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c 65 20  e provided file
6f40: 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d 62 6c  names as assembl
6f50: 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20  y references...
6f60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f       #..      fo
6f70: 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $6f80: 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 fileNames {.. 6f90: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d lappend com 6fa0: 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74 42 69 mand$add [getBi
6fb0: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69  naryFileName $fi 6fc0: 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d leName].. } 6fd0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 6fe0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 # NOTE: Add t 6ff0: 68 65 20 65 78 74 72 61 20 61 72 67 75 6d 65 6e he extra argumen 7000: 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 ts, if any, to t 7010: 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 he command to ev 7020: 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 aluate... # 7030: 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 .. eval lap 7040: 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72 pend command$ar
7050: 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  gs....      #..
7060: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69       # NOTE: Ali
7070: 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20  as the compiler
7080: 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 61 6e  local results an
7090: 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 62 6c  d errors variabl
70a0: 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  es to the..
70b0: 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c   #       variabl
70c0: 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 65 64  e names provided
70d0: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   by our caller..
70e0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
70f0: 75 70 76 61 72 20 31 20 24 72 65 73 75 6c 74 73  upvar 1 $results 7100: 56 61 72 4e 61 6d 65 20 72 65 73 75 6c 74 73 0d VarName results. 7110: 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
7120: 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 65 72  errorsVarName er
7130: 72 6f 72 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  rors....      #.
7140: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45  .      # NOTE: E
7150: 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e 73  valuate the cons
7160: 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65  tructed [compile
7170: 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20  CSharp] command
7180: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d 0a  and return the..
7190: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
71a0: 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  sult...      #..
71b0: 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d        eval $comm 71c0: 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 and.. }..... 71d0: 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79 proc isMemory 71e0: 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 Db { fileName } 71f0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 7200: 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 # NOTE: Is the 7210: 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 specified datab 7220: 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 65 ase file name re 7230: 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 ally an in-memor 7240: 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 20 y database?.. 7250: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 7260: 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e rn [expr {$fileN
7270: 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a  ame eq ":memory:
7280: 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  " || \..
7290: 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20    [string range
72a0: 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20  $fileName 0 12] 72b0: 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 eq "file::memory 72c0: 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a :"}].. }..... 72d0: 20 20 20 20 70 72 6f 63 20 65 78 65 63 75 74 65 proc execute 72e0: 53 71 6c 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 Sql { sql {execu 72f0: 74 65 20 6e 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 te none} {fileNa 7300: 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 me ""} } {.. 7310: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 7320: 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 ngth$fileName]
7330: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 73 65 74 20  == 0} then {set
7340: 66 69 6c 65 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79  fileName :memory
7350: 3a 7d 0d 0a 20 20 20 20 20 20 73 65 74 75 70 44  :}..      setupD
7360: 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22 20 22  b $fileName "" " 7370: 22 20 22 22 20 22 22 20 22 22 20 66 61 6c 73 65 " "" "" "" false 7380: 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c false false fal 7390: 73 65 20 6d 65 6d 44 62 0d 0a 0d 0a 20 20 20 20 se memDb.... 73a0: 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 try {.. 73b0: 20 72 65 74 75 72 6e 20 5b 73 71 6c 20 65 78 65 return [sql exe 73c0: 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 24 65 cute -execute$e
73d0: 78 65 63 75 74 65 20 24 6d 65 6d 44 62 20 24 73  xecute $memDb$s
73e0: 71 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 66 69 6e  ql]..      } fin
73f0: 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20  ally {..
7400: 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN 7410: 61 6d 65 20 6d 65 6d 44 62 20 66 61 6c 73 65 20 ame memDb false 7420: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a false.. }.. 7430: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7440: 6f 63 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 oc setupDb {.. 7450: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 fileNa 7460: 6d 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 me {mode ""} {da 7470: 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d teTimeFormat ""} 7480: 20 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 {dateTimeKind " 7490: 22 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 "} {flags ""}.. 74a0: 20 20 20 20 20 20 20 20 20 20 20 7b 65 78 74 72 {extr 74b0: 61 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 a ""} {qualify t 74c0: 72 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 rue} {delete tru 74d0: 65 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a e} {uri false}.. 74e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d {tem 74f0: 70 6f 72 61 72 79 20 74 72 75 65 7d 20 7b 76 61 porary true} {va 7500: 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 rName db} } {.. 7510: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 7520: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 NOTE: First, see 7530: 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 if our caller h 7540: 61 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 as requested an 7550: 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 in-memory databa 7560: 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 se... #.. 7570: 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 set isMemory 7580: 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 [isMemoryDb$fi
7590: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20  leName]....
75a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
75b0: 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74  : For now, all t
75c0: 65 73 74 20 64 61 74 61 62 61 73 65 73 20 75 73  est databases us
75d0: 65 64 20 62 79 20 74 68 65 20 74 65 73 74 20 73  ed by the test s
75e0: 75 69 74 65 20 61 72 65 20 70 6c 61 63 65 64 20  uite are placed
75f0: 69 6e 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  into..      #
7600: 20 20 20 20 74 68 65 20 74 65 6d 70 6f 72 61 72      the temporar
7610: 79 20 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61  y directory.  Ea
7620: 63 68 20 64 61 74 61 62 61 73 65 20 75 73 65 64  ch database used
7630: 20 62 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c   by a test shoul
7640: 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20  d be..      #
7650: 20 20 20 20 63 6c 65 61 6e 65 64 20 75 70 20 62      cleaned up b
7660: 79 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e  y that test usin
7670: 67 20 74 68 65 20 22 63 6c 65 61 6e 75 70 44 62  g the "cleanupDb
7680: 22 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c  " procedure, bel
7690: 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ow...      #..
76a0: 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f      if {!$isMemo 76b0: 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 ry &&$qualify}
76c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
76d0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
76e0: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
76f0: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b  baseDirectory] [
7700: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN 7710: 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ame]].. }.. 7720: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 7730: 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 # NOTE: By defa 7740: 75 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 ult, delete any 7750: 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 pre-existing dat 7760: 61 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 abase with the s 7770: 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 ame file.. 7780: 23 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 # name if 7790: 69 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 it currently exi 77a0: 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 sts... #.. 77b0: 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d if {!$isMem
77c0: 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26  ory && $delete & 77d0: 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 & [file exists$
77e0: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
77f0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
7800: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
7810: 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20  tempt to delete
7820: 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67  any pre-existing
7830: 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74   database with t
7840: 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20  he same file..
7850: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
7860: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  me...        #..
7870: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
7880: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20  ch {file delete
7890: 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72  $fileName} error 78a0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 78b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 78c0: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d # NOTE: We som 78d0: 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 ehow failed to d 78e0: 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 elete the file, 78f0: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 report why... 7900: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 7910: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
7920: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
7930: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
7940: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
7950: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
7960: 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20  delete database
7970: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa 7980: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 7990: 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 73 "\" during s 79a0: 65 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c etup, error: " \ 79b0: 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
79c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
79d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
79e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66       # NOTE: Ref
79f0: 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  er to the specif
7a00: 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e  ied variable (e.
7a10: 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20  g. "db") in the
7a20: 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a  context of our..
7a30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
7a40: 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c  ller.  The handl
7a50: 65 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20  e to the opened
7a60: 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65  database will be
7a70: 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a   stored there...
7a80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
7a90: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 7aa0: 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 db.... #.. 7ab0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 # NOTE: Sta 7ac0: 72 74 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 rt building the 7ad0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 7ae0: 67 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 g. The only req 7af0: 75 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 uired portion.. 7b00: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 # of 7b10: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 the connection s 7b20: 74 72 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 tring is the dat 7b30: 61 20 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 a source, which 7b40: 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 contains the.. 7b50: 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61 # data 7b60: 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 base file name i 7b70: 74 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 tself. If our c 7b80: 61 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 aller wants to u 7b90: 73 65 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 se a URI as.. 7ba0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 # the d 7bb0: 61 74 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 ata source, use 7bc0: 74 68 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e the FullUri conn 7bd0: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 ection string pr 7be0: 6f 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 operty to.. 7bf0: 20 23 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 # prevent 7c00: 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 the data source 7c10: 20 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 string from bei 7c20: 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 ng mangled... 7c30: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 7c40: 24 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20$uri} then {..
7c50: 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63        set connec
7c60: 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b  tion {FullUri=${ 7c70: 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 fileName}}.. 7c80: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 7c90: 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 set connecti 7ca0: 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d on {Data Source= 7cb0: 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20${fileName}}..
7cc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
7cd0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
7ce0: 53 69 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65  Since this proce
7cf0: 64 75 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63  dure has no spec
7d00: 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66  ial knowledge of
7d10: 20 77 68 61 74 20 74 68 65 20 64 65 66 61 75 6c   what the defaul
7d20: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
7d30: 20 73 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20   setting is for
7d40: 74 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63  the ToFullPath c
7d50: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
7d60: 20 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73   propery, always
7d70: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7d80: 61 64 64 20 74 68 65 20 76 61 6c 75 65 20 77 65  add the value we
7d90: 20 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74   know about to t
7da0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
7db0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ring...      #..
7dc0: 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e        append con
7dd0: 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c  nection {;ToFull
7de0: 50 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d  Path=${qualify}} 7df0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 7e00: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 # NOTE: If ou 7e10: 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 r caller specifi 7e20: 65 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 ed a journal mod 7e30: 65 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 e, add the neces 7e40: 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 sary portion.. 7e50: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t 7e60: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st 7e70: 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ring now... 7e80: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 7e90: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f tring length$mo
7ea0: 64 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  de] > 0} then {.
7eb0: 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20  .        append
7ec0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75  connection {;Jou
7ed0: 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65  rnal Mode=${mode 7ee0: 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }}.. }.... 7ef0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 7f00: 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c NOTE: If our cal 7f10: 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20 ler specified a 7f20: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c DateTime format, 7f30: 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 add the necessa 7f40: 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ry.. # 7f50: 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 portion of the 7f60: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 7f70: 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # 7f80: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 7f90: 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 ing length$date
7fa0: 54 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d  TimeFormat] > 0}
7fb0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
7fc0: 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69   append connecti
7fd0: 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72  on {;DateTimeFor
7fe0: 6d 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f  mat=${dateTimeFo 7ff0: 72 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d rmat}}.. }. 8000: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 8010: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 # NOTE: If our 8020: 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 caller specifie 8030: 64 20 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 d a DateTimeKind 8040: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 , add the necess 8050: 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 ary portion.. 8060: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th 8070: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str 8080: 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ing now... 8090: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st 80a0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 ring length$dat
80b0: 65 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20  eTimeKind] > 0}
80c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
80d0: 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f  append connectio
80e0: 6e 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64  n {;DateTimeKind
80f0: 3d 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d  =${dateTimeKind} 8100: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 8110: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 8120: 4f 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 72 OTE: If there ar 8130: 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 65 e any global (pe 8140: 72 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e 6e r test run) conn 8150: 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 72 ection flags cur 8160: 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 rently.. # 8170: 20 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 74 set, use t 8180: 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 79 hem now (i.e. by 8190: 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d 20 combining them 81a0: 77 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 6f with the ones fo 81b0: 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 r this.. # 81c0: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e connection 81d0: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 )... #.. 81e0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 81f0: 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e sts ::connection 8200: 5f 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a 20 20 _flags] && \.. 8210: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 8220: 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e 65 63 length$::connec
8230: 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20 30 7d  tion_flags] > 0}
8240: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
8250: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
8260: 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f  TE: Show (and lo
8270: 67 29 20 74 68 61 74 20 77 65 20 64 65 74 65 63  g) that we detec
8280: 74 65 64 20 73 6f 6d 65 20 67 6c 6f 62 61 6c 20  ted some global
8290: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
82a0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
82b0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 82c0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 82d0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 82e0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f "---- glo 82f0: 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 bal connection f 8300: 6c 61 67 73 20 64 65 74 65 63 74 65 64 3a 20 22 lags detected: " 8310: 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66$::connection_f
8320: 6c 61 67 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  lags \n]....
8330: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
8340: 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61   NOTE: Combine a
8350: 6e 64 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68  nd/or replace th
8360: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  e connection fla
8370: 67 73 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77  gs and then show
8380: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
8390: 20 20 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e        new value.
83a0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
83b0: 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b       set flags [
83c0: 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c  combineFlags $fl 83d0: 61 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f ags$::connectio
83e0: 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20  n_flags]....
83f0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 8400: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 8410: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 8420: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 "---- combi 8430: 6e 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 ned connection f 8440: 6c 61 67 73 20 61 72 65 3a 20 22 20 24 66 6c 61 lags are: "$fla
8450: 67 73 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  gs \n]..      }.
8460: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
8470: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72    # NOTE: If our
8480: 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65   caller specifie
8490: 64 20 61 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  d a SQLiteConnec
84a0: 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 74  tionFlags, add t
84b0: 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20  he necessary..
84c0: 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74      #       port
84d0: 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65  ion of the conne
84e0: 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77  ction string now
84f0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
8500: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
8510: 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30  ngth $flags] > 0 8520: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 8530: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect 8540: 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c ion {;Flags=${fl
8550: 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ags}}..      }..
8560: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8570: 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20   # NOTE: If our
8580: 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64  caller specified
8590: 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f 61   an extra payloa
85a0: 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74  d to the connect
85b0: 69 6f 6e 20 73 74 72 69 6e 67 2c 0d 0a 20 20 20  ion string,..
85c0: 20 20 20 23 20 20 20 20 20 20 20 61 70 70 65 6e     #       appen
85d0: 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  d it now...
85e0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
85f0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78  tring length $ex 8600: 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b tra] > 0} then { 8610: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append 8620: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 connection \;$
8630: 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a  extra..      }..
8640: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8650: 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68   # NOTE: Open th
8660: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
8670: 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69  ction now, placi
8680: 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61  ng the opaque ha
8690: 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20  ndle value..
86a0: 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74    #       into t
86b0: 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63  he variable spec
86c0: 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c  ified by our cal
86d0: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ler...      #..
86e0: 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c       set db [sql
86f0: 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69   open -type SQLi
8700: 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65  te [subst $conne 8710: 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 ction]].... 8720: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 8730: 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20 : Configure the 8740: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 8750: 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 6c ory for the newl 8760: 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 y opened databas 8770: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 8780: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 connection now 8790: 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 unless our calle 87a0: 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 r forbids it... 87b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 87c0: 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 20 {$temporary &&
87d0: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
87e0: 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 44  no(setTemporaryD
87f0: 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e  irectory)]} then
8800: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20   {..        sql
8810: 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70  execute $db [app 8820: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 8830: 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 74 "PRAGMA t 8840: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 emp_store_direct 8850: 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 65 ory = \"" [getTe 8860: 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 mporaryDirectory 8870: 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d ] \"\;].. } 8880: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 8890: 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79 # NOTE: Alway 88a0: 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f 6e s return the con 88b0: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75 nection handle u 88c0: 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 pon success... 88d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret 88e0: 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a urn$db..    }..
88f0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44  ...    proc getD
8900: 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76  bConnection { {v
8910: 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a  arName db} } {..
8920: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
8930: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
8940: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
8950: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
8960: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
8970: 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
8980: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20  #       caller.
8990: 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74   The handle to t
89a0: 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76  he database prev
89b0: 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 62 79  iously opened by
89c0: 20 5b 73 65 74 75 70 44 62 5d 0d 0a 20 20 20 20   [setupDb]..
89d0: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64    #       should
89e0: 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65   be stored there
89f0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
8a00: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 8a10: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # 8a20: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 8a30: 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 This returns the 8a40: 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e ADO.NET IDbConn 8a50: 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e ection object in 8a60: 73 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a stance for the.. 8a70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 70 # sp 8a80: 65 63 69 66 69 65 64 20 64 61 74 61 62 73 65 20 ecified databse 8a90: 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 handle. Since g 8aa0: 65 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 etting this obje 8ab0: 63 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a ct relies upon.. 8ac0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea 8ad0: 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 gle internals, g 8ae0: 72 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 reat care should 8af0: 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f be taken to avo 8b00: 69 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d id disposing of. 8b10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 8b20: 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 his object or ot 8b30: 68 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 herwise putting 8b40: 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c it into an inval 8b50: 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 id state... 8b60: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 8b70: 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 nfo exists db]} 8b80: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 8b90: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 8ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob 8bb0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 8bc0: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f gs +NonPublic -o 8bd0: 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 bjectflags +NoDi 8be0: 73 70 6f 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 spose \.. 8bf0: 20 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20 -alias 8c00: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 8c10: 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e ctive.connection 8c20: 73 20 49 74 65 6d 20 24 64 62 7d 20 5c 0d 0a 20 s Item$db} \..
8c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8c40: 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
8c50: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
8c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
8c70: 54 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74  TE: Success, ret
8c80: 75 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f  urn the opaque o
8c90: 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20  bject handle...
8ca0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
8cb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 8cc0: 73 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 sult.. } 8cd0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 8ce0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 8cf0: 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 NOTE: Failure, 8d00: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 report why... 8d10: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8d20: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
8d30: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
8d40: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
8d50: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
8d60: 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
8d70: 67 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  get connection h
8d80: 61 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61  andle for databa
8d90: 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  se \"" \..
8da0: 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c          $db "\", 8db0: 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
8dc0: 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
8dd0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
8de0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
8df0: 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74  oc freeDbConnect
8e00: 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63  ion { {varName c
8e10: 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a  onnection} } {..
8e20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
8e30: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
8e40: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
8e50: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f  riable (e.g. "co
8e60: 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68  nnection") in th
8e70: 65 20 63 6f 6e 74 65 78 74 0d 0a 20 20 20 20 20  e context..
8e80: 20 23 20 20 20 20 20 20 20 6f 66 20 6f 75 72 20   #       of our
8e90: 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61  caller.  The opa
8ea0: 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c  que object handl
8eb0: 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54  e for an ADO.NET
8ec0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20   connection..
8ed0: 20 20 20 23 20 20 20 20 20 20 20 70 72 65 76 69     #       previ
8ee0: 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62  ously returned b
8ef0: 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69  y [getDbConnecti
8f00: 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65 20 73 74  on] should be st
8f10: 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20  ored there...
8f20: 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61     #..      upva
8f30: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e  r 1 $varName con 8f40: 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 nection.... 8f50: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 8f60: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 6d : Attempt to rem 8f70: 6f 76 65 20 74 68 65 20 6f 70 61 71 75 65 20 6f ove the opaque o 8f80: 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 72 6f bject handle fro 8f90: 6d 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 m the interprete 8fa0: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # 8fb0: 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a now. This [obj 8fc0: 65 63 74 20 64 69 73 70 6f 73 65 5d 20 63 61 6c ect dispose] cal 8fd0: 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 l will not actua 8fe0: 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 20 74 lly dispose of t 8ff0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 9000: 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a underlying obj 9010: 65 63 74 20 62 65 63 61 75 73 65 20 74 68 65 20 ect because the 9020: 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 20 +NoDispose flag 9030: 77 61 73 20 73 65 74 20 6f 6e 20 69 74 20 64 75 was set on it du 9040: 72 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20 ring.. # 9050: 20 20 20 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 creation of 9060: 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 the opaque objec 9070: 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 t handle... 9080: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 9090: 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 nfo exists conne 90a0: 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 ction] && \.. 90b0: 20 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b 6f [catch {o 90c0: 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 24 63 bject dispose$c
90d0: 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72  onnection} error
90e0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
90f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
9100: 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
9110: 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76   failed to remov
9120: 65 20 74 68 65 20 68 61 6e 64 6c 65 2c 20 72 65  e the handle, re
9130: 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20  port why...
9140: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
9150: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 9160: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 9170: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 9180: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 9190: 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 iled to remove c 91a0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 onnection handle 91b0: 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e \""$connection
91c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
91d0: 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e  "\", error: " \n
91e0: 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. 91f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 9200: 0d 0a 20 20 20 20 70 72 6f 63 20 61 64 64 44 62 .. proc addDb 9210: 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e Connection { con 9220: 6e 65 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 nection {varName 9230: 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 db} } {.. 9240: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 9250: 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 Refer to the sp 9260: 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 ecified variable 9270: 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 (e.g. "db") in 9280: 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f the context of o 9290: 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ur.. # 92a0: 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 caller... 92b0: 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar 92c0: 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
92d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
92e0: 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 61  # NOTE: Create a
92f0: 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d 61   correctly forma
9300: 74 74 65 64 20 6e 61 6d 65 20 66 6f 72 20 74 68  tted name for th
9310: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
9320: 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20  ction to..
9330: 23 20 20 20 20 20 20 20 62 65 20 61 64 64 65 64  #       be added
9340: 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6d 61 6e   to the list man
9350: 61 67 65 64 20 62 79 20 74 68 65 20 45 61 67 6c  aged by the Eagl
9360: 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a  e interpreter...
9370: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
9380: 65 74 20 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e  et db [object in
9390: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
93a0: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
93b0: 20 20 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f      Eagle._Compo
93c0: 6e 65 6e 74 73 2e 50 72 69 76 61 74 65 2e 46 6f  nents.Private.Fo
93d0: 72 6d 61 74 4f 70 73 20 44 61 74 61 62 61 73 65  rmatOps Database
93e0: 4f 62 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e  ObjectName $conn 93f0: 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 ection \.. 9400: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 SQLiteConnec 9410: 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 tion [object inv 9420: 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e oke Interpreter. 9430: 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 64 GetActive NextId 9440: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ]].... #.. 9450: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 # NOTE: Add 9460: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f the database co 9470: 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 nnection provide 9480: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 d by our caller 9490: 74 6f 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 to the list.. 94a0: 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th 94b0: 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 ose known to the 94c0: 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 Eagle interpret 94d0: 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 er... #.. 94e0: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 94f0: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 9500: 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65 72 2e lic Interpreter. 9510: 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 GetActive.connec 9520: 74 69 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 tions Add \.. 9530: 20 20 20 20 20 20 20 24 64 62 20 24 63 6f 6e 6e$db $conn 9540: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c ection.. }... 9550: 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e .. proc clean 9560: 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 upDb { fileName 9570: 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f {varName db} {co 9580: 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 llect true} {qua 9590: 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 lify true}.. 95a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 95b0: 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d {delete true} } 95c0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 95d0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 95e0: 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 pt to force all 95f0: 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 pending "garbage 9600: 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 " objects to be 9610: 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 collected,.. 9620: 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 # includ 9630: 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 ing SQLite state 9640: 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 ments and backup 9650: 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 objects; this s 9660: 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 hould allow.. 9670: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 # the u 9680: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 nderlying databa 9690: 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 se file to be de 96a0: 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d leted... #. 96b0: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c . if {$coll
96c0: 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ect} then {..
96d0: 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62       collectGarb
96e0: 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  age $::test_chan 96f0: 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a nel.. }.... 9700: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 9710: 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 NOTE: Refer to 9720: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 the specified va 9730: 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 riable (e.g. "db 9740: 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 ") in the contex 9750: 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 t of our.. 9760: 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 # caller. 9770: 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 The handle to t 9780: 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 he database prev 9790: 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 62 79 iously opened by 97a0: 20 5b 73 65 74 75 70 44 62 5d 0d 0a 20 20 20 20 [setupDb].. 97b0: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 97c0: 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 be stored there 97d0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 97e0: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
97f0: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23  me db....      #
9800: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
9810: 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65 63  Close the connec
9820: 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61  tion to the data
9830: 62 61 73 65 20 6e 6f 77 2e 20 20 54 68 69 73 20  base now.  This
9840: 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73 20  should allow us
9850: 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  to..      #
9860: 20 20 64 65 6c 65 74 65 20 74 68 65 20 75 6e 64    delete the und
9870: 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65  erlying database
9880: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d   file...      #.
9890: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
98a0: 20 65 78 69 73 74 73 20 64 62 5d 20 26 26 20 5b   exists db] && [
98b0: 63 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65  catch {sql close
98c0: 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68   $db} error]} th 98d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 98e0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 98f0: 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c We somehow fail 9900: 65 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 ed to close the 9910: 64 61 74 61 62 61 73 65 2c 20 72 65 70 6f 72 74 database, report 9920: 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 why... # 9930: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 9940: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
9950: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
9960: 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
9970: 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
9980: 20 74 6f 20 63 6c 6f 73 65 20 64 61 74 61 62 61   to close databa
9990: 73 65 20 5c 22 22 20 24 64 62 20 22 5c 22 2c 20  se \"" $db "\", 99a0: 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 error: " \.. 99b0: 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 \n\t$er
99c0: 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  ror \n]..      }
99d0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
99e0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74     # NOTE: First
99f0: 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c  , see if our cal
9a00: 6c 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65  ler has requeste
9a10: 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64  d an in-memory d
9a20: 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20  atabase...
9a30: 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d  #..      set isM
9a40: 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44  emory [isMemoryD
9a50: 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  b $fileName].... 9a60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 9a70: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 NOTE: Build the 9a80: 20 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 full path to th 9a90: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 e database file 9aa0: 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 name. For now, 9ab0: 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 20 all test.. 9ac0: 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 # database 9ad0: 20 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 files are store 9ae0: 64 20 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 d in the tempora 9af0: 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 ry directory... 9b00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 9b10: 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 {!$isMemory &&
9b20: 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b  $qualify} then { 9b30: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 .. set fi 9b40: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 leName [file joi 9b50: 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 n [getDatabaseDi 9b60: 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 rectory] [file t 9b70: 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d ail$fileName]].
9b80: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
9b90: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
9ba0: 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
9bb0: 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74  file still exist
9bc0: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
9bd0: 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72     if {!$isMemor 9be0: 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 y &&$delete &&
9bf0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 9c00: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 9c10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 9c20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 9c30: 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 deleting databa 9c40: 73 65 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 se files if some 9c50: 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c body sets the gl 9c60: 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 obal.. # 9c70: 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 74 variable t 9c80: 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 o prevent it... 9c90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 9ca0: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 9cb0: 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 sts ::no(cleanup 9cc0: 44 62 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b DbFile)]} then { 9cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 9ce0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 9cf0: 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 Attempt to dele 9d00: 74 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 te the test data 9d10: 62 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a base file now... 9d20: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 9d30: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 if {[set 9d40: 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c code [catch {fil 9d50: 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 e delete$fileNa
9d60: 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65  me} error]]} the
9d70: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
9d80: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
9d90: 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68  # NOTE: We someh
9da0: 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  ow failed to del
9db0: 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65  ete the file, re
9dc0: 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20  port why...
9dd0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9de0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 9df0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 9e00: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 9e10: 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 9e20: 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 9e30: 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 to delete datab 9e40: 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ase file \""$fi
9e50: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
9e60: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75            "\" du
9e70: 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72  ring cleanup, er
9e80: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 9e90: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 9ea0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 9eb0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 9ec0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 9ed0: 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 NOTE: Show that 9ee0: 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 we skipped delet 9ef0: 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 ing the file... 9f00: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 9f10: 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 set code 0 9f20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 .... tp 9f30: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
9f40: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
9f50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
9f60: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
9f70: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67  skipped deleting
9f80: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c   database file \
9f90: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a  "" $fileName \.. 9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ 9fb0: 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 " during cleanup 9fc0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. 9fd0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 9fe0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 9ff0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The a000: 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 file does not ex a010: 69 73 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 ist, success!.. a020: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. a030: 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 set code 0.. a040: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r a050: 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 eturn$code..
a060: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
a070: 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74  setupDbInterrupt
a080: 43 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e  Callback { chann
a090: 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20  el log } {..
a0a0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel a0b0: 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 "---- setting u a0c0: 70 20 64 65 62 75 67 67 65 72 20 69 6e 74 65 72 p debugger inter a0d0: 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e rupt callback... a0e0: 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b ".... if { a0f0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. a100: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N a110: 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 74 OTE: Make sure t a120: 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67 67 he script debugg a130: 65 72 20 61 6e 64 20 74 68 65 20 69 73 6f 6c 61 er and the isola a140: 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 20 ted interpreter a150: 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 are.. # a160: 20 20 20 20 20 73 65 74 75 70 20 61 6e 64 20 72 setup and r a170: 65 61 64 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 eady for use... a180: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. a190: 20 20 64 65 62 75 67 20 73 65 74 75 70 20 74 72 debug setup tr a1a0: 75 65 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 ue true.... a1b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # a1c0: 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e NOTE: Load the n a1d0: 65 63 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 ecessary package a1e0: 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 s into the isola a1f0: 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e ted interpreter. a200: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. a210: 20 20 20 20 20 64 65 62 75 67 20 65 76 61 6c 20 debug eval a220: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63 {.. pac a230: 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 kage require Eag a240: 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 le.. pa a250: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 ckage require Ea a260: 67 6c 65 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 gle.Library.. a270: 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 package r a280: 65 71 75 69 72 65 20 45 61 67 6c 65 2e 54 65 73 equire Eagle.Tes a290: 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a t.. }.... a2a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. a2b0: 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 # NOTE: Copy a2c0: 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 the necessary va a2d0: 72 69 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 riables into the a2e0: 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 isolated interp a2f0: 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 reter... a300: 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 #.. debug a310: 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a invoke 0 set :: a320: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 test_channel$ch
a330: 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46  annel; # NOTE: F
a340: 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20  or [tputs]...
a350: 20 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b       debug invok
a360: 65 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c  e 0 set ::test_l
a370: 6f 67 20 24 6c 6f 67 3b 20 23 20 4e 4f 54 45 3a  og $log; # NOTE: a380: 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a For [tlog]..... a390: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. a3a0: 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 # NOTE: Insta a3b0: 6c 6c 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 ll the callback a3c0: 73 63 72 69 70 74 20 74 6f 20 62 65 20 65 76 61 script to be eva a3d0: 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20 69 73 luated in the is a3e0: 6f 6c 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 olated.. a3f0: 23 20 20 20 20 20 20 20 69 6e 74 65 72 70 72 65 # interpre a400: 74 65 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e ter when this in a410: 74 65 72 70 72 65 74 65 72 20 69 73 20 69 6e 74 terpreter is int a420: 65 72 72 75 70 74 65 64 20 62 79 20 73 63 72 69 errupted by scri a430: 70 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 pt.. # a440: 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e cancellation a450: 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 , etc... a460: 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 #.. debug a470: 20 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 callback apply a480: 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 {{sender e} {.. a490: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. a4a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch a4b0: 65 63 6b 20 69 66 20 74 68 69 73 20 63 61 6c 6c eck if this call a4c0: 62 61 63 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 back is one that a4d0: 20 77 65 20 63 61 72 65 20 61 62 6f 75 74 2e 0d we care about.. a4e0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. a4f0: 20 20 20 20 20 20 20 20 69 66 20 7b 22 43 61 6e if {"Can a500: 63 65 6c 65 64 22 20 69 6e 20 5b 73 70 6c 69 74 celed" in [split a510: 20 5b 24 65 20 49 6e 74 65 72 72 75 70 74 54 79 [$e InterruptTy
a520: 70 65 5d 20 22 2c 20 22 5d 7d 20 74 68 65 6e 20  pe] ", "]} then
a530: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
a540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
a550: 4e 4f 54 45 3a 20 49 74 65 72 61 74 65 20 74 68  NOTE: Iterate th
a560: 72 6f 75 67 68 20 61 6c 6c 20 64 61 74 61 62 61  rough all databa
a570: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b  se connections k
a580: 6e 6f 77 6e 20 74 6f 20 74 68 65 0d 0a 20 20 20  nown to the..
a590: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
a5a0: 20 70 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65   parent interpre
a5b0: 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ter...
a5c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
a5d0: 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
a5e0: 2d 61 6c 69 61 73 20 70 61 69 72 20 5c 0d 0a 20  -alias pair \..
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
a600: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
a610: 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
a620: 24 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 63  $e Interpreter.c a630: 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 onnections] {.. a640: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. a650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # a660: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to a670: 20 63 61 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 cancel any SQL a680: 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 queries in progr a690: 65 73 73 20 6f 6e 20 74 68 69 73 0d 0a 20 20 20 ess on this.. a6a0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # a6b0: 20 20 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e database conn a6c0: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 ection... a6d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. a6e0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat a6f0: 63 68 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e ch {$pair Value.
a700: 43 61 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 20 21  Cancel} error] !
a710: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
a720: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
a730: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann a740: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ a750: 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. a760: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W a770: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t a780: 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79 20 66 o cancel query f a790: 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22 or connection \" a7a0: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. a7b0: 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 [$pair
a7c0: 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f 72 3a  Key] "\", error:
a7d0: 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ a7e0: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. a7f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. a800: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. a810: 0a 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 . }}.. a820: 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 } error] == 0 a830: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. a840: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint a850: 69 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 interruptCallbac a860: 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20 k.sqlite3.... a870: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
a880: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20  nel yes\n..
a890: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
a8a0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe a8b0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e l [appendArgs "n a8c0: 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 o, error: " \n\t a8d0: 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
a8e0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
a8f0: 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70      proc cleanup
a900: 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20  File { fileName
a910: 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b  {collect true} {
a920: 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b  force false} } {
a930: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
a940: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
a950: 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65   to force all pe
a960: 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20  nding "garbage"
a970: 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f  objects to be co
a980: 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20  llected,..
a990: 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e  #       includin
a9a0: 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65  g SQLite stateme
a9b0: 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f  nts and backup o
a9c0: 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f  bjects; this sho
a9d0: 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20  uld allow..
a9e0: 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64   #       the und
a9f0: 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65  erlying database
aa00: 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65   file to be dele
aa10: 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ted...      #..
aa20: 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63       if {$collec aa30: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. aa40: 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 collectGarbag aa50: 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 e$::test_channe
aa60: 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  l..      }....
aa70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
aa80: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
aa90: 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69  e file still exi
aaa0: 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  sts...      #..
aab0: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
aac0: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] aad0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. aae0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N aaf0: 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 OTE: Skip deleti ab00: 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20 69 66 ng test files if ab10: 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 somebody sets t ab20: 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 he global variab ab30: 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 le.. # ab40: 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69 to prevent i ab50: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. ab60: 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 if {$forc
ab70: 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73  e || ![info exis
ab80: 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46  ts ::no(cleanupF
ab90: 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ile)]} then {..
aba0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
abb0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
abc0: 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20  tempt to delete
abd0: 74 68 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f  the test file no
abe0: 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  w...          #.
abf0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
ac00: 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20  set code [catch
ac10: 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69  {file delete $fi ac20: 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d leName} error]]} ac30: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. ac40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. ac50: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 # NOTE: We s ac60: 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f omehow failed to ac70: 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 delete the file ac80: 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... ac90: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. aca0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs acb0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
acc0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
ace0: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
acf0: 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74  iled to delete t
ad00: 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69  est file \"" $fi ad10: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. ad20: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 "\" du ad30: 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 ring cleanup, er ad40: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
ad50: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
ad60: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
ad70: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
ad80: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
ad90: 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20  NOTE: Show that
ada0: 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74  we skipped delet
adb0: 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20  ing the file...
adc0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
add0: 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30        set code 0
ade0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70  ....          tp
adf0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan ae00: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs ae10: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. ae20: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: ae30: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting ae40: 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 test file \""$
ae50: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
ae60: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75            "\" du
ae70: 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d  ring cleanup\n"]
ae80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
ae90: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
aea0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
aeb0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65  # NOTE: The file
aec0: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
aed0: 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20   success!..
aee0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
aef0: 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20  t code 0..
af00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
af10: 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a  n $code.. }.. af20: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c 6c ... proc coll af30: 65 63 74 47 61 72 62 61 67 65 20 7b 20 63 68 61 ectGarbage { cha af40: 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e nnel {millisecon af50: 64 73 20 31 30 30 30 7d 20 7b 71 75 69 65 74 20 ds 1000} {quiet af60: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 true} } {.. af70: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a if {[catch {obj af80: 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 ect invoke GC Ge af90: 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c tTotalMemory fal afa0: 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 se} result] == 0 afb0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. afc0: 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
afd0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
afe0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel aff0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- b010: 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 -- memory in use b020: 20 62 79 20 74 68 65 20 43 4c 52 20 62 65 66 6f by the CLR befo b030: 72 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e re collection... b040: 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. b050: 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79$result " by
b060: 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  tes\n"]..
b070: 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
b080: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
b090: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe b0a0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. b0b0: 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN b0c0: 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 ING: failed to g b0d0: 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 et CLR memory us b0e0: 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d age, error: " \. b0f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c . \n\ b100: 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
b110: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
b120: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b130: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b140: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b150: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b160: 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20  #########....
b170: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
b180: 54 45 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61  TE: Repeatedly a
b190: 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63  ttempt to collec
b1a0: 74 20 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20  t garbage until
b1b0: 74 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d  the allotted num
b1c0: 62 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ber..      #
b1d0: 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e     of millisecon
b1e0: 64 73 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20  ds has elapsed.
b1f0: 20 41 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20   Always attempt
b200: 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61  to collect garba
b210: 67 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ge..      #
b220: 20 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e    at least once.
b230: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
b240: 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c 6f 63   set start [cloc
b250: 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20  k seconds]..
b260: 20 20 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72    set stop [expr
b270: 20 7b 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c   {$start + ($mil
b280: 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30  liseconds / 1000
b290: 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 64 6f 20  )}]....      do
b2a0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
b2b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
b2c0: 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61  tempt to force a
b2d0: 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f   full garbage co
b2e0: 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52  llection now.  R
b2f0: 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20 20 20 20  eport any..
b300: 20 20 20 23 20 20 20 20 20 20 20 65 72 72 6f 72     #       error
b310: 20 74 68 61 74 20 69 73 20 65 6e 63 6f 75 6e 74   that is encount
b320: 65 72 65 64 20 69 66 20 77 65 20 66 61 69 6c 2e  ered if we fail.
b330: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
b340: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
b350: 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47  {object invoke G
b360: 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79  C GetTotalMemory
b370: 20 74 72 75 65 7d 20 65 72 72 6f 72 5d 7d 20 74   true} error]} t
b380: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
b390: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel b3a0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. b3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== b3c0: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail b3d0: 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 ed full garbage b3e0: 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f collection, erro b3f0: 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 r: " \.. b400: 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f \n\t$erro
b410: 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  r \n]..        }
b420: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
b430: 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e  now [clock secon
b440: 64 73 5d 0d 0a 20 20 20 20 20 20 7d 20 77 68 69  ds]..      } whi
b450: 6c 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e  le {$start <=$n
b460: 6f 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74  ow && $now <$st
b470: 6f 70 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23  op}....      ###
b480: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b490: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b4a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b4b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
b4c0: 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20  ######....
b4d0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65  if {[catch {obje
b4e0: 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74  ct invoke GC Get
b4f0: 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73  TotalMemory fals
b500: 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d  e} result] == 0}
b510: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b520: 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th b530: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. b540: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
b550: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
b560: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
b570: 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  - memory in use
b580: 62 79 20 74 68 65 20 43 4c 52 20 61 66 74 65 72  by the CLR after
b590: 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22   collection... "
b5a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b5b0: 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65    $result " byte b5c0: 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d s\n"].. } b5d0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { b5e0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs b5f0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
b600: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
b610: 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
b620: 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74  G: failed to get
b630: 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67   CLR memory usag
b640: 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20  e, error: " \..
b650: 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
b660: 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. b670: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... b680: 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 proc getSQLi b690: 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 7b teHandleCounts { b6a0: 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 channel {quiet b6b0: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. b6c0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 set result [li b6d0: 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 st].... if b6e0: 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 {[haveConstraint b6f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. b700: 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 defineConstant b710: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c .System.Data.SQL b720: 69 74 65 2e 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 ite.COUNT_HANDLE b730: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. b740: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # b750: 4e 4f 54 45 3a 20 41 64 64 20 65 61 63 68 20 63 NOTE: Add each c b760: 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 ritical handle c b770: 6f 75 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75 ount to the resu b780: 6c 74 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20 lting list... b790: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. b7a0: 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69 foreach name [li b7b0: 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75 st connectionCou b7c0: 6e 74 20 73 74 61 74 65 6d 65 6e 74 43 6f 75 6e nt statementCoun b7d0: 74 20 62 61 63 6b 75 70 43 6f 75 6e 74 5d 20 7b t backupCount] { b7e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set b7f0: 76 61 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e value [object in b800: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non b810: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. b820: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D b830: 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 ata.SQLite.Unsaf b840: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 24 eNativeMethods$
b850: 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  name]....
b860: 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} b870: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. b880: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
b890: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
b8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
b8b0: 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c    "---- critical
b8c0: 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22   handle count \"
b8d0: 22 20 24 6e 61 6d 65 20 22 5c 22 20 69 73 20 22  " $name "\" is " b8e0: 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20$value \n]..
b8f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
b900: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
b910: 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 20  sult $value.. b920: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } b930: 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65 74 7d elseif {!$quiet}
b940: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b950: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
b960: 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c 20 68  TE: The actual h
b970: 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 65  andle counts are
b980: 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b 20   not available;
b990: 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d  therefore, just.
b9a0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
b9b0: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
b9c0: 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20   list...
b9d0: 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  #..        tputs
b9e0: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- b9f0: 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 critical handle ba00: 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 counts unavailab ba10: 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a le\n".. }.. ba20: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
ba30: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
ba40: 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75 74 64  ..    proc shutd
ba50: 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 6e  ownSQLite { chan
ba60: 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 65  nel {force false
ba70: 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20  } {quiet false}
ba80: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
ba90: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65      # NOTE: Make
baa0: 20 73 75 72 65 20 74 68 61 74 20 53 51 4c 69 74   sure that SQLit
bab0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69  e core library i
bac0: 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75  s completely shu
bad0: 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20  tdown.  This..
bae0: 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 75      #       is u
baf0: 73 65 64 20 62 79 20 74 65 73 74 73 20 74 68 61  sed by tests tha
bb00: 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 75  t change configu
bb10: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61  ration options a
bb20: 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20  nd/or those..
bb30: 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20     #       that
bb40: 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 72  need to make sur
bb50: 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e 69  e logging is ini
bb60: 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a  tialized (i.e. j
bb70: 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 20  ust in case..
bb80: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53     #       the S
bb90: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
bba0: 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c 69 7a  ry was initializ
bbb0: 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63 65 73  ed in the proces
bbc0: 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20  s prior to..
bbd0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51    #       the SQ
bbe0: 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 65  LiteLog class be
bbf0: 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 74 75  ing able to setu
bc00: 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 61  p its logging ca
bc10: 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20  llback)...
bc20: 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79  #       Normally
bc30: 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e  , this should on
bc40: 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20  ly be performed
bc50: 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61  if SQLite is loa
bc60: 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 23  ded and..      #
bc70: 20 20 20 20 20 20 20 72 65 61 64 79 20 66 6f 72         ready for
bc80: 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74   use by the test
bc90: 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23   suite...      #
bca0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72  ..      if {$for bcb0: 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 ce || [isSQLiteR bcc0: 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 eady]} then {.. bcd0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. bce0: 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f # BUGFIX: Befo bcf0: 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e re calling the n bd00: 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66 ative shutdown f bd10: 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75 unction, make su bd20: 72 65 20 62 6f 74 68 0d 0a 20 20 20 20 20 20 20 re both.. bd30: 20 23 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 # of th bd40: 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 e PRAGMA related bd50: 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 directory names bd60: 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 are freed... bd70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. bd80: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 checkForSQLiteDi bd90: 72 65 63 74 6f 72 69 65 73 20 24 63 68 61 6e 6e rectories$chann
bda0: 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20  el true....
bdb0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
bdc0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
bdd0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
bde0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
bdf0: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
be00: 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
be10: 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20  eMethods \..
be20: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
be30: 74 65 33 5f 73 68 75 74 64 6f 77 6e 7d 20 72 65  te3_shutdown} re
be40: 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sult] == 0} then
be50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
be60: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then be70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t be80: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
be90: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
bea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
beb0: 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f  -- call sqlite3_
bec0: 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b  shutdown()... ok
bed0: 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  : " $result \n]. bee0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. bef0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. bf00: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
bf10: 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
bf20: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
bf30: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen bf40: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. bf50: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c bf60: 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 all sqlite3_shut bf70: 64 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a down()... error: bf80: 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 " \n\t$result
bf90: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
bfa0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
bfb0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
bfc0: 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53      proc reportS
bfd0: 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b  QLiteResources {
bfe0: 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20   channel {quiet
bff0: 66 61 6c 73 65 7d 20 7b 63 6f 6c 6c 65 63 74 20  false} {collect
c000: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
c010: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
c020: 3a 20 53 6b 69 70 20 61 6c 6c 20 6f 75 74 70 75  : Skip all outpu
c030: 74 20 69 66 20 77 65 20 61 72 65 20 72 75 6e 6e  t if we are runn
c040: 69 6e 67 20 69 6e 20 22 71 75 69 65 74 22 20 6d  ing in "quiet" m
c050: 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ode...      #..
c060: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet c070: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. c080: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
c090: 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d   "---- current m
c0a0: 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20  emory in use by
c0b0: 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20  SQLite... "..
c0c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
c0d0: 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74   {[catch {object
c0e0: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
c0f0: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
c100: 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
c110: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
c120: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
c130: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
c140: 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72     sqlite3_memor
c150: 79 5f 75 73 65 64 7d 20 6d 65 6d 6f 72 79 5d 20  y_used} memory]
c160: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
c170: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie c180: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. c190: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
c1a0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
c1b0: 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c  $memory " bytes\ c1c0: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. c1d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. c1e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. c1f0: 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 # NOTE: Maybe c200: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 the SQLite core c210: 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 library is unav c220: 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 ailable?.. c230: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set c240: 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d memory unknown. c250: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! c260: 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
c270: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
c280: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append c290: 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
c2a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
c2b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65     }....      se
c2c0: 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79  t result $memory c2d0: 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e ; # NOTE: Return c2e0: 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74 memory in-use t c2f0: 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d o our caller.... c300: 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 . if {!$qui
c310: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
c320: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann c330: 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d el "---- maximum c340: 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 memory in use b c350: 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 y SQLite... ".. c360: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... c370: 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 if {[catch {obje c380: 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags c390: 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys c3b0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. c3c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 UnsafeNativeMeth c3d0: 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ods \.. c3e0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d sqlite3_mem c3f0: 6f 72 79 5f 68 69 67 68 77 61 74 65 72 20 30 7d ory_highwater 0} c400: 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 memory] == 0} t c410: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i c420: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
c430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
c440: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap c450: 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
c460: 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20   " bytes\n"]..
c470: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
c480: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
c490: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
c4a0: 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51  TE: Maybe the SQ
c4b0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
c4c0: 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  y is unavailable
c4d0: 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ?..        #..
c4e0: 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79        set memory
c4f0: 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20   unknown....
c500: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} c510: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. c520: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
c530: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m c540: 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 emory \n].. c550: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... c560: 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c . if {$coll
c570: 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ect} then {..
c580: 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62       collectGarb
c590: 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20  age $channel.. c5a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i c5b0: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
c5c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
c5d0: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- c5e0: 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 current memory c5f0: 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c in use by the CL c600: 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d R... ".. }. c610: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca c620: 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f tch {object invo c630: 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 ke GC GetTotalMe c640: 6d 6f 72 79 20 66 61 6c 73 65 7d 20 6d 65 6d 6f mory false} memo c650: 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ry] == 0} then { c660: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s c670: 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 tring is integer c680: 20 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 -strict$memory
c690: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
c6a0: 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet c6b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. c6c0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
c6d0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
c6e0: 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73   $memory " bytes c6f0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. c700: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els c710: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 e {.. s c720: 65 74 20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 et memory invali c730: 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 d.... i c740: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
c750: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
c760: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ c770: 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
c780: 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
c790: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
c7a0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
c7b0: 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f          set memo
c7c0: 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20  ry unknown....
c7d0: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie c7e0: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. c7f0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
c800: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
c810: 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20  $memory \n].. c820: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. c830: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return c840: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a$result..    }..
c850: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63  ...    proc chec
c860: 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74  kForSQLiteDirect
c870: 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20  ories { channel
c880: 7b 72 65 73 65 74 20 66 61 6c 73 65 7d 20 7d 20  {reset false} }
c890: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
c8a0: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
c8b0: 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77  if the sqlite3_w
c8c0: 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
c8d0: 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61  ry function is a
c8e0: 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20  vailable...
c8f0: 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20   #..      tputs
c900: 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  $channel \.. c910: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec c920: 6b 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 69 6f king for functio c930: 6e 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f n sqlite3_win32_ c940: 73 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e set_directory... c950: 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ".... #.. c960: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi c970: 73 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 s call to the sq c980: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ c990: 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 directory functi c9a0: 6f 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 20 20 on uses the.. c9b0: 20 20 20 23 20 20 20 20 20 20 20 69 6e 76 61 6c # inval c9c0: 69 64 20 76 61 6c 75 65 20 30 20 66 6f 72 20 74 id value 0 for t c9d0: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e he first argumen c9e0: 74 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69 73 t. This code is c9f0: 20 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 designed.. ca00: 20 23 20 20 20 20 20 20 20 74 6f 20 63 68 65 63 # to chec ca10: 6b 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 k if calling the ca20: 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 function will r ca30: 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f aise an exceptio ca40: 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 n (i.e... # ca50: 20 20 20 20 20 20 20 74 68 65 20 61 63 74 75 61 the actua ca60: 6c 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 l result of the ca70: 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f function does no ca80: 74 20 6d 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 t matter as long ca90: 20 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 as no.. # caa0: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 directory cab0: 69 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 is changed)... cac0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if cad0: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. cae0: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object caf0: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N cb00: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. cb10: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System cb20: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 .Data.SQLite.Uns cb30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 afeNativeMethods cb40: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. cb50: 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f sqlite3_win32_ cb60: 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20 set_directory 0 cb70: 6e 75 6c 6c 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 null}] == 0} the cb80: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. cb90: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: cba0: 43 61 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c 69 Calling the sqli cbb0: 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di cbc0: 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e rectory function cbd0: 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 does not.. cbe0: 20 20 20 23 20 20 20 20 20 20 20 63 61 75 73 65 # cause cbf0: 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20 74 an exception; t cc00: 68 65 72 65 66 6f 72 65 2c 20 69 74 20 6d 75 73 herefore, it mus cc10: 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 28 t be available ( cc20: 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 i.e... # cc30: 20 20 20 20 20 20 65 76 65 6e 20 74 68 6f 75 67 even thoug cc40: 68 20 69 74 20 73 68 6f 75 6c 64 20 72 65 74 75 h it should retu cc50: 72 6e 20 61 20 66 61 69 6c 75 72 65 20 72 65 74 rn a failure ret cc60: 75 72 6e 20 63 6f 64 65 20 69 6e 20 74 68 69 73 urn code in this cc70: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # cc80: 20 20 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 case)... cc90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 #.. add cca0: 43 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 74 Constraint sqlit ccb0: 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir ccc0: 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 ectory.... ccd0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
cce0: 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20   yes\n....
ccf0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
cd00: 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61  OTE: Does our ca
cd10: 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73  ller want to res
cd20: 65 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69  et the directori
cd30: 65 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  es?..        #..
cd40: 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73          if {$res cd50: 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. cd60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. cd70: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d # NOTE: Now m cd80: 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74 ake sure the dat cd90: 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 abase and tempor cda0: 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 ary directories cdb0: 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 are.. # cdc0: 20 20 20 20 20 20 20 72 65 73 65 74 20 74 68 65 reset the cdd0: 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 ir default value cde0: 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 s, which should cdf0: 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 be null for both ce00: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 ... # ce10: 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 Since the s ce20: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set ce30: 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 _directory funct ce40: 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 ion is available ce50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 ,.. # ce60: 20 20 20 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 use it... ce70: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. ce80: 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e for {set in ce90: 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c dex 1} {$index <
cea0: 20 33 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d   3} {incr index}
ceb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
cec0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
ced0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cee0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
cef0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
cf00: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
cf10: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
cf20: 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
cf30: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
cf40: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
cf50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77         sqlite3_w
cf60: 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
cf70: 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 7d 20  ry $index null} cf80: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. cf90: 20 20 20 20 20 20 20 72 65 73 75 6c 74 5d 20 3d result] = cfa0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. cfb0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs cfc0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
cfd0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
cfe0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
cff0: 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69   call sqlite3_wi
d000: 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
d010: 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20  y(" $index \.. d020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 d030: 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 ", null)... ok: d040: 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 "$result \n]..
d050: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
d060: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
d070: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe d080: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. d090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . d0a0: 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 "---- call sq d0b0: 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ d0c0: 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 directory("$ind
d0d0: 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ex \..
d0e0: 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29          ", null)
d0f0: 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  ... error: " \n\
d100: 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  t $result \n].. d110: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. d120: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. d130: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el d140: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp d150: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c uts$channel no\
d160: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n....        #..
d170: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
d180: 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20  Does our caller
d190: 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68  want to reset th
d1a0: 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20 20  e directories?
d1b0: 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20  This can only..
d1c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62         #       b
d1d0: 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53  e performed if S
d1e0: 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20  QLite is loaded
d1f0: 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73  and ready for us
d200: 65 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20  e by the test..
d210: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
d220: 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  uite...        #
d230: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72  ..        if {$r d240: 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69 74 eset && [isSQLit d250: 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d eReady]} then {. d260: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. d270: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: d280: 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 Now make sure th d290: 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 e database and t d2a0: 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f emporary directo d2b0: 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 ries are.. d2c0: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 # rese d2d0: 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 t their default d2e0: 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 values, which sh d2f0: 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 ould be null for d300: 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 both... d310: 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 # Since d320: 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 d330: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory d340: 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f function does no d350: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 t.. # d360: 20 20 20 20 20 61 70 70 65 61 72 20 74 6f 20 62 appear to b d370: 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 65 e available, use d380: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 the associated d390: 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d PRAGMA commands. d3a0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # d3b0: 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 instead... d3c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. d3d0: 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 foreach dire d3e0: 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 ctory [list data d3f0: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 _store_directory d400: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 temp_store_dire d410: 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 ctory] {.. d420: 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 set sql [a d430: 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d ppendArgs "PRAGM d440: 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 A "$directory "
d450: 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20   = \"\";"]....
d460: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
d470: 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c  atch {executeSql
d480: 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d   $sql} result] = d490: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. d4a0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs d4b0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
d4c0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
d4d0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
d4e0: 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20   execute PRAGMA
d4f0: 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e  " $directory ".. d500: 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 . ok: \"" \.. d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
d520: 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20  result \"\n]..
d530: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
d540: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
d550: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel d560: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 d580: 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 "---- execute d590: 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 PRAGMA "$direct
d5a0: 6f 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a 20  ory "... error:
d5b0: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
d5c0: 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73         \n\t $res d5d0: 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. d5e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. d5f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. d600: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... d610: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE d620: 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 : Finally, show d630: 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 the current valu d640: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 e of the databas d650: 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d e and temporary. d660: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d d670: 69 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69 irectories. Thi d680: 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65 s can only be pe d690: 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 rformed if SQLit d6a0: 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 e is loaded.. d6b0: 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 # and r d6c0: 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 eady for use by d6d0: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d the test suite.. d6e0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. d6f0: 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61 if {[isSQLiteRea d700: 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 dy]} then {.. d710: 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 foreach dir d720: 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 ectory [list dat d730: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 a_store_director d740: 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 y temp_store_dir d750: 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 ectory] {.. d760: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
d770: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
d780: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22  "---- checking "
d790: 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e   $directory "... d7a0: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 "].... d7b0: 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 set sql [append d7c0: 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 Args "PRAGMA "$
d7d0: 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d  directory \;]...
d7e0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
d7f0: 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71  catch {executeSq
d800: 6c 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72  l $sql scalar} r d810: 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the d820: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. d830: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
d840: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a  [appendArgs "ok:
d850: 20 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c   \"" $result \"\ d860: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 n].. } d870: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. d880: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
d890: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
d8a0: 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72  error: " \n\t $r d8b0: 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. d8c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. d8d0: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. }.. d8e0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c }..... proc l d8f0: 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 oadSQLiteTestSet d900: 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20 tings { channel d910: 7b 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69 {suffix ""} {qui d920: 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 et false} } {.. d930: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # d940: 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69 NOTE: Skip loadi d950: 6e 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 ng the settings d960: 69 66 20 74 68 65 69 72 20 75 73 61 67 65 20 68 if their usage h d970: 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 as been disabled d980: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d990: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi d9a0: 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 sts ::no(sqliteT d9b0: 65 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74 estSettings)]} t d9c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # d9d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE d9e0: 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65 : Load custom pe d9f0: 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 r-user and/or pe da00: 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 r-host test sett da10: 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ings now... da20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if da30: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : da40: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 :tcl_platform(us da50: 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 er)]} then {.. da60: 20 20 20 20 20 20 20 20 73 65 74 20 75 73 65 72 set user da70: 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName da80: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 [file join [get da90: 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d CommonDirectory] daa0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. dab0: 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 [appendArgs se dac0: 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e ttings$suffix .
dad0: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d   $::tcl_platform dae0: 28 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d (user) .eagle]]. daf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if db00: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 75 {[file exists$u
db10: 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  serSettingsFileN
db20: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
db30: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$db40: 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu db60: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
db70: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
db90: 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75  -- loading per-u
dba0: 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67  ser test setting
dbb0: 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20  s file \"" \..
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dbd0: 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c  $userSettingsFil dbe0: 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a eName \"...\n].. dbf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... dc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if dc10: 7b 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c {[catch {uplevel dc20: 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 1 [list source dc30: 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c$userSettingsFil
dc40: 65 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20  eName]} \..
dc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
dc60: 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  rror]} then {..
dc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
dc80: 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { dc90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. dca0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
dcb0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dcd0: 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
dce0: 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61  G: failed to loa
dcf0: 64 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 69  d per-user setti
dd00: 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a  ngs file \"" \..
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dd20: 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67      $userSetting dd30: 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 sFileName "\", e dd40: 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
dd50: 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ror \n]..
dd60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
dd70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
dd80: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
dd90: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q dda0: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput ddc0: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
ddd0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
ddf0: 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e  - skipped loadin
de00: 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20  g per-user test
de10: 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
de20: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
de30: 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74         $userSett de40: 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 ingsFileName "\" de50: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex de60: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. de70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. de80: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. de90: 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 23 .. ###### dea0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ deb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ dec0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ ded0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ dee0: 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.... if def0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: df00: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 tcl_platform(hos df10: 74 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 t)]} then {.. df20: 20 20 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 set hostS df30: 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName df40: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 [file join [getC df50: 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 ommonDirectory] df60: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. df70: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 [appendArgs set df80: 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 tings$suffix .
df90: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform( dfa0: 68 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a host) .eagle]].. dfb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { dfc0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f [file exists$ho
dfd0: 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  stSettingsFileNa
dfe0: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
dff0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q e000: 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. e010: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput e020: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
e030: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
e040: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
e050: 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f  - loading per-ho
e060: 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  st test settings
e070: 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20   file \"" \..
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $e090: 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 hostSettingsFile e0a0: 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 Name \"...\n].. e0b0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { e0d0: 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 [catch {uplevel e0e0: 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 1 [list source$
e0f0: 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65  hostSettingsFile
e100: 4e 61 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20  Name]} \..
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
e120: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
e130: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
e140: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. e150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . e160: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
e170: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
e180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e190: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
e1a0: 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64  : failed to load
e1b0: 20 70 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e   per-host settin
e1c0: 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20  gs file \"" \..
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e1e0: 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73     $hostSettings e1f0: 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 FileName "\", er e200: 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
e210: 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
e220: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
e230: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
e240: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
e250: 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu e260: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. e270: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs e280: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
e290: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
e2a0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
e2b0: 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67   skipped loading
e2c0: 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73   per-host test s
e2d0: 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
e2e0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
e2f0: 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69        $hostSetti e300: 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c ngsFileName "\", e310: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 it does not exi e320: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 st\n"].. e330: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. e340: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. e350: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... e360: 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 .. proc runSQ e370: 4c 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 LiteTestPrologue e380: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. e390: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk e3a0: 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 ip running our c e3b0: 75 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 ustom prologue i e3c0: 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 f the main one h e3d0: 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 as been.. # e3e0: 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d skipped.. e3f0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. e400: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist e410: 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e s ::no(prologue. e420: 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d eagle)]} then {. e430: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. e440: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 # NOTE: Load e450: 20 74 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e the "before-con e460: 73 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d straints" custom e470: 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 per-user and/or e480: 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 per-host.. e490: 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 # test e4a0: 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 settings now... e4b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. e4c0: 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 uplevel 1 [lis e4d0: 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 t loadSQLiteTest e4e0: 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 Settings$::test
e4f0: 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65  _channel .before
e500: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
e510: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
e520: 53 6b 69 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e  Skip all System.
e530: 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61  Data.SQLite rela
e540: 74 65 64 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e  ted file handlin
e550: 67 20 28 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20  g (deleting,..
e560: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
e570: 70 79 69 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69  pying, and loadi
e580: 6e 67 29 20 69 66 20 77 65 20 61 72 65 20 73 6f  ng) if we are so
e590: 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20   instructed...
e5a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
e5b0: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
e5c0: 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69  ts ::no(sqliteFi
e5d0: 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
e5e0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
e5f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
e600: 69 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c  ip trying to del
e610: 65 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66  ete any files if
e620: 20 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72   we are so instr
e630: 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  ucted...
e640: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
e650: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
e660: 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
e670: 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  teFiles)]} then
e680: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
e690: 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79  ryDeleteAssembly
e6a0: 20 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 20 20   sqlite3.dll..
e6b0: 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65            remove
e6c0: 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 5f  Constraint file_
e6d0: 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 0d 0a 20  sqlite3.dll....
e6e0: 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
e6f0: 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 53 51 4c  leteAssembly SQL
e700: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d  ite.Interop.dll.
e710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d  .            rem
e720: 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 66 69  oveConstraint fi
e730: 6c 65 5f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  le_SQLite.Intero
e740: 70 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  p.dll....
e750: 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73       tryDeleteAs
e760: 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61  sembly System.Da
e770: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20  ta.SQLite.dll..
e780: 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76             remov
e790: 65 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65  eConstraint file
e7a0: 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  _System.Data.SQL
e7b0: 69 74 65 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20  ite.dll....
e7c0: 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
e7d0: 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
e7e0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
e7f0: 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  .dll..
e800: 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69    removeConstrai
e810: 6e 74 20 66 69 6c 65 5f 53 79 73 74 65 6d 2e 44  nt file_System.D
e820: 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e  ata.SQLite.Linq.
e830: 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  dll..          }
e840: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
e850: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
e860: 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74  E: Skip trying t
e870: 6f 20 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 73  o copy any files
e880: 20 69 66 20 77 65 20 61 72 65 20 73 6f 20 69 6e   if we are so in
e890: 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20  structed...
e8a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
e8b0: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
e8c0: 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
e8d0: 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  iteFiles)]} then
e8e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
e8f0: 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20  tryCopyAssembly
e900: 73 71 6c 69 74 65 33 2e 64 6c 6c 0d 0a 20 20 20  sqlite3.dll..
e910: 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
e920: 41 73 73 65 6d 62 6c 79 20 53 51 4c 69 74 65 2e  Assembly SQLite.
e930: 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a 20 20 20  Interop.dll..
e940: 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
e950: 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
e960: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d  Data.SQLite.dll.
e970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
e980: 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 79 73  CopyAssembly Sys
e990: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
e9a0: 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  Linq.dll..
e9b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
e9c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
e9d0: 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79  # NOTE: Skip try
e9e0: 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79 20  ing to load any
e9f0: 66 69 6c 65 73 20 69 66 20 77 65 20 61 72 65 20  files if we are
ea00: 73 6f 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a  so instructed...
ea10: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
ea20: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
ea30: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f  o exists ::no(lo
ea40: 61 64 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d  adSqliteFiles)]}
ea50: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
ea60: 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65       tryLoadAsse
ea70: 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
ea80: 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20  .SQLite.dll..
ea90: 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64           tryLoad
eaa0: 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
eab0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
eac0: 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  .dll..
ead0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
eae0: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
eaf0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
eb00: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel eb10: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. eb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- eb30: 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version eb40: 20 6f 66 20 5c 22 73 71 6c 69 74 65 33 2e 64 6c of \"sqlite3.dl eb50: 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 l\"... " \.. eb60: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file eb70: 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 version [getBina eb80: 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 ryFileName sqlit eb90: 65 33 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 e3.dll]] \n].. eba0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... ebb0: 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. ebc0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
ebd0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
ebe0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
ebf0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
ec00: 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c  ile version of \
ec10: 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e  "SQLite.Interop.
ec20: 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20  dll\"... " \..
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
ec40: 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69  e version [getBi
ec50: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c  naryFileName SQL
ec60: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d  ite.Interop.dll]
ec70: 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  ] \n]..        }
ec80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
ec90: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
eca0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha ecb0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs ecc0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. ecd0: 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver ece0: 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d sion of \"System ecf0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll ed00: 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 \"... " \.. ed10: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 [file v ed20: 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 ersion [getBinar ed30: 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d yFileName System ed40: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll ed50: 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. ed60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat ed70: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. ed80: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
ed90: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
eda0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
edb0: 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
edc0: 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65  rsion of \"Syste
edd0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69  m.Data.SQLite.Li
ede0: 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d  nq.dll\"... " \.
edf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
ee00: 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65  file version [ge
ee10: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
ee20: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
ee30: 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 5c 6e  te.Linq.dll]] \n
ee40: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ]..        }....
ee50: 20 20 20 20 20 20 20 20 73 65 74 20 61 73 73 65          set asse
ee60: 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63 74 20 69  mblies [object i
ee70: 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61 69 6e 2e  nvoke AppDomain.
ee80: 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e 20 47 65  CurrentDomain Ge
ee90: 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d 0a 0d 0a  tAssemblies]....
eea0: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66          object f
eeb0: 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c 79 20  oreach assembly
eec0: 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d 0a 20  $assemblies {.. eed0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 if {[st eee0: 72 69 6e 67 20 6d 61 74 63 68 20 5c 7b 53 79 73 ring match \{Sys eef0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2a tem.Data.SQLite* ef00: 20 24 61 73 73 65 6d 62 6c 79 5d 7d 20 74 68 65$assembly]} the
ef10: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
ef20: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c ef30: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr ef40: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. ef50: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e "---- foun ef60: 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20 24 61 d assembly: "$a
ef70: 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 20  ssembly \n]..
ef80: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
ef90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
efa0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
efb0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ efc0: 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. efd0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 "---- d efe0: 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 20 efine constants eff0: 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 for \"System.Dat f000: 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d a.SQLite\"... ". f010: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if f020: 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 {[catch {object f030: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N f040: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. f050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy f060: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite f070: 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 .SQLite3 DefineC f080: 6f 6e 73 74 61 6e 74 73 7d 20 5c 0d 0a 20 20 20 onstants} \.. f090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d f0a0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 efineConstants] f0b0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. f0c0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs f0d0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
f0e0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72  [appendArgs [for
f0f0: 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c  matList [lsort \
f100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f110: 20 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e    $defineConstan f120: 74 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 ts]] \n].. f130: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. f140: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs f150: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
f160: 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20  unknown\n..
f170: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
f180: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
f190: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
f1a0: 4e 6f 77 2c 20 77 65 20 6e 65 65 64 20 74 6f 20  Now, we need to
f1b0: 6b 6e 6f 77 20 69 66 20 74 68 65 20 53 51 4c 69  know if the SQLi
f1c0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library
f1d0: 69 73 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20  is available..
f1e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28 69        #       (i
f1f0: 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 65 20  .e. because the
f200: 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79 20 53 79 73  managed-only Sys
f210: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
f220: 61 73 73 65 6d 62 6c 79 20 63 61 6e 0d 0a 20 20  assembly can..
f230: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f        #       lo
f240: 61 64 20 77 69 74 68 6f 75 74 20 69 74 3b 20 68  ad without it; h
f250: 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 6e 6f  owever, it canno
f260: 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 73  t do anything us
f270: 65 66 75 6c 20 77 69 74 68 6f 75 74 0d 0a 20 20  eful without..
f280: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74        #       it
f290: 29 2e 20 20 49 66 20 77 65 20 61 72 65 20 75 73  ).  If we are us
f2a0: 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f  ing the mixed-mo
f2b0: 64 65 20 61 73 73 65 6d 62 6c 79 20 61 6e 64 20  de assembly and
f2c0: 77 65 20 61 6c 72 65 61 64 79 0d 0a 20 20 20 20  we already..
f2d0: 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 75 6e      #       foun
f2e0: 64 20 69 74 20 28 61 62 6f 76 65 29 2c 20 74 68  d it (above), th
f2f0: 69 73 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73  is should always
f300: 20 73 75 63 63 65 65 64 2e 0d 0a 20 20 20 20 20   succeed...
f310: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
f320: 65 63 6b 46 6f 72 53 51 4c 69 74 65 20 24 3a 3a  eckForSQLite $:: f330: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a test_channel.... f340: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. f350: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check f360: 20 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61 the SQLite data f370: 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 base and tempora f380: 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 2e 0d ry directories.. f390: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. f3a0: 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 checkForSQLi f3b0: 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a teDirectories$:
f3c0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
f3d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f3e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
f3f0: 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  mpt to determine
f400: 20 69 66 20 76 61 72 69 6f 75 73 20 63 6f 6d 70   if various comp
f410: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
f420: 20 6e 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 20   needed for..
f430: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
f440: 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65  t constraints we
f450: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74  re enabled for t
f460: 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  he managed assem
f470: 62 6c 79 2e 20 20 54 68 65 72 65 0d 0a 20 20 20  bly.  There..
f480: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65       #       are
f490: 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69   some compile-ti
f4a0: 6d 65 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20  me options that
f4b0: 6d 75 73 74 20 61 6c 73 6f 20 68 61 76 65 20 62  must also have b
f4c0: 65 65 6e 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20  een enabled..
f4d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72       #       for
f4e0: 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73   the interop ass
f4f0: 65 6d 62 6c 79 20 69 6e 20 6f 72 64 65 72 20 74  embly in order t
f500: 6f 20 62 65 20 65 66 66 65 63 74 69 76 65 2e 20  o be effective.
f510: 20 46 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20   For those..
f520: 20 20 20 20 23 20 20 20 20 20 20 20 6f 70 74 69      #       opti
f530: 6f 6e 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20  ons, it will be
f540: 61 73 73 75 6d 65 64 20 74 68 61 74 20 69 74 20  assumed that it
f550: 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20  was enabled for
f560: 74 68 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20  the interop..
f570: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73       #       ass
f580: 65 6d 62 6c 79 20 69 66 20 69 74 20 77 61 73 20  embly if it was
f590: 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20  enabled for the
f5a0: 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
f5b0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
f5c0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 65        foreach de
f5d0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69  fineConstant [li
f5e0: 73 74 20 43 48 45 43 4b 5f 53 54 41 54 45 20 43  st CHECK_STATE C
f5f0: 4f 55 4e 54 5f 48 41 4e 44 4c 45 20 49 4e 54 45  OUNT_HANDLE INTE
f600: 52 4f 50 5f 43 4f 44 45 43 20 5c 0d 0a 20 20 20  ROP_CODEC \..
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f630: 20 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20    INTEROP_DEBUG
f640: 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 5c 0d 0a 20  INTEROP_LOG \..
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f670: 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 45      INTEROP_EXTE
f680: 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20  NSION_FUNCTIONS
f690: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f6b0: 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f          INTEROP_
f6c0: 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 53  TEST_EXTENSION S
f6d0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 5c  QLITE_STANDARD \
f6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f700: 20 20 20 20 20 20 20 55 53 45 5f 49 4e 54 45 52         USE_INTER
f710: 4f 50 5f 44 4c 4c 5d 20 7b 0d 0a 20 20 20 20 20  OP_DLL] {..
f720: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
f730: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
f740: 69 66 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74  if the compile-t
f750: 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69  ime option is li
f760: 73 74 65 64 20 69 6e 20 74 68 65 20 6c 69 73 74  sted in the list
f770: 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 20 20 23   of..          #
f780: 20 20 20 20 20 20 20 22 64 65 66 69 6e 65 20 63         "define c
f790: 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70 74 20 74  onstants" kept t
f7a0: 72 61 63 6b 20 6f 66 20 62 79 20 74 68 65 20 6d  rack of by the m
f7b0: 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e  anaged assembly.
f7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
f7d0: 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
f7e0: 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e  rSQLiteDefineCon
f7f0: 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68  stant $::test_ch f800: 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65 43 6f 6e annel$defineCon
f810: 73 74 61 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d  stant..        }
f820: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
f830: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
f840: 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  heck the current
f850: 20 62 75 69 6c 64 20 79 65 61 72 2e 20 20 42 61   build year.  Ba
f860: 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e  sically, this in
f870: 64 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20  dicates..
f880: 20 23 20 20 20 20 20 20 20 77 68 69 63 68 20 76   #       which v
f890: 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c  ersion of MSBuil
f8a0: 64 20 61 6e 64 2f 6f 72 20 56 69 73 75 61 6c 20  d and/or Visual
f8b0: 53 74 75 64 69 6f 20 77 61 73 20 75 73 65 64 20  Studio was used
f8c0: 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  to..        #
f8d0: 20 20 20 20 63 6f 6d 70 69 6c 65 20 74 68 65 20      compile the
f8e0: 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65  assembly binarie
f8f0: 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20  s under test...
f900: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f910: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ f920: 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. f930: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 "---- che f940: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d cking for System f950: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 .Data.SQLite bui f960: 6c 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a ld year... ".... f970: 20 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72 set year f980: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d [getBuildYear]. f990: 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons f9a0: 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr f9b0: 67 73 20 62 75 69 6c 64 59 65 61 72 20 24 79 65 gs buildYear$ye
f9c0: 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75  ar]..        tpu
f9d0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann f9e0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ f9f0: 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d "$year \"\n]...
fa00: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
fa10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
fa20: 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75  k the current bu
fa30: 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ild configuratio
fa40: 6e 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20  n.  This should
fa50: 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20  normally..
fa60: 20 20 23 20 20 20 20 20 20 20 62 65 20 65 69 74    #       be eit
fa70: 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22  her "Debug" or "
fa80: 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20 20 20 20  Release"...
fa90: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
faa0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan fab0: 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. fac0: 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e "---- checkin fad0: 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 g for System.Dat fae0: 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 63 a.SQLite build c faf0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 2e 2e 20 onfiguration... fb00: 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ".... set fb10: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b configuration [ fb20: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 getBuildConfigur fb30: 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ation].. fb40: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 addConstraint [a fb50: 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 43 ppendArgs buildC fb60: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 63 6f onfiguration$co
fb70: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20  nfiguration]..
fb80: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t fb90: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app fba0: 65 6e 64 41 72 67 73 20 5c 22 20 24 63 6f 6e 66 endArgs \"$conf
fbb0: 69 67 75 72 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d  iguration \"\n].
fbc0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
fbd0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 72        # NOTE: Tr
fbe0: 79 20 74 6f 20 73 65 74 75 70 20 61 6e 20 69 6e  y to setup an in
fbf0: 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b  terrupt callback
fc00: 20 75 73 69 6e 67 20 74 68 65 20 73 63 72 69 70   using the scrip
fc10: 74 20 64 65 62 75 67 67 65 72 0d 0a 20 20 20 20  t debugger..
fc20: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74      #       that
fc30: 20 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61 6c 6c   will cancel all
fc40: 20 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20   SQL queries in
fc50: 70 72 6f 67 72 65 73 73 20 66 6f 72 20 61 6c 6c  progress for all
fc60: 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..
fc70: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65     #       conne
fc80: 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20  ctions known to
fc90: 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72  this interpreter
fca0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
fcb0: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
fcc0: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c   exists ::no(sql
fcd0: 69 74 65 49 6e 74 65 72 72 75 70 74 43 61 6c 6c  iteInterruptCall
fce0: 62 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  back)]} then {..
fcf0: 20 20 20 20 20 20 20 20 20 20 73 65 74 75 70 44            setupD
fd00: 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61  bInterruptCallba
fd10: 63 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ck $::test_chann fd20: 65 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a el$::test_log..
fd30: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
fd40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
fd50: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f  # NOTE: Check fo
fd60: 72 20 74 68 65 20 6e 61 74 69 76 65 20 72 75 6e  r the native run
fd70: 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 68 69  time option, whi
fd80: 63 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20 77 65  ch would mean we
fd90: 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20   are..        #
fda0: 20 20 20 20 20 20 75 73 69 6e 67 20 74 68 65 20        using the
fdb0: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
fdc0: 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  bly...        #.
fdd0: 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
fde0: 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24  rRuntimeOption $fdf0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e ::test_channel n fe00: 61 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 ative.... fe10: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO fe20: 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 TE: Check if the fe30: 20 74 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 test suite shou fe40: 6c 64 20 63 6f 75 6e 74 20 74 68 65 20 6e 75 6d ld count the num fe50: 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f ber of connectio fe60: 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ns.. # fe70: 20 20 20 20 22 6f 70 65 6e 65 64 22 20 61 6e 64 "opened" and fe80: 20 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d 20 74 "closed" from t fe90: 68 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64 65 74 he pool when det fea0: 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 74 65 ermining if a te feb0: 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # fec0: 20 20 20 20 70 61 73 73 65 64 2e 20 20 44 69 73 passed. Dis fed0: 61 62 6c 69 6e 67 20 74 68 69 73 20 62 65 68 61 abling this beha fee0: 76 69 6f 72 20 69 73 20 73 6f 6d 65 74 69 6d 65 vior is sometime fef0: 73 20 6e 65 63 65 73 73 61 72 79 20 28 65 2e 67 s necessary (e.g ff00: 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ... # ff10: 20 20 20 64 75 72 69 6e 67 20 74 68 65 20 72 65 during the re ff20: 6c 65 61 73 65 20 74 65 73 74 69 6e 67 20 70 72 lease testing pr ff30: 6f 63 65 73 73 29 20 62 65 63 61 75 73 65 20 74 ocess) because t ff40: 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c here are several ff50: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # ff60: 20 20 74 65 73 74 73 20 74 68 61 74 20 72 65 6c tests that rel ff70: 79 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e 65 64 y on the "opened ff80: 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e from pool" coun ff90: 74 20 62 65 69 6e 67 20 67 72 65 61 74 65 72 0d t being greater. ffa0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # ffb0: 20 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54 68 65 than zero. The ffc0: 73 65 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 se tests may fai ffd0: 6c 20 64 75 65 20 74 6f 20 74 68 65 20 6e 6f 6e l due to the non ffe0: 2d 64 65 74 65 72 6d 69 6e 69 73 74 69 63 0d 0a -deterministic.. fff0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 10000 62 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 behavior of the 10010 43 4c 52 20 47 43 2c 20 65 76 65 6e 20 77 68 65 CLR GC, even whe 10020 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20 62 75 n there is no bu 10030 67 20 69 6e 20 74 68 65 20 63 6f 64 65 0d 0a 20 g in the code.. 10040 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 10050 65 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a 20 20 eing tested... 10060 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 10070 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 checkForRuntime 10080 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 Option$::test_c
10090 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75  hannel noPoolCou
100a0 6e 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  nts....        #
100b0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
100c0 3a 20 52 65 70 6f 72 74 20 74 68 65 20 72 65 73  : Report the res
100d0 6f 75 72 63 65 20 75 73 61 67 65 20 70 72 69 6f  ource usage prio
100e0 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79  r to running any
100f0 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20   tests...
10100 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f   #..        repo
10110 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65  rtSQLiteResource
10120 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 10130 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a l.... #.. 10140 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 10150 53 68 6f 77 20 74 68 65 20 61 63 74 69 76 65 20 Show the active 10160 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 test constraints 10170 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 10180 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
10190 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
101a0 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f  endArgs "---- co
101b0 6e 73 74 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a  nstraints: " \..
101c0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 6f 72              [for
101d0 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b  matList [lsort [
101e0 67 65 74 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d  getConstraints]]
101f0 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ] \n]....
10200 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
10210 54 45 3a 20 53 61 76 65 20 74 68 65 20 74 65 73  TE: Save the tes
10220 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f  t constraints fo
10230 72 20 75 73 65 20 62 79 20 74 68 72 65 61 64 73  r use by threads
10240 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 69 73   created in this
10250 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
10260 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f    application do
10270 6d 61 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e  main.  This is n
10280 65 63 65 73 73 61 72 79 20 62 65 63 61 75 73 65  ecessary because
10290 20 61 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a   all the Eagle..
102a0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
102b0 22 74 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69  "test context" i
102c0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65  nformation is pe
102d0 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20  r-thread...
102e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
102f0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
10300 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e  ::test_constrain
10310 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ts]} then {..
10320 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73         set ::tes
10330 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a  t_constraints $: 10340 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e :eagle_tests(con 10350 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 straints).. 10360 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 10370 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10380 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74 E: Load the "aft 10390 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 er-constraints" 103a0 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 custom per-user 103b0 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d and/or per-host. 103c0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 103d0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e test settings n 103e0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ow... #.. 103f0 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 uplevel 10400 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 1 [list loadSQLi 10410 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 teTestSettings$
10420 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e  ::test_channel .
10430 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20  after]....
10440 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
10450 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f  OTE: Show when o
10460 75 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c  ur tests actuall
10470 79 20 62 65 67 61 6e 20 28 6e 6f 77 29 2e 0d 0a  y began (now)...
10480 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10490 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 104a0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 104b0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 104c0 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d "---- System 104d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 .Data.SQLite tes 104e0 74 73 20 62 65 67 61 6e 20 61 74 20 22 20 5c 0d ts began at " \. 104f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c . [cl 10500 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 ock format [cloc 10510 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d k seconds]] \n]. 10520 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 10530 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e .... proc run 10540 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67 SQLiteTestEpilog 10550 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ue {} {.. # 10560 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 10570 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 Skip running our 10580 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f 67 75 65 custom epilogue 10590 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 if the main one 105a0 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 has been.. 105b0 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 # skipped 105c0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 105d0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 105e0 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 sts ::no(epilogu 105f0 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 e.eagle)]} then 10600 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 10610 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh 10620 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 ow when our test 10630 73 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 65 64 s actually ended 10640 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 (now)... 10650 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 10660 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
10670 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
10680 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
10690 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  -- System.Data.S
106a0 51 4c 69 74 65 20 74 65 73 74 73 20 65 6e 64 65  QLite tests ende
106b0 64 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20  d at " \..
106c0 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72        [clock for
106d0 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e  mat [clock secon
106e0 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  ds]] \n]....
106f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
10700 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20   BUGFIX: Before
10710 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66 69 6e  checking the fin
10720 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69 6e 20  al resources in
10730 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c 20 6d  use by SQLite, m
10740 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ake..        #
10750 20 20 20 20 20 20 20 73 75 72 65 20 62 6f 74 68         sure both
10760 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 72   of the PRAGMA r
10770 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 79  elated directory
10780 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 64   names are freed
10790 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
107a0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
107b0 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20  LiteDirectories
107c0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 107d0 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 true.... 107e0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 107f0 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 E: Also report t 10800 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 he resource usag 10810 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 e after running 10820 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 the tests... 10830 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 10840 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 eportSQLiteResou 10850 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 rces$::test_cha
10860 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  nnel..      }..
10870 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23     }.....    ###
10880 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10890 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
108a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
108b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
108c0 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23  ########..    ##
108d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
108e0 23 23 23 23 23 23 23 23 23 23 23 20 45 4e 44 20  ########### END
108f0 45 61 67 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23  Eagle ONLY #####
10900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10910 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23  #########..    #
10920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
10960 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d  ##########..  }.
10970 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45  ...  #..  # NOTE
10980 3a 20 53 61 76 65 20 74 68 65 20 6e 61 6d 65 20  : Save the name
10990 6f 66 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  of the directory
109a0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73   containing this
109b0 20 66 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69   file...  #..  i
109c0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
109d0 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74   ::common_direct
109e0 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
109f0 20 20 73 65 74 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64    set ::common_d
10a00 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64  irectory [file d
10a10 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72  irname [info scr
10a20 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20  ipt]]..  }....
10a30 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 50 72 6f  #..  # NOTE: Pro
10a40 76 69 64 65 20 74 68 65 20 53 79 73 74 65 6d 2e  vide the System.
10a50 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74  Data.SQLite test
10a60 20 70 61 63 6b 61 67 65 20 74 6f 20 74 68 65 20   package to the
10a70 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20  interpreter...
10a80 23 0d 0a 20 20 70 61 63 6b 61 67 65 20 70 72 6f  #..  package pro
10a90 76 69 64 65 20 53 79 73 74 65 6d 2e 44 61 74 61  vide System.Data
10aa0 2e 53 51 4c 69 74 65 2e 54 65 73 74 20 31 2e 30  .SQLite.Test 1.0
10ab0 0d 0a 7d 0d 0a                                   ..}..