System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 0dcb3bf603469bb0430e032c946cbdbcf5d38977:

• File Tests/common.eagle — part of check-in [5fc3695abf] at 2013-11-15 08:38:22 on branch trunk — When checking for builds and releases available for testing, make sure the matching interop assembly or core library exists, if necessary (i.e. the primary assembly is not mixed-mode). (user: mistachkin size: 93665)

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b  etBuildYear {} {
0340: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0350: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
0360: 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74 69  the "year" setti
0370: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
0380: 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75 73  ridden by the us
0390: 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  er (e.g...
03a0: 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63  #       on the c
03b0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
03c0: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
03d0: 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 68 20  l exactly which
03e0: 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  set of..      #
03f0: 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 20 77        binaries w
0400: 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74  e are testing, t
0410: 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 75 73  hose produced us
0420: 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c 20 53  ing the Visual S
0430: 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20  tudio..      #
0440: 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c       2005, 2008,
0450: 20 32 30 31 30 2c 20 6f 72 20 32 30 31 32 20 62   2010, or 2012 b
0460: 75 69 6c 64 20 73 79 73 74 65 6d 73 2e 20 20 54  uild systems.  T
0470: 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20  o override this
0480: 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20  value..      #
0490: 20 20 20 20 20 76 69 61 20 74 68 65 20 63 6f 6d       via the com
04a0: 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72  mand line, enter
04b0: 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c   a command simil
04c0: 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65  ar to one of the
04d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
04e0: 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f  following (all o
04f0: 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20  n one line):..
0500: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20      #..      #
0510: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e       EagleShell.
0520: 65 78 65 20 2d 70 72 65 49 6e 69 74 69 61 6c 69  exe -preInitiali
0530: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61  ze "set test_yea
0540: 72 20 32 30 30 35 22 0d 0a 20 20 20 20 20 20 23  r 2005"..      #
0550: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e           -file .
0560: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67  \path\to\all.eag
0570: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  le..      #..
0580: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0590: 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65 49 6e  Shell.exe -preIn
05a0: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
05b0: 73 74 5f 79 65 61 72 20 32 30 30 38 22 0d 0a 20  st_year 2008"..
05c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
05d0: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
05e0: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
05f0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0600: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
0610: 2d 70 72 65 49 6e 69 74 69 61 6c 69 7a 65 20 22  -preInitialize "
0620: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
0630: 31 30 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  10"..      #
0640: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
0650: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
0660: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0670: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0680: 6c 2e 65 78 65 20 2d 70 72 65 49 6e 69 74 69 61  l.exe -preInitia
0690: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
06a0: 65 61 72 20 32 30 31 32 22 0d 0a 20 20 20 20 20  ear 2012"..
06b0: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
06c0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
06d0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
06e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
06f0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65  leShell.exe -pre
0700: 49 6e 69 74 69 61 6c 69 7a 65 20 22 75 6e 73 65  Initialize "unse
0710: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65  t -nocomplain te
0720: 73 74 5f 79 65 61 72 22 0d 0a 20 20 20 20 20 20  st_year"..
0730: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20  #         -file
0740: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
0750: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  gle..      #..
0760: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
0770: 69 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72  ists ::test_year
0780: 5d 20 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e  ] && [string len
0790: 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 72  gth $::test_year 07a0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 07b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 07c0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 07d0: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 07e0: 20 79 65 61 72 2e 20 20 49 66 20 74 68 69 73 20 year. If this 07f0: 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20 variable is not 0800: 73 65 74 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 set, the.. 0810: 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c # defaul 0820: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 t value will be 0830: 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72 based on whether 0840: 20 6f 72 20 6e 6f 74 20 45 61 67 6c 65 20 68 61 or not Eagle ha 0850: 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 20 20 s been.. 0860: 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 64 # compiled 0870: 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c 52 against the CLR 0880: 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 76 34 2e v2.0 or CLR v4. 0890: 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 0... #.. 08a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
08b0: 3a 74 65 73 74 5f 79 65 61 72 0d 0a 20 20 20 20  :test_year..
08c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
08d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
08e0: 20 4e 4f 54 45 3a 20 49 66 20 45 61 67 6c 65 20   NOTE: If Eagle
08f0: 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c 65  has been compile
0900: 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c  d against the CL
0910: 52 20 76 34 2e 30 2c 20 75 73 65 20 22 32 30 31  R v4.0, use "201
0920: 30 22 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23  0" by..        #
0930: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 28         default (
0940: 77 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 30  we could use "20
0950: 31 32 22 20 69 6e 20 74 68 61 74 20 63 61 73 65  12" in that case
0960: 20 61 73 20 77 65 6c 6c 29 20 61 73 20 74 68 65   as well) as the
0970: 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23   test..        #
0980: 20 20 20 20 20 20 20 79 65 61 72 3b 20 6f 74 68         year; oth
0990: 65 72 77 69 73 65 2c 20 75 73 65 20 22 32 30 30  erwise, use "200
09a0: 38 22 20 62 79 20 64 65 66 61 75 6c 74 20 28 77  8" by default (w
09b0: 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 30 30  e could use "200
09c0: 35 22 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 23  5" in..        #
09d0: 20 20 20 20 20 20 20 74 68 61 74 20 63 61 73 65         that case
09e0: 20 61 73 20 77 65 6c 6c 29 2e 20 20 49 66 20 61   as well).  If a
09f0: 6e 6f 74 68 65 72 20 6d 61 6a 6f 72 20 5b 69 6e  nother major [in
0a00: 63 6f 6d 70 61 74 69 62 6c 65 5d 20 76 65 72 73  compatible] vers
0a10: 69 6f 6e 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  ion of..
0a20: 23 20 20 20 20 20 20 20 74 68 65 20 43 4c 52 20  #       the CLR
0a30: 69 73 20 72 65 6c 65 61 73 65 64 2c 20 74 68 69  is released, thi
0a40: 73 20 63 68 65 63 6b 20 77 69 6c 6c 20 68 61 76  s check will hav
0a50: 65 20 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e  e to be changed.
0a60: 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 23    The..        #
0a70: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 74         default t
0a80: 65 73 74 20 79 65 61 72 20 74 6f 20 75 73 65 20  est year to use
0a90: 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c 61 72  for a particular
0aa0: 20 43 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79   CLR version may
0ab0: 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20   be..        #
0ac0: 20 20 20 20 20 6f 76 65 72 72 69 64 64 65 6e 20       overridden
0ad0: 62 79 20 73 65 74 74 69 6e 67 20 74 68 65 20 67  by setting the g
0ae0: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 22  lobal variable "
0af0: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 24  test_year_clr_v$0b00: 58 22 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 X",.. # 0b10: 20 20 20 20 20 77 68 65 72 65 20 22 24 58 22 20 where "$X"
0b20: 6d 61 79 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20  may [currently]
0b30: 62 65 20 65 69 74 68 65 72 20 22 32 22 20 6f 72  be either "2" or
0b40: 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23   "4"...        #
0b50: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68  ..        if {[h
0b60: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d  aveConstraint im
0b70: 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74  ageRuntime40]} t
0b80: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
0b90: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
0ba0: 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c  s ::test_year_cl
0bb0: 72 5f 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20  r_v4] && \..
0bc0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
0bd0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74  g length $::test 0be0: 5f 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 _year_clr_v4] > 0bf0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 0c00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 0c10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 0c20: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 0c30: 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 68 test year for th 0c40: 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 e CLR v4.0... 0c50: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 0c60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
0c70: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f  ::test_year_clr_
0c80: 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  v4..          }
0c90: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0ca0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
0cb0: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
0cc0: 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74 20  he default test
0cd0: 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52  year for the CLR
0ce0: 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20   v4.0...
0cf0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
0d00: 20 20 20 72 65 74 75 72 6e 20 32 30 31 30 3b 20     return 2010;
0d10: 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61  # TODO: Good "fa
0d20: 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f  llback" default?
0d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
0d40: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
0d50: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
0d60: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
0d70: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20  st_year_clr_v2]
0d80: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
0d90: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
0da0: 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f  th $::test_year_ 0db0: 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 clr_v2] > 0} the 0dc0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 0dd0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 0de0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 0df0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 79 specified test y 0e00: 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 ear for the CLR 0e10: 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 v2.0... 0e20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 0e30: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 return$::test
0e40: 5f 79 65 61 72 5f 63 6c 72 5f 76 32 0d 0a 20 20  _year_clr_v2..
0e50: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
0e60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
0e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
0e80: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66  OTE: Use the def
0e90: 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20 66  ault test year f
0ea0: 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e  or the CLR v2.0.
0eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
0ec0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
0ed0: 75 72 6e 20 32 30 30 38 3b 20 23 20 54 4f 44 4f  urn 2008; # TODO
0ee0: 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b  : Good "fallback
0ef0: 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20  " default?..
0f00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
0f10: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
0f20: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
0f30: 67 65 74 42 75 69 6c 64 59 65 61 72 73 20 7b 7d  getBuildYears {}
0f40: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
0f50: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
0f60: 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65  f the list of te
0f70: 73 74 20 79 65 61 72 73 20 68 61 73 20 62 65 65  st years has bee
0f80: 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20  n overridden by
0f90: 74 68 65 20 75 73 65 72 0d 0a 20 20 20 20 20 20  the user..
0fa0: 23 20 20 20 20 20 20 20 28 65 2e 67 2e 20 6f 6e  #       (e.g. on
0fb0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
0fc0: 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  e)...      #..
0fd0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
0fe0: 69 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72  ists ::test_year
0ff0: 73 5d 20 26 26 20 5b 6c 6c 65 6e 67 74 68 20 24  s] && [llength $1000: 3a 3a 74 65 73 74 5f 79 65 61 72 73 5d 20 3e 20 ::test_years] > 1010: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1020: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1030: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 1040: 65 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 20 ecified list of 1050: 74 65 73 74 20 79 65 61 72 73 2e 0d 0a 20 20 20 test years... 1060: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1070: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 return$::test_y
1080: 65 61 72 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ears..      } el
1090: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
10a0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
10b0: 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   Use the default
10c0: 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79 65   list of test ye
10d0: 61 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ars...        #.
10e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
10f0: 5b 6c 69 73 74 20 32 30 30 35 20 32 30 30 38 20  [list 2005 2008
1100: 32 30 31 30 20 32 30 31 32 5d 0d 0a 20 20 20 20  2010 2012]..
1110: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
1120: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
1130: 50 6c 61 74 66 6f 72 6d 20 7b 20 6e 61 74 69 76  Platform { nativ
1140: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20  e } {..      if
1150: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
1160: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 26  test_platform] &
1170: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
1180: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 1190: 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 :test_platform] 11a0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 11b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 11c0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 11d0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 70 specified test p 11e0: 6c 61 74 66 6f 72 6d 2e 20 20 49 66 20 74 68 69 latform. If thi 11f0: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f s variable is no 1200: 74 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 t set,.. 1210: 23 20 20 20 20 20 20 20 74 68 65 20 64 65 66 61 # the defa 1220: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 ult value will b 1230: 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6d e based on the m 1240: 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 achine architect 1250: 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ure... #. 1260: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1270: 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f [expr {$native ?
1280: 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72   $::test_platfor 1290: 6d 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 m : ""}].. 12a0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 12b0: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d 61 exists ::test_ma 12c0: 63 68 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20 20 chine] && \.. 12d0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 12e0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d 61 ength$::test_ma
12f0: 63 68 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 6e  chine] > 0} then
1300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
1310: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46         # NOTE: F
1320: 6f 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73  or native builds
1330: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61  , return the pla
1340: 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65  tform name corre
1350: 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20  sponding to..
1360: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
1370: 20 74 65 73 74 20 6d 61 63 68 69 6e 65 20 61 72   test machine ar
1380: 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65  chitecture; othe
1390: 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e  rwise, return an
13a0: 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20   empty..
13b0: 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d  #       string..
13c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
13d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72      return [expr
13e0: 20 7b 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63   {$native ? [mac 13f0: 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 hineToPlatform$
1400: 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20  ::test_machine]
1410: 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20  : ""}]..      }
1420: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
1430: 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66  ists ::tcl_platf
1440: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74  orm(machine)]} t
1450: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
1460: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1470: 3a 20 46 6f 72 20 6e 61 74 69 76 65 20 62 75 69  : For native bui
1480: 6c 64 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20  lds, return the
1490: 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f  platform name co
14a0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a  rresponding to..
14b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
14c0: 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 68  the machine arch
14d0: 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77  itecture; otherw
14e0: 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65  ise, return an e
14f0: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20  mpty string...
1500: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1510: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24   return [expr {$1520: 6e 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 native ? \.. 1530: 20 20 20 20 20 20 20 20 5b 6d 61 63 68 69 6e 65 [machine 1540: 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 ToPlatform$::tc
1550: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69  l_platform(machi
1560: 6e 65 29 5d 20 3a 20 22 22 7d 5d 0d 0a 20 20 20  ne)] : ""}]..
1570: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1580: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1590: 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61 63 68 69  # NOTE: No machi
15a0: 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 20  ne architecture
15b0: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65  is available, re
15c0: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74  turn an empty st
15d0: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23  ring...        #
15e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
15f0: 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20   ""..      }..
1600: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1610: 20 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75   getBuildConfigu
1620: 72 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20  ration {} {..
1630: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1640: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22  TE: See if the "
1650: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73  configuration" s
1660: 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20  etting has been
1670: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68  overridden by th
1680: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
1690: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74   user (e.g. on t
16a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29  he command line)
16b0: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f  .  This helps co
16c0: 6e 74 72 6f 6c 20 65 78 61 63 74 6c 79 0d 0a 20  ntrol exactly..
16d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69       #       whi
16e0: 63 68 20 73 65 74 20 6f 66 20 62 69 6e 61 72 69  ch set of binari
16f0: 65 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e  es we are testin
1700: 67 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75  g (i.e. those bu
1710: 69 6c 74 20 69 6e 20 74 68 65 0d 0a 20 20 20 20  ilt in the..
1720: 20 20 23 20 20 20 20 20 20 20 22 44 65 62 75 67    #       "Debug
1730: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 62  " or "Release" b
1740: 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69  uild configurati
1750: 6f 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69  ons).  To overri
1760: 64 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23  de this..      #
1770: 20 20 20 20 20 20 20 76 61 6c 75 65 20 76 69 61         value via
1780: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
1790: 65 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61  e, enter a comma
17a0: 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e  nd similar to on
17b0: 65 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20  e of..      #
17c0: 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e      the followin
17d0: 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69  g (all on one li
17e0: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ne):..      #..
17f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
1800: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65  leShell.exe -pre
1810: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
1820: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
1830: 6f 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20  on Debug"..
1840: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
1850: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
1860: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
1870: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
1880: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 70 72 65  leShell.exe -pre
1890: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
18a0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
18b0: 6f 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20  on Release"..
18c0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69     #         -fi
18d0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c  le .\path\to\all
18e0: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d  .eagle..      #.
18f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45  .      #       E
1900: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66  agleShell.exe -f
1910: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c  ile .\path\to\al
1920: 6c 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74  l.eagle -preTest
1930: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1940: 20 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70    "unset -nocomp
1950: 6c 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67  lain test_config
1960: 75 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20  uration"..
1970: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
1980: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
1990: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20  _configuration]
19a0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
19b0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $19c0: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 ::test_configura 19d0: 74 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tion] > 0} then 19e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 19f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 1a00: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 1a10: 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 test configurati 1a20: 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 on. The default 1a30: 20 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20 value used.. 1a40: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 # for 1a50: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 this variable i 1a60: 73 20 74 79 70 69 63 61 6c 6c 79 20 22 52 65 6c s typically "Rel 1a70: 65 61 73 65 22 2c 20 61 73 20 73 65 74 20 62 79 ease", as set by 1a80: 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20 the test.. 1a90: 20 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65 # suite 1aa0: 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 itself... 1ab0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 1ac0: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 urn$::test_conf
1ad0: 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20  iguration..
1ae0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1af0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
1b00: 4e 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20  NOTE: Normally,
1b10: 77 65 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 69  we will never hi
1b20: 74 20 74 68 69 73 20 63 61 73 65 20 62 65 63 61  t this case beca
1b30: 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
1b40: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
1b50: 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 66 69        test confi
1b60: 67 75 72 61 74 69 6f 6e 20 76 61 72 69 61 62 6c  guration variabl
1b70: 65 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 20  e is always set
1b80: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74  by the test suit
1b90: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
1ba0: 20 20 20 69 74 73 65 6c 66 3b 20 68 6f 77 65 76     itself; howev
1bb0: 65 72 2c 20 69 74 20 63 61 6e 20 62 65 20 6f 76  er, it can be ov
1bc0: 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 74  erridden using t
1bd0: 68 65 20 75 6e 73 65 74 20 63 6f 6d 6d 61 6e 64  he unset command
1be0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1bf0: 20 20 66 72 6f 6d 20 74 68 65 20 2d 70 72 65 54    from the -preT
1c00: 65 73 74 20 6f 70 74 69 6f 6e 20 74 6f 20 74 68  est option to th
1c10: 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
1c20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1c30: 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 61 67 6c    return $::eagl 1c40: 65 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6e 66 69 e_platform(confi 1c50: 67 75 72 61 74 69 6f 6e 29 0d 0a 20 20 20 20 20 guration).. 1c60: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 1c70: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 proc getBuildC 1c80: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 7b 7d onfigurations {} 1c90: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 1ca0: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 # NOTE: See i 1cb0: 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65 f the list of te 1cc0: 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st configuration 1cd0: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 s has been overr 1ce0: 69 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 idden by.. 1cf0: 23 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72 # the user 1d00: 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f (e.g. on the co 1d10: 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 mmand line)... 1d20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 1d30: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 1d40: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 1d50: 6f 6e 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ons] && \.. 1d60: 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a [llength$:
1d70: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74  :test_configurat
1d80: 69 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ions] > 0} then
1d90: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1da0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1db0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
1dc0: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e  list of test con
1dd0: 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20  figurations...
1de0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1df0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f   return $::test_ 1e00: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0d 0a configurations.. 1e10: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1e20: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1e30: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 # NOTE: Use t 1e40: 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 he default list 1e50: 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 of test configur 1e60: 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 ations... 1e70: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 1e80: 72 6e 20 5b 6c 69 73 74 20 44 65 62 75 67 20 52 rn [list Debug R 1e90: 65 6c 65 61 73 65 5d 0d 0a 20 20 20 20 20 20 7d elease].. } 1ea0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1eb0: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 42 61 73 proc getBuildBas 1ec0: 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d eDirectory {} {. 1ed0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1ee0: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f # NOTE: Figure o 1ef0: 75 74 20 74 68 65 20 62 61 73 65 20 64 69 72 65 ut the base dire 1f00: 63 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20 ctory where all 1f10: 74 68 65 20 62 75 69 6c 64 73 20 73 68 6f 75 6c the builds shoul 1f20: 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 d be.. # 1f30: 20 20 20 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 located. Th 1f40: 69 73 20 77 69 6c 6c 20 62 65 20 74 68 65 20 64 is will be the d 1f50: 69 72 65 63 74 6f 72 79 20 74 68 61 74 20 63 6f irectory that co 1f60: 6e 74 61 69 6e 73 20 74 68 65 20 61 63 74 75 61 ntains the actua 1f70: 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 l.. # 1f80: 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 build output di 1f90: 72 65 63 74 6f 72 79 20 28 65 2e 67 2e 20 70 61 rectory (e.g. pa 1fa0: 72 65 6e 74 20 6f 66 20 22 62 69 6e 22 29 2e 0d rent of "bin").. 1fb0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1fc0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 1fd0: 20 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 ::build_base_di 1fe0: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 1ff0: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 2000: 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 length$::build
2010: 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d  _base_directory]
2020: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
2030: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2040: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63   # NOTE: The loc
2050: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69  ation of the bui
2060: 6c 64 20 62 61 73 65 20 64 69 72 65 63 74 6f 72  ld base director
2070: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
2080: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
2090: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
20a0: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74  e, use it verbat
20b0: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
20c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $20d0: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 ::build_base_dir 20e0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } 20f0: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 elseif {[info ex 2100: 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 ists ::common_di 2110: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 2120: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 2130: 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f length$::commo
2140: 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30  n_directory] > 0
2150: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2160: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2170: 4f 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c 6c 62  OTE: Next, fallb
2180: 61 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e  ack to the paren
2190: 74 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74  t directory of t
21a0: 68 65 20 6f 6e 65 20 63 6f 6e 74 61 69 6e 69 6e  he one containin
21b0: 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  g..        #
21c0: 20 20 20 74 68 69 73 20 66 69 6c 65 20 28 69 2e     this file (i.
21d0: 65 2e 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65  e. "common.eagle
21e0: 22 29 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65  "), if available
21f0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2200: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69        return [fi
2210: 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 63 6f  le dirname $::co 2220: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 0d mmon_directory]. 2230: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 2240: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 2250: 70 61 74 68 5d 20 26 26 20 5c 0d 0a 20 20 20 20 path] && \.. 2260: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 2270: 6e 67 74 68 20 24 3a 3a 70 61 74 68 5d 20 3e 20 ngth$::path] >
2280: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
2290: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
22a0: 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66  NOTE: Finally, f
22b0: 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 70  allback to the p
22c0: 61 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20  arent directory
22d0: 6f 66 20 74 68 65 20 45 61 67 6c 65 54 65 73 74  of the EagleTest
22e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
22f0: 20 20 70 61 74 68 2e 20 20 54 68 65 20 45 61 67    path.  The Eag
2300: 6c 65 54 65 73 74 20 70 61 63 6b 61 67 65 20 67  leTest package g
2310: 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 74  uarantees that t
2320: 68 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20  his variable..
2330: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69        #       wi
2340: 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 74 68 65  ll be set to the
2350: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
2360: 69 6e 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  ining the first
2370: 66 69 6c 65 20 74 6f 0d 0a 20 20 20 20 20 20 20  file to..
2380: 20 23 20 20 20 20 20 20 20 65 78 65 63 75 74 65   #       execute
2390: 20 74 68 65 20 5b 72 75 6e 54 65 73 74 50 72 6f   the [runTestPro
23a0: 6c 6f 67 75 65 5d 20 73 63 72 69 70 74 20 6c 69  logue] script li
23b0: 62 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 2e  brary procedure.
23c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
23d0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c       return [fil
23e0: 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74  e dirname $::pat 23f0: 68 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 h].. } else 2400: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 2410: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e # NOTE: N 2420: 6f 20 70 61 74 68 20 69 73 20 61 76 61 69 6c 61 o path is availa 2430: 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 ble, return an e 2440: 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 20 54 68 mpty string. Th 2450: 69 73 20 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 is point.. 2460: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 2470: 20 6e 6f 74 20 62 65 20 72 65 61 63 68 65 64 2e not be reached. 2480: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2490: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 24a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 24b0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 4d 69 ... proc isMi 24c0: 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20 xedModeAssembly 24d0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e { fileName {varN 24e0: 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 ame ""} } {.. 24f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2500: 54 45 3a 20 46 69 72 73 74 2c 20 6d 61 6b 65 20 TE: First, make 2510: 73 75 72 65 20 74 68 65 20 74 65 73 74 20 73 75 sure the test su 2520: 69 74 65 20 69 6e 66 72 61 73 74 72 75 63 74 75 ite infrastructu 2530: 72 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f re is allowed to 2540: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 2550: 75 73 65 20 74 68 65 20 5b 65 78 65 63 5d 20 63 use the [exec] c 2560: 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 20 20 23 ommand... # 2570: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e .. if {![in 2580: 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 fo exists ::no(e 2590: 78 65 63 29 5d 20 26 26 20 21 5b 69 6e 66 6f 20 xec)] && ![info 25a0: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 72 46 exists ::no(corF 25b0: 6c 61 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a lags)]} then {.. 25c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 25d0: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th 25e0: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 43 6f e location of Co 25f0: 72 46 6c 61 67 73 20 69 73 20 70 72 65 73 65 6e rFlags is presen 2600: 74 20 69 6e 20 74 68 65 20 65 6e 76 69 72 6f 6e t in the environ 2610: 6d 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 ment,.. # 2620: 20 20 20 20 20 20 20 75 73 65 20 69 74 3b 20 6f use it; o 2630: 74 68 65 72 77 69 73 65 20 61 73 73 75 6d 65 20 therwise assume 2640: 69 74 20 69 73 20 69 6e 20 74 68 65 20 50 41 54 it is in the PAT 2650: 48 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 H... #.. 2660: 20 20 20 20 20 20 20 73 65 74 20 63 6f 72 46 6c set corFl 2670: 61 67 73 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 ags [expr {.. 2680: 20 20 20 20 20 20 20 5b 69 6e 66 6f 20 65 78 69 [info exi 2690: 73 74 73 20 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 sts ::env(CorFla 26a0: 67 73 29 5d 20 3f 20 24 3a 3a 65 6e 76 28 43 6f gs)] ?$::env(Co
26b0: 72 46 6c 61 67 73 29 20 3a 20 22 43 6f 72 46 6c  rFlags) : "CorFl
26c0: 61 67 73 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d  ags"..        }]
26d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
26e0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
26f0: 74 74 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74  ttempt to execut
2700: 65 20 43 6f 72 46 6c 61 67 73 20 6f 6e 20 74 68  e CorFlags on th
2710: 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65  e specified file
2720: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2730: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
2740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 78   {..          ex
2750: 65 63 20 2d 2d 20 24 63 6f 72 46 6c 61 67 73 20  ec -- $corFlags 2760: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 2770: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
2780: 20 20 20 20 20 7d 20 65 78 65 63 5d 20 3d 3d 20       } exec] ==
2790: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
27a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
27b0: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 72 65 71    # NOTE: If req
27c0: 75 65 73 74 65 64 20 62 79 20 6f 75 72 20 63 61  uested by our ca
27d0: 6c 6c 65 72 2c 20 61 74 74 65 6d 70 74 20 74 6f  ller, attempt to
27e0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 0d 0a   determine the..
27f0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
2800: 20 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 74    platform for t
2810: 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c  he specified fil
2820: 65 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20 20 20  e as well...
2830: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2840: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
2850: 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20  ength $varName] 2860: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 2870: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 2880: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 2890: 53 74 6f 72 65 20 74 68 65 20 70 6c 61 74 66 6f Store the platfo 28a0: 72 6d 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 rm in the named 28b0: 76 61 72 69 61 62 6c 65 20 69 6e 20 74 68 65 0d variable in the. 28c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # 28d0: 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 context of 28e0: 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 our caller... 28f0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 2900: 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 upvar 1 2910: 24 76 61 72 4e 61 6d 65 20 70 6c 61 74 66 6f 72$varName platfor
2920: 6d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  m....
2930: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
2940: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
2950: 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 20 50  to extract the P
2960: 45 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68 65 20  E line from the
2970: 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20 20 20  captured..
2980: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 75        #       ou
2990: 74 70 75 74 2e 20 20 49 66 20 74 68 69 73 20 76  tput.  If this v
29a0: 61 6c 75 65 20 69 73 20 22 50 45 33 32 22 20 6f  alue is "PE32" o
29b0: 72 20 22 50 45 33 32 2b 22 2c 20 74 68 65 0d 0a  r "PE32+", the..
29c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
29d0: 20 20 20 20 61 73 73 65 6d 62 6c 79 20 66 69 6c      assembly fil
29e0: 65 20 69 73 20 33 32 2d 62 69 74 20 6f 72 20 36  e is 32-bit or 6
29f0: 34 2d 62 69 74 2c 20 72 65 73 70 65 63 74 69 76  4-bit, respectiv
2a00: 65 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ely;..
2a10: 20 20 23 20 20 20 20 20 20 20 6f 74 68 65 72 77    #       otherw
2a20: 69 73 65 2c 20 69 74 73 20 74 79 70 65 20 69 73  ise, its type is
2a30: 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a 20 20 20 20 20   unknown...
2a40: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2a50: 20 20 20 20 20 20 73 65 74 20 70 61 74 74 65 72        set patter
2a60: 6e 20 7b 5e 50 45 20 20 20 20 20 20 20 20 3a 20  n {^PE        :
2a70: 28 50 45 33 32 7c 50 45 33 32 5c 2b 29 5c 73 2b  (PE32|PE32\+)\s+
2a80: 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  $}.... 2a90: 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 6c if {[regexp -l 2aa0: 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 ine --$pattern
2ab0: 24 65 78 65 63 20 64 75 6d 6d 79 20 70 65 33 32  $exec dummy pe32 2ac0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2ad0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 2ae0: 20 20 20 20 20 20 20 20 20 20 23 20 48 41 43 4b # HACK 2af0: 3a 20 54 68 69 73 20 5b 73 77 69 74 63 68 5d 20 : This [switch] 2b00: 61 73 73 75 6d 65 73 20 74 68 61 74 20 33 32 2d assumes that 32- 2b10: 62 69 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 bit executables 2b20: 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 are.. 2b30: 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 61 79 # alway 2b40: 73 20 78 38 36 20 61 6e 64 20 74 68 61 74 20 36 s x86 and that 6 2b50: 34 2d 62 69 74 20 65 78 65 63 75 74 61 62 6c 65 4-bit executable 2b60: 73 20 61 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 s are always.. 2b70: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 2b80: 20 20 20 20 78 36 34 2e 0d 0a 20 20 20 20 20 20 x64... 2b90: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2ba0: 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20 switch 2bb0: 2d 65 78 61 63 74 20 2d 2d 20 24 70 65 33 32 20 -exact --$pe32
2bc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2bd0: 20 20 20 50 45 33 32 20 7b 0d 0a 20 20 20 20 20     PE32 {..
2be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2bf0: 20 70 6c 61 74 66 6f 72 6d 20 57 69 6e 33 32 0d   platform Win32.
2c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2c10: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
2c20: 20 20 20 20 50 45 33 32 2b 20 7b 0d 0a 20 20 20      PE32+ {..
2c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2c40: 65 74 20 70 6c 61 74 66 6f 72 6d 20 78 36 34 0d  et platform x64.
2c50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2c60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
2c70: 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20      default {..
2c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c90: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 22 22   set platform ""
2ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2cb0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
2cc0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
2cd0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
2ce0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c            set pl
2cf0: 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20  atform ""..
2d00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
2d10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
2d20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
2d30: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
2d40: 74 6f 20 65 78 74 72 61 63 74 20 74 68 65 20 49  to extract the I
2d50: 4c 4f 4e 4c 59 20 6c 69 6e 65 20 66 72 6f 6d 20  LONLY line from
2d60: 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20  the captured..
2d70: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2d80: 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 69 73  output.  If this
2d90: 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f 2c 20   value is zero,
2da0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69  the specified fi
2db0: 6c 65 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20  le must..
2dc0: 20 20 20 23 20 20 20 20 20 20 20 62 65 20 61 20     #       be a
2dd0: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
2de0: 62 6c 79 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  bly; otherwise,
2df0: 69 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 6c 79  it contains only
2e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
2e10: 20 20 20 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70      managed comp
2e20: 6f 6e 65 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20  onents...
2e30: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
2e40: 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e 49 4c  set pattern {^IL
2e50: 4f 4e 4c 59 20 20 20 20 3a 20 28 30 7c 31 29 5c  ONLY    : (0|1)\
2e60: 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  s+$}.... 2e70: 20 20 69 66 20 7b 21 5b 72 65 67 65 78 70 20 2d if {![regexp - 2e80: 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 72 6e line --$pattern
2e90: 20 24 65 78 65 63 20 64 75 6d 6d 79 20 69 6c 4f   $exec dummy ilO 2ea0: 6e 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 nly]} then {.. 2eb0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 2ec0: 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 false.. 2ed0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 2ee0: 20 69 66 20 7b 21 24 69 6c 4f 6e 6c 79 7d 20 74 if {!$ilOnly} t
2ef0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2f00: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
2f10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2f20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
2f30: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
2f40: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
2f50: 20 74 65 73 74 20 73 75 69 74 65 20 63 61 6e 6e   test suite cann
2f60: 6f 74 20 75 73 65 20 5b 65 78 65 63 5d 20 6f 72  ot use [exec] or
2f70: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 43 6f   execution of Co
2f80: 72 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 23 20  rFlags..      #
2f90: 20 20 20 20 20 20 66 61 69 6c 65 64 2c 20 72 65        failed, re
2fa0: 74 75 72 6e 20 66 61 6c 73 65 2e 0d 0a 20 20 20  turn false...
2fb0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
2fc0: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d  rn false..    }.
2fd0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 42  ....    proc isB
2fe0: 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 7b 20  uildAvailable {
2ff0: 6e 61 74 69 76 65 20 64 69 72 65 63 74 6f 72 79  native directory
3000: 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20   {varName ""} }
3010: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
3020: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
3030: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66  the fully qualif
3040: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f  ied file name fo
3050: 72 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73  r the primary as
3060: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20  sembly..      #
3070: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67        containing
3080: 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61   the System.Data
3090: 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20  .SQLite managed
30a0: 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 74 0d  components.  It.
30b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
30c0: 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65 64 20 74  hould be noted t
30d0: 68 61 74 20 74 68 69 73 20 61 73 73 65 6d 62 6c  hat this assembl
30e0: 79 20 66 69 6c 65 20 6d 61 79 20 61 6c 73 6f 20  y file may also
30f0: 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20  contain the..
3100: 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76     #       nativ
3110: 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66  e components, if
3120: 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20   a native build
3130: 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20  is in use...
3140: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66    #..      set f
3150: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61  ileName [file na
3160: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
3170: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c  oin $directory \ 3180: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 73 74 .. Syst 3190: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 31a0: 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ll]].... if 31b0: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 {![file exists 31c0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
31d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
31e0: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  rn false..
31f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
3200: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
3210: 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  mpt to automatic
3220: 61 6c 6c 79 20 64 65 74 65 63 74 20 69 66 20 74  ally detect if t
3230: 68 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d  he primary assem
3240: 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  bly..      #
3250: 20 20 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20     contains any
3260: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74  native component
3270: 73 2c 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e  s, if necessary.
3280: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
3290: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
32a0: 67 74 68 20 24 6e 61 74 69 76 65 5d 20 3d 3d 20  gth $native] == 32b0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 32c0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 32d0: 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 ength$varName]
32e0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
32f0: 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24         upvar 1 $3300: 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 varName$varName
3310: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
3320: 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76         set nativ
3330: 65 20 5b 69 73 4d 69 78 65 64 4d 6f 64 65 41 73  e [isMixedModeAs
3340: 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65  sembly $fileName 3350: 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20$varName]..
3360: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
3370: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
3380: 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73 73   the primary ass
3390: 65 6d 62 6c 79 20 61 6c 73 6f 20 63 6f 6e 74 61  embly also conta
33a0: 69 6e 73 20 74 68 65 20 6e 61 74 69 76 65 20 63  ins the native c
33b0: 6f 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20 20 20 20  omponents,..
33c0: 20 20 23 20 20 20 20 20 20 20 77 65 20 68 61 76    #       we hav
33d0: 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 20  e everything we
33e0: 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  need...      #..
33f0: 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 69 76        if {$nativ 3400: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 3410: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 3420: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 3430: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 3440: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c : Build the full 3450: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 y qualified file 3460: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 69 6e name for the in 3470: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 0d 0a terop assembly.. 3480: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 3490: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 79 73 ntaining the Sys 34a0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 34b0: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 native component 34c0: 73 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 s. If this.. 34d0: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 # file 34e0: 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c exists, we shoul 34f0: 64 20 68 61 76 65 20 65 76 65 72 79 74 68 69 6e d have everythin 3500: 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 g we need... 3510: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 #.. set f 3520: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 ileName [file na 3530: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 3540: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c oin$directory \
3550: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69  ..          SQLi
3560: 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d  te.Interop.dll]]
3570: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66  ....      if {[f
3580: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file 3590: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 35a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 35b0: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ue.. }.... 35c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 35d0: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 NOTE: Build the 35e0: 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 fully qualified 35f0: 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 file name for th 3600: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 e SQLite core.. 3610: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 # lib 3620: 72 61 72 79 2e 20 20 49 66 20 74 68 69 73 20 66 rary. If this f 3630: 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 20 73 ile exists, we s 3640: 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 72 79 hould have every 3650: 74 68 69 6e 67 20 77 65 0d 0a 20 20 20 20 20 20 thing we.. 3660: 23 20 20 20 20 20 20 20 6e 65 65 64 2e 0d 0a 20 # need... 3670: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se 3680: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 t fileName [file 3690: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 36a0: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 e join$director
36b0: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73  y \..          s
36c0: 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a 0d 0a  qlite3.dll]]....
36d0: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
36e0: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 36f0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 3700: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 3710: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 3720: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 3730: 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 6e 61 : One or more na 3740: 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 tive components 3750: 6e 65 65 64 65 64 20 62 79 20 53 79 73 74 65 6d needed by System 3760: 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 .Data.SQLite.. 3770: 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 # are 3780: 6d 69 73 73 69 6e 67 2e 0d 0a 20 20 20 20 20 20 missing... 3790: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 #.. return 37a0: 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d false.. }.... 37b0: 0a 20 20 20 20 70 72 6f 63 20 69 73 52 65 6c 65 . proc isRele 37c0: 61 73 65 41 76 61 69 6c 61 62 6c 65 20 7b 20 64 aseAvailable { d 37d0: 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d irectory {varNam 37e0: 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e ""} } {.. 37f0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 3800: 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 gth$varName] >
3810: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
3820: 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 3830: 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 ame$varName..
3840: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
3850: 65 74 75 72 6e 20 5b 69 73 42 75 69 6c 64 41 76  eturn [isBuildAv
3860: 61 69 6c 61 62 6c 65 20 22 22 20 24 64 69 72 65  ailable "" $dire 3870: 63 74 6f 72 79 20 24 76 61 72 4e 61 6d 65 5d 0d ctory$varName].
3880: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
3890: 72 6f 63 20 6a 6f 69 6e 42 75 69 6c 64 44 69 72  roc joinBuildDir
38a0: 65 63 74 6f 72 79 20 7b 20 6e 61 74 69 76 65 20  ectory { native
38b0: 70 61 74 68 20 79 65 61 72 20 70 6c 61 74 66 6f  path year platfo
38c0: 72 6d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  rm configuration
38d0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
38e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67       # NOTE: Fig
38f0: 75 72 65 20 6f 75 74 20 61 6e 64 20 74 68 65 6e  ure out and then
3900: 20 72 65 74 75 72 6e 20 74 68 65 20 66 75 6c 6c   return the full
3910: 79 20 71 75 61 6c 69 66 69 65 64 20 70 61 74 68  y qualified path
3920: 20 74 6f 20 74 68 65 20 62 75 69 6c 64 0d 0a 20   to the build..
3930: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72       #       dir
3940: 65 63 74 6f 72 79 20 62 61 73 65 64 20 6f 6e 20  ectory based on
3950: 61 6c 6c 20 74 68 65 20 61 72 67 75 6d 65 6e 74  all the argument
3960: 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75  s provided by ou
3970: 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20  r caller...
3980: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e   #..      if {$n 3990: 61 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 ative} then {.. 39a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 return [f 39b0: 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 ile join$path b
39c0: 69 6e 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f  in $year$platfo
39d0: 72 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f  rm $configuratio 39e0: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 n].. } else 39f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 3a00: 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 rn [file join$p
3a10: 61 74 68 20 62 69 6e 20 24 79 65 61 72 20 24 63  ath bin $year$c
3a20: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 69 6e  onfiguration bin
3a30: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
3a40: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
3a50: 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79  etBuildDirectory
3a60: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
3a70: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65        # NOTE: Se
3a80: 65 20 69 66 20 74 68 65 20 22 6e 61 74 69 76 65  e if the "native
3a90: 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e  " runtime option
3aa0: 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e 20 20   has been set.
3ab0: 49 66 20 73 6f 2c 20 75 73 65 20 74 68 65 0d 0a  If so, use the..
3ac0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69        #       di
3ad0: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20  rectory for the
3ae0: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
3af0: 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68 65 20  bly (a.k.a. the
3b00: 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70 0d 0a  native interop..
3b10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73        #       as
3b20: 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65 6e 61  sembly).  To ena
3b30: 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20  ble this option
3b40: 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  via the command
3b50: 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d 0a 20  line, enter a..
3b60: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d       #       com
3b70: 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20  mand similar to
3b80: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  one of the follo
3b90: 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65  wing (all on one
3ba0: 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23   line):..      #
3bb0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
3bc0: 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d  EagleShell.exe -
3bd0: 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75 6e 74  initialize -runt
3be0: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65  imeOption native
3bf0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
3c00: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74    -file .\path\t
3c10: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20  o\all.eagle..
3c20: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
3c30: 20 20 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68      To enable th
3c40: 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68  is option via th
3c50: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 70  e command line p
3c60: 72 69 6f 72 20 74 6f 20 74 68 65 20 22 62 65 74  rior to the "bet
3c70: 61 20 31 36 22 0d 0a 20 20 20 20 20 20 23 20 20  a 16"..      #
3c80: 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f 66 20       release of
3c90: 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f  Eagle, the follo
3ca0: 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75 73  wing command mus
3cb0: 74 20 62 65 20 75 73 65 64 20 69 6e 73 74 65 61  t be used instea
3cc0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
3cd0: 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e   (also all on on
3ce0: 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20  e line):..
3cf0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
3d00: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
3d10: 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70 6f 73  -initialize -pos
3d20: 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20  tInitialize..
3d30: 20 20 20 23 20 20 20 20 20 20 20 20 20 22 6f 62     #         "ob
3d40: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65  ject invoke Inte
3d50: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76  rpreter.GetActiv
3d60: 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69  e AddRuntimeOpti
3d70: 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20 20 20  on native"..
3d80: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
3d90: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
3da0: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
3db0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
3dc0: 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 64  exists ::build_d
3dd0: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
3de0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
3df0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c  g length $::buil 3e00: 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 d_directory] > 0 3e10: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 3e20: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 3e30: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 3e40: 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 64 n of the build d 3e50: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee 3e60: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 n overridden;.. 3e70: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 3e80: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 3e90: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 verbatim... 3ea0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 3eb0: 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 eturn$::build_d
3ec0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
3ed0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
3ee0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
3ef0: 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74  OTE: If the "nat
3f00: 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74  ive" runtime opt
3f10: 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68 65 20  ion is set, the
3f20: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
3f30: 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  bly..        #
3f40: 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 74 65       is being te
3f50: 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74 20 63  sted.  In that c
3f60: 61 73 65 2c 20 74 68 65 20 70 61 74 68 20 74 6f  ase, the path to
3f70: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63   the build direc
3f80: 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20  tory..        #
3f90: 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e 74 61        will conta
3fa0: 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  in the platform
3fb0: 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74 68 65  name and all the
3fc0: 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20   binaries under
3fd0: 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  test..        #
3fe0: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be
3ff0: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20  present in that
4000: 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66 20 74  directory.  If t
4010: 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74  he "native" runt
4020: 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ime..        #
4030: 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73 20 6e       option is n
4040: 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75 69 6c  ot set, the buil
4050: 64 20 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c  d directory will
4060: 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74   be considered t
4070: 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20  o be..        #
4080: 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 2d        "platform-
4090: 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68 20 74  neutral", with t
40a0: 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63 65 70  he notable excep
40b0: 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 74 69  tion of any nati
40c0: 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ve..        #
40d0: 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28 65 2e      assembly (e.
40e0: 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74 65 72  g. "SQLite.Inter
40f0: 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65 64 20  op.dll") copied
4100: 74 68 65 72 65 20 64 75 72 69 6e 67 20 74 68 65  there during the
4110: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4120: 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20    build process
4130: 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68 65 20  itself.  If the
4140: 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 73 6f  build process so
4150: 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74 0d 0a  mehow does not..
4160: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4170: 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 20  copy the native
4180: 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74 68 69  assembly for thi
4190: 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f 73 74  s platform, most
41a0: 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d 0a 20   of the tests..
41b0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
41c0: 6e 20 74 68 65 20 73 75 69 74 65 20 77 69 6c 6c  n the suite will
41d0: 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69 70 70   simply be skipp
41e0: 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73  ed.  Generally s
41f0: 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65 0d 0a  peaking, there..
4200: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4210: 61 72 65 20 74 77 6f 20 77 61 79 73 20 74 6f 20  are two ways to
4220: 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61 72 69  build the binari
4230: 65 73 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e  es when preparin
4240: 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a 20 20  g to run the..
4250: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
4260: 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20 20 20  st suite:..
4270: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
4280: 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64 20 74        1. Build t
4290: 68 65 20 73 65 70 61 72 61 74 65 20 6d 61 6e 61  he separate mana
42a0: 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65 20 61  ged and native a
42b0: 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e 67 20  ssemblies using
42c0: 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20  some..        #
42d0: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64           command
42e0: 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20  s similar to:..
42f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4300: 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69    #          bui
4310: 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75  ld.bat ${Configu 4320: 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e ration}ManagedOn 4330: 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a ly${Platform}..
4340: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4350: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43     build.bat ${C 4360: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e 61 74 onfiguration}Nat 4370: 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f iveOnly${Platfo
4380: 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rm}..        #..
4390: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
43a0: 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69     Where ${Confi 43b0: 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 guration} is eit 43c0: 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 her "Debug" or " 43d0: 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 Release" and.. 43e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 43f0: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20${Platform} is
4400: 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f  either "Win32" o
4410: 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20 20 20  r "x64"...
4420: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20    #..        #
4430: 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20 74 68       2. Build th
4440: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
4450: 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20 63 6f  embly using a co
4460: 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f  mmand similar to
4470: 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  :..        #..
4480: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
4490: 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e   build.bat ${Con 44a0: 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b 50 6c figuration}${Pl
44b0: 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20  atform}..
44c0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20   #..        #
44d0: 20 20 20 20 20 20 20 57 68 65 72 65 20 24 7b 43         Where ${C 44e0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 onfiguration} is 44f0: 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 either "Debug" 4500: 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 or "Release" and 4510: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 4520: 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d${Platform}
4530: 20 69 73 20 65 69 74 68 65 72 20 22 57 69 6e 33   is either "Win3
4540: 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20 49 66  2" or "x64".  If
4550: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73   this command is
4560: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4570: 20 20 20 20 20 75 73 65 64 2c 20 76 61 72 69 6f       used, vario
4580: 75 73 20 74 65 73 74 73 20 74 68 61 74 20 72 65  us tests that re
4590: 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65 6e 74  quire supplement
45a0: 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20  ary managed..
45b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
45c0: 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e 67 2e  assemblies (e.g.
45d0: 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20 73 6b   LINQ) may be sk
45e0: 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74 68 6f  ipped unless tho
45f0: 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20 20 20  se binaries..
4600: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
4610: 61 72 65 20 73 75 62 73 65 71 75 65 6e 74 6c 79  are subsequently
4620: 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 68 65   copied into the
4630: 20 63 6f 72 72 65 63 74 20 64 69 72 65 63 74 6f   correct directo
4640: 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20 20 20  ry (i.e. by..
4650: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
4660: 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22 29 2e  "test_all.bat").
4670: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4680: 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 74       #       Not
4690: 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20 74 68  e that all of th
46a0: 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e 64 73  e build commands
46b0: 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65 66 61   above will defa
46c0: 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a 20 20  ult to using..
46d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
46e0: 65 20 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e  e latest version
46f0: 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76 61 69   of MSBuild avai
4700: 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20 22 74  lable and the "t
4710: 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d 0a 20  est_year" may..
4720: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e         #       n
4730: 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75 73 74  eed to be adjust
4740: 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79 20 74  ed accordingly t
4750: 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e 20 74  o actually run t
4760: 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a  he test suite...
4770: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4780: 52 65 66 65 72 20 74 6f 20 74 68 65 20 63 6f 6d  Refer to the com
4790: 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42 75 69  ments in [getBui
47a0: 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f 72 65  ldYear] for more
47b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d   information on.
47c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
47d0: 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68 69 73   how to set this
47e0: 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20 20   variable...
47f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
4800: 65 74 20 6e 61 74 69 76 65 20 5b 68 61 73 52 75  et native [hasRu
4810: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
4820: 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ve]....        r
4830: 65 74 75 72 6e 20 5b 6a 6f 69 6e 42 75 69 6c 64  eturn [joinBuild
4840: 44 69 72 65 63 74 6f 72 79 20 24 6e 61 74 69 76  Directory $nativ 4850: 65 20 5b 67 65 74 42 75 69 6c 64 42 61 73 65 44 e [getBuildBaseD 4860: 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 irectory] \.. 4870: 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 [getBui 4880: 6c 64 59 65 61 72 5d 20 5b 67 65 74 42 75 69 6c ldYear] [getBuil 4890: 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 74 69 76 dPlatform$nativ
48a0: 65 5d 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66  e] [getBuildConf
48b0: 69 67 75 72 61 74 69 6f 6e 5d 5d 0d 0a 20 20 20  iguration]]..
48c0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
48d0: 20 20 20 20 70 72 6f 63 20 67 65 74 52 65 6c 65      proc getRele
48e0: 61 73 65 56 65 72 73 69 6f 6e 20 7b 7d 20 7b 0d  aseVersion {} {.
48f0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
4900: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  # NOTE: Figure o
4910: 75 74 20 74 68 65 20 72 65 6c 65 61 73 65 20 76  ut the release v
4920: 65 72 73 69 6f 6e 20 66 6f 72 20 75 73 65 20 77  ersion for use w
4930: 69 74 68 20 74 68 65 20 62 75 69 6c 64 20 64 69  ith the build di
4940: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23  rectory..      #
4950: 20 20 20 20 20 20 20 77 68 65 6e 20 63 68 65 63         when chec
4960: 6b 69 6e 67 20 66 6f 72 20 61 76 61 69 6c 61 62  king for availab
4970: 6c 65 20 72 65 6c 65 61 73 65 73 2e 0d 0a 20 20  le releases...
4980: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
4990: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
49a0: 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d  release_version]
49b0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
49c0: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
49d0: 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69  $::release_versi 49e0: 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d on] > 0} then {. 49f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 4a00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 4a10: 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20 release version 4a20: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 has been overrid 4a30: 64 65 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 den; therefore, 4a40: 75 73 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20 use it.. 4a50: 23 20 20 20 20 20 20 20 76 65 72 62 61 74 69 6d # verbatim 4a60: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 4a70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
4a80: 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 0d  release_version.
4a90: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
4aa0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4ab0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 72      # NOTE: No r
4ac0: 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20 69  elease version i
4ad0: 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 74  s available, ret
4ae0: 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72  urn an empty str
4af0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ing...        #.
4b00: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
4b10: 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  ""..      }..
4b20: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
4b30: 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
4b40: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d   { fileName } {.
4b50: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
4b60: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20  # NOTE: Returns
4b70: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69  the specified fi
4b80: 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69 74  le name as if it
4b90: 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69 6e   were located in
4ba0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
4bb0: 20 20 20 20 62 75 69 6c 64 20 64 69 72 65 63 74      build direct
4bc0: 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e 67 20  ory, discarding
4bd0: 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 69 6e  any directory in
4be0: 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 6e  formation presen
4bf0: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
4c00: 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 6d   in the file nam
4c10: 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 62 79  e as provided by
4c20: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20   our caller...
4c30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
4c40: 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  urn [file native
4c50: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  name \..
4c60: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65    [file join [ge
4c70: 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 5d  tBuildDirectory]
4c80: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c   [file tail $fil 4c90: 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d eName]]].. }. 4ca0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 4cb0: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 20 BinaryDirectory 4cc0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 4cd0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 4ce0: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 s procedure retu 4cf0: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 rns the director 4d00: 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 y where the test 4d10: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 application.. 4d20: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65 # itse 4d30: 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45 61 67 lf (i.e. the Eag 4d40: 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f 63 le shell) is loc 4d50: 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c ated. This will 4d60: 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20 20 20 be used as.. 4d70: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 # the d 4d80: 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74 estination for t 4d90: 68 65 20 63 6f 70 69 65 64 20 53 79 73 74 65 6d he copied System 4da0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 .Data.SQLite nat 4db0: 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 ive and.. # 4dc0: 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 managed a 4dd0: 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e 20 ssemblies (i.e. 4de0: 62 65 63 61 75 73 65 20 74 68 69 73 20 69 73 20 because this is 4df0: 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77 20 70 one of the few p 4e00: 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23 20 20 laces.. # 4e10: 20 20 20 20 20 77 68 65 72 65 20 74 68 65 20 43 where the C 4e20: 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 LR will actually 4e30: 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20 74 find and load t 4e40: 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d 0a hem properly)... 4e50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 4e60: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 4e70: 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f ::binary_directo 4e80: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 4e90: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 4ea0: 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 th$::binary_dir
4eb0: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
4ec0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
4ed0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
4ee0: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
4ef0: 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 65 63  the binary direc
4f00: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
4f10: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
4f20: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
4f30: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72  fore, use it ver
4f40: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
4f50: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
4f60: 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65  n $::binary_dire 4f70: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 4f80: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 4f90: 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 eturn [info bina 4fa0: 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 ry].. }.. 4fb0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 4fc0: 20 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 getBinaryFileNa 4fd0: 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 me { fileName } 4fe0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 4ff0: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return 5000: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 s the specified 5010: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 file name as if 5020: 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 it were located 5030: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 in the.. # 5040: 20 20 20 20 20 20 62 69 6e 61 72 79 20 64 69 72 binary dir 5050: 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 ectory, discardi 5060: 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 ng any directory 5070: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 information pre 5080: 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 sent.. # 5090: 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 in the file 50a0: 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 name as provided 50b0: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d by our caller.. 50c0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 50d0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 return [file nat 50e0: 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ivename \.. 50f0: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 [file join 5100: 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 [getBinaryDirect 5110: 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 ory] [file tail 5120: 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20$fileName]]]..
5130: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
5140: 20 67 65 74 43 6f 72 65 42 69 6e 61 72 79 46 69   getCoreBinaryFi
5150: 6c 65 4e 61 6d 65 20 7b 20 7b 73 74 61 6e 64 61  leName { {standa
5160: 72 64 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  rd false} } {..
5170: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
5180: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68  NOTE: Returns th
5190: 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f 72 20  e full path for
51a0: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
51b0: 69 6e 67 20 74 68 65 20 63 6f 72 65 20 53 51 4c  ing the core SQL
51c0: 69 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ite..      #
51d0: 20 20 20 6c 69 62 72 61 72 79 20 63 6f 64 65 20     library code
51e0: 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72  for this platfor
51f0: 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  m...      #..
5200: 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69     if {[hasRunti
5210: 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d  meOption native]
5220: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
5230: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
5240: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20  OTE: Return the
5250: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
5260: 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a  bly file name...
5270: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
5280: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20     return [file
5290: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20  nativename \..
52a0: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
52b0: 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44  join [getBinaryD
52c0: 69 72 65 63 74 6f 72 79 5d 20 53 79 73 74 65 6d  irectory] System
52d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
52e0: 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ]]..      } else
52f0: 69 66 20 7b 24 73 74 61 6e 64 61 72 64 7d 20 74  if {$standard} t 5300: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 5310: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 5320: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74 : Return the nat 5330: 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72 ive-only standar 5340: 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 d SQLite library 5350: 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 file name... 5360: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5370: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 return [file nat 5380: 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ivename \.. 5390: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 [file joi 53a0: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 n [getBinaryDire 53b0: 63 74 6f 72 79 5d 20 73 71 6c 69 74 65 33 2e 64 ctory] sqlite3.d 53c0: 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c ll]].. } el 53d0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 53e0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 53f0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74 69 Return the nati 5400: 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 ve-only interop 5410: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 assembly file na 5420: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a me... #.. 5430: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 5440: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 5450: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 5460: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 file join [getBi 5470: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 53 naryDirectory] S 5480: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c QLite.Interop.dl 5490: 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 l]].. }.. 54a0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 54b0: 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 getCommonDirect 54c0: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ory {} {.. 54d0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 54e0: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure 54f0: 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 returns the dire 5500: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 ctory where the 5510: 74 65 73 74 20 73 63 72 69 70 74 73 0d 0a 20 20 test scripts.. 5520: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 5530: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 ld be located. 5540: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 By default, this 5550: 20 6a 75 73 74 20 72 65 74 75 72 6e 73 20 74 68 just returns th 5560: 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 e Eagle.. # 5570: 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64 69 binary di 5580: 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 rectory... 5590: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 55a0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d fo exists ::comm 55b0: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 on_directory] && 55c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 55d0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
55e0: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
55f0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
5600: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
5610: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
5620: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f  cation of the co
5630: 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79 20 68  mmon directory h
5640: 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20  as been set;..
5650: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
5660: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e  erefore, use it.
5670: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
5680: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 63       return $::c 5690: 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 0d ommon_directory. 56a0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 56b0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 56c0: 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 vendor_directory 56d0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 56e0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 56f0: 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63$::vendor_direc
5700: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tory] > 0} then
5710: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
5720: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
5730: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  e location of th
5740: 65 20 76 65 6e 64 6f 72 20 64 69 72 65 63 74 6f  e vendor directo
5750: 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b  ry has been set;
5760: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
5770: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65    therefore, use
5780: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
5790: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
57a0: 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74  $::vendor_direct 57b0: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ory.. } els 57c0: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 eif {[info exist 57d0: 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d s ::tcl_library] 57e0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 57f0: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 5800: 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 20$::tcl_library]
5810: 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  > 0 && \..
5820: 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69 72 65      [file isdire
5830: 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c 69 62  ctory $::tcl_lib 5840: 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rary]} then {.. 5850: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 5860: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 # NOTE: The va 5870: 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 riable with the 5880: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 location of the 5890: 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 69 script library i 58a0: 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 58b0: 20 20 20 73 65 74 20 61 6e 64 20 61 70 70 65 61 set and appea 58c0: 72 73 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 rs to be a real 58d0: 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e 20 directory (i.e. 58e0: 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a 20 20 not embedded.. 58f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 # wi 5900: 74 68 69 6e 20 61 20 66 69 6c 65 29 3b 20 74 68 thin a file); th 5910: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e erefore, use it. 5920: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 5930: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 return$::t
5940: 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20 20 20  cl_library..
5950: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
5960: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
5970: 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20   NOTE: Fallback
5980: 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  to the directory
5990: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the
59a0: 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20 20 20  executable...
59b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
59c0: 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e  return [info bin
59d0: 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ary]..      }..
59e0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
59f0: 63 20 67 65 74 44 61 74 61 62 61 73 65 44 69 72  c getDatabaseDir
5a00: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20  ectory {} {..
5a10: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
5a20: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
5a30: 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  re returns the d
5a40: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74  irectory where t
5a50: 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 65  he test database
5a60: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
5a70: 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74   should be locat
5a80: 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c  ed.  By default,
5a90: 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 20   this just uses
5aa0: 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20  the temporary..
5ab0: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72       #       dir
5ac0: 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 65  ectory configure
5ad0: 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 65  d for this syste
5ae0: 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  m...      #..
5af0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
5b00: 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65 5f 64  sts ::database_d
5b10: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
5b20: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
5b30: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 61  g length $::data 5b40: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 5b50: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 5b60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5b70: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 5b80: 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 tion of the data 5b90: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 68 base directory h 5ba0: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 as been overridd 5bb0: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 en;.. # 5bc0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 therefore, 5bd0: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 use it... 5be0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 5bf0: 72 6e 20 24 3a 3a 64 61 74 61 62 61 73 65 5f 64 rn$::database_d
5c00: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
5c10: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20  } elseif {[info
5c20: 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68  exists ::scratch
5c30: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c  _directory] && \
5c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
5c50: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63  ing length $::sc 5c60: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d ratch_directory] 5c70: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 5c80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5c90: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 # NOTE: The loc 5ca0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 ation of the scr 5cb0: 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68 atch directory h 5cc0: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 as been overridd 5cd0: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 en;.. # 5ce0: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 therefore, 5cf0: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 use it... 5d00: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 5d10: 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 rn$::scratch_di
5d20: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
5d30: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
5d40: 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70   return [getTemp
5d50: 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20  oraryPath]..
5d60: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
5d70: 20 20 20 70 72 6f 63 20 67 65 74 54 65 6d 70 6f     proc getTempo
5d80: 72 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b 7d  raryDirectory {}
5d90: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
5da0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
5db0: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e  procedure return
5dc0: 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  s the directory
5dd0: 77 68 65 72 65 20 74 68 65 20 74 65 6d 70 6f 72  where the tempor
5de0: 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 20 20 20  ary files..
5df0: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
5e00: 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20  be located.  By
5e10: 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75  default, this ju
5e20: 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d 70  st uses the temp
5e30: 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20  orary..      #
5e40: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63       directory c
5e50: 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 68  onfigured for th
5e60: 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20  is system...
5e70: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
5e80: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
5e90: 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72  mporary_director
5ea0: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
5eb0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
5ec0: 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64  h $::temporary_d 5ed0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 5ee0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 5ef0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 5f00: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 5f10: 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 f the temporary 5f20: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 directory has be 5f30: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a en overridden;.. 5f40: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 5f50: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 therefore, use i 5f60: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 5f70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
5f80: 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63  :temporary_direc
5f90: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tory..      } el
5fa0: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
5fb0: 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72  ts ::scratch_dir
5fc0: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
5fd0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
5fe0: 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63  length $::scratc 5ff0: 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 h_directory] > 0 6000: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 6010: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 6020: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 6030: 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 63 68 n of the scratch 6040: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 directory has b 6050: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d een overridden;. 6060: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 6070: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 6080: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a it... #.. 6090: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
60a0: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
60b0: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ory..      } els
60c0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e {..        ret
60d0: 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72  urn [getTemporar
60e0: 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d  yPath]..      }.
60f0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
6100: 72 6f 63 20 67 65 74 54 65 73 74 4f 76 65 72 72  roc getTestOverr
6110: 69 64 65 73 50 72 65 61 6d 62 6c 65 20 7b 20 7b  idesPreamble { {
6120: 65 78 74 72 61 56 61 72 4e 61 6d 65 73 20 22 22  extraVarNames ""
6130: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  } } {..      set
6140: 20 76 61 72 4e 61 6d 65 73 20 5b 6c 69 73 74 5d   varNames [list]
6150: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
6160: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76     # NOTE: If av
6170: 61 69 6c 61 62 6c 65 2c 20 73 74 61 72 74 20 77  ailable, start w
6180: 69 74 68 20 74 68 65 20 6d 61 73 74 65 72 20 6c  ith the master l
6190: 69 73 74 20 6f 66 20 74 65 73 74 20 6f 76 65 72  ist of test over
61a0: 72 69 64 65 0d 0a 20 20 20 20 20 20 23 20 20 20  ride..      #
61b0: 20 20 20 20 76 61 72 69 61 62 6c 65 73 2e 0d 0a      variables...
61c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
61d0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
61e0: 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73  ::test_overrides
61f0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
6200: 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65    [llength $::te 6210: 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 3e 20 st_overrides] > 6220: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 6230: 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 eval lappend 6240: 76 61 72 4e 61 6d 65 73 20 24 3a 3a 74 65 73 74 varNames$::test
6250: 5f 6f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20  _overrides..
6260: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
6270: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
6280: 20 72 65 71 75 65 73 74 65 64 20 62 79 20 6f 75   requested by ou
6290: 72 20 63 61 6c 6c 65 72 2c 20 61 64 64 20 61 6e  r caller, add an
62a0: 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72  y additional var
62b0: 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20  iable..      #
62c0: 20 20 20 20 20 6e 61 6d 65 73 20 74 6f 20 63 6f       names to co
62d0: 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23  py now...      #
62e0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65  ..      if {[lle
62f0: 6e 67 74 68 20 24 65 78 74 72 61 56 61 72 4e 61  ngth $extraVarNa 6300: 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b mes] > 0} then { 6310: 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c .. eval l 6320: 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 append varNames 6330: 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 0d 0a$extraVarNames..
6340: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
6350: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
6360: 3a 20 42 75 69 6c 64 20 74 68 65 20 73 63 72 69  : Build the scri
6370: 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 62  pt fragment to b
6380: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 70 72  e returned by pr
6390: 6f 63 65 73 73 69 6e 67 20 65 61 63 68 0d 0a 20  ocessing each..
63a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72       #       var
63b0: 69 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61  iable name and a
63c0: 64 64 69 6e 67 20 74 68 65 20 6e 65 63 65 63 65  dding the necece
63d0: 73 73 61 72 79 20 73 63 72 69 70 74 20 66 72 61  ssary script fra
63e0: 67 6d 65 6e 74 73 20 66 6f 72 0d 0a 20 20 20 20  gments for..
63f0: 20 20 23 20 20 20 20 20 20 20 65 61 63 68 20 6f    #       each o
6400: 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ne...      #..
6410: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 22      set result "
6420: 22 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61  "....      forea
6430: 63 68 20 76 61 72 4e 61 6d 65 20 24 76 61 72 4e  ch varName $varN 6440: 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 6450: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 6460: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 71 75 61 E: Build the qua 6470: 6c 69 66 69 65 64 20 67 6c 6f 62 61 6c 20 76 61 lified global va 6480: 72 69 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 riable name... 6490: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 64a0: 20 73 65 74 20 66 75 6c 6c 56 61 72 4e 61 6d 65 set fullVarName 64b0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 3a 3a 20 [appendArgs :: 64c0: 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20$varName]....
64d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
64e0: 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65  # NOTE: Does the
64f0: 20 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 20   variable exist
6500: 69 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65  in this interpre
6510: 74 65 72 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 20  ter context?..
6520: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
6530: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
6540: 73 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 7d  s $fullVarName]} 6550: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 6560: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 6570: 23 20 4e 4f 54 45 3a 20 41 70 70 65 6e 64 20 61 # NOTE: Append a 6580: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 script fragment 6590: 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 74 to the result t 65a0: 68 61 74 20 77 69 6c 6c 20 63 6f 72 72 65 63 74 hat will correct 65b0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 ly.. # 65c0: 20 20 20 20 20 20 63 6f 70 79 20 61 6e 79 20 63 copy any c 65d0: 6f 6e 74 61 69 6e 65 64 20 76 61 6c 75 65 20 74 ontained value t 65e0: 6f 20 61 6e 6f 74 68 65 72 20 69 6e 74 65 72 70 o another interp 65f0: 72 65 74 65 72 20 63 6f 6e 74 65 78 74 2e 0d 0a reter context... 6600: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 6610: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 append re 6620: 73 75 6c 74 20 5c 6e 20 22 73 65 74 20 22 20 24 sult \n "set "$
6630: 66 75 6c 6c 56 61 72 4e 61 6d 65 20 22 20 5c 7b  fullVarName " \{
6640: 22 20 5b 73 65 74 20 24 66 75 6c 6c 56 61 72 4e  " [set $fullVarN 6650: 61 6d 65 5d 20 5c 7d 0d 0a 20 20 20 20 20 20 20 ame] \}.. 6660: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 6670: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 6680: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 72 65 73 NOTE: If the res 6690: 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 ult contains one 66a0: 20 6f 72 20 6d 6f 72 65 20 73 63 72 69 70 74 20 or more script 66b0: 66 72 61 67 6d 65 6e 74 73 2c 20 61 70 70 65 6e fragments, appen 66c0: 64 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 d a.. # 66d0: 20 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20 20 20 newline... 66e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 66f0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
6700: 72 65 73 75 6c 74 5d 20 3e 20 30 7d 20 74 68 65  result] > 0} the
6710: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70  n {..        app
6720: 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 0d 0a 20  end result \n..
6730: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
6740: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a  return $result.. 6750: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 6760: 6f 63 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50 oc getAppDomainP 6770: 72 65 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69 reamble { {prefi 6780: 78 20 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22 x ""} {suffix "" 6790: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 67a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 67b0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 is procedure ret 67c0: 75 72 6e 73 20 61 20 74 65 73 74 20 73 65 74 75 urns a test setu 67d0: 70 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e p script fragmen 67e0: 74 20 73 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a t suitable for.. 67f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76 # ev 6800: 61 6c 75 61 74 69 6f 6e 20 62 79 20 61 6e 20 69 aluation by an i 6810: 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74 nterpreter creat 6820: 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65 ed in an isolate 6830: 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 d application.. 6840: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 6f 6d # dom 6850: 61 69 6e 2e 20 20 54 68 65 20 73 63 72 69 70 74 ain. The script 6860: 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 fragment being 6870: 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 returned will be 6880: 20 73 75 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a surrounded by.. 6890: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 68a0: 65 20 70 72 65 66 69 78 20 61 6e 64 20 73 75 66 e prefix and suf 68b0: 66 69 78 20 22 73 63 72 69 70 74 20 66 72 61 67 fix "script frag 68c0: 6d 65 6e 74 73 22 20 73 70 65 63 69 66 69 65 64 ments" specified 68d0: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d by our caller,. 68e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 68f0: 66 20 61 6e 79 2e 20 20 54 68 65 20 65 6e 74 69 f any. The enti 6900: 72 65 20 73 63 72 69 70 74 20 62 65 69 6e 67 20 re script being 6910: 72 65 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 returned will be 6920: 20 73 75 62 73 74 69 74 75 74 65 64 20 76 69 61 substituted via 6930: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 6940: 5b 73 75 62 73 74 5d 2c 20 69 6e 20 74 68 65 20 [subst], in the 6950: 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 context of our c 6960: 61 6c 6c 65 72 2c 20 62 65 66 6f 72 65 20 62 65 aller, before be 6970: 69 6e 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 ing returned... 6980: 20 20 20 20 20 23 20 20 20 20 20 20 20 54 68 69 # Thi 6990: 73 20 73 74 65 70 20 69 73 20 6e 65 63 65 73 73 s step is necess 69a0: 61 72 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 ary so that some 69b0: 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 65 78 74 limited context 69c0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 information,.. 69d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 69 # pri 69e0: 6d 61 72 69 6c 79 20 72 65 6c 61 74 65 64 20 74 marily related t 69f0: 6f 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 o the testing di 6a00: 72 65 63 74 6f 72 69 65 73 2c 20 63 61 6e 20 62 rectories, can b 6a10: 65 20 74 72 61 6e 73 66 65 72 72 65 64 0d 0a 20 e transferred.. 6a20: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to 6a30: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 the interpreter 6a40: 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 in the isolated 6a50: 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 application doma 6a60: 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20 in, making it.. 6a70: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 62 6c # abl 6a80: 65 20 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c e to successfull 6a90: 79 20 72 75 6e 20 74 65 73 74 73 20 74 68 61 74 y run tests that 6aa0: 20 72 65 71 75 69 72 65 20 6f 6e 65 20 6f 72 20 require one or 6ab0: 6d 6f 72 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 more of the.. 6ac0: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 # files 6ad0: 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 in one of the t 6ae0: 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 esting directori 6af0: 65 73 2e 20 20 43 61 6c 6c 65 72 73 20 73 68 6f es. Callers sho 6b00: 75 6c 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20 uld keep in.. 6b10: 20 20 20 23 20 20 20 20 20 20 20 6d 69 6e 64 20 # mind 6b20: 74 68 61 74 20 74 68 65 20 74 65 73 74 20 73 63 that the test sc 6b30: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 ript fragment be 6b40: 69 6e 67 20 72 65 74 75 72 6e 65 64 20 63 61 6e ing returned can 6b50: 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20 not rely on.. 6b60: 20 20 20 23 20 20 20 20 20 20 20 61 6e 79 20 73 # any s 6b70: 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 72 cript library pr 6b80: 6f 63 65 64 75 72 65 73 20 74 68 61 74 20 61 72 ocedures that ar 6b90: 65 20 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62 e not provided b 6ba0: 79 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 y the Eagle.. 6bb0: 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 # libra 6bc0: 72 79 20 70 61 63 6b 61 67 65 20 28 69 2e 65 2e ry package (i.e. 6bd0: 20 22 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20 "init.eagle"), 6be0: 69 6e 63 6c 75 64 69 6e 67 20 74 68 6f 73 65 20 including those 6bf0: 70 72 6f 76 69 64 65 64 20 62 79 0d 0a 20 20 20 provided by.. 6c00: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 45 # the E 6c10: 61 67 6c 65 20 74 65 73 74 20 70 61 63 6b 61 67 agle test packag 6c20: 65 2c 20 75 6e 6c 65 73 73 20 74 68 65 20 66 69 e, unless the fi 6c30: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 le containing th 6c40: 65 6d 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 em is loaded.. 6c50: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 # manu 6c60: 61 6c 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f 74 ally via some ot 6c70: 68 65 72 20 6d 65 63 68 61 6e 69 73 6d 20 28 65 her mechanism (e 6c80: 2e 67 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 .g. by including 6c90: 20 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 appropriate.. 6ca0: 20 20 20 20 23 20 20 20 20 20 20 20 5b 70 61 63 # [pac 6cb0: 6b 61 67 65 20 72 65 71 75 69 72 65 5d 20 6f 72 kage require] or 6cc0: 20 5b 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e [source] comman 6cd0: 64 73 20 69 6e 20 74 68 65 20 70 72 65 66 69 78 ds in the prefix 6ce0: 20 6f 72 20 73 75 66 66 69 78 0d 0a 20 20 20 20 or suffix.. 6cf0: 20 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74 # script 6d00: 20 66 72 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c fragments). Al 6d10: 73 6f 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 so, all variable 6d20: 20 72 65 66 65 72 65 6e 63 65 73 20 61 6e 64 20 references and 6d30: 61 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20 20 all nested.. 6d40: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e # comman 6d50: 64 73 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69 ds (i.e. those i 6d60: 6e 20 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 n square bracket 6d70: 73 29 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 s) contained in 6d80: 74 68 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20 the final.. 6d90: 20 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20 # script 6da0: 66 72 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e fragment will en 6db0: 64 20 75 70 20 62 65 69 6e 67 20 65 76 61 6c 75 d up being evalu 6dc0: 61 74 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 ated in the cont 6dd0: 65 78 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 ext of the.. 6de0: 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 69 6e # callin 6df0: 67 20 69 6e 74 65 72 70 72 65 74 65 72 20 61 6e g interpreter an 6e00: 64 20 6e 6f 74 20 74 68 65 20 74 61 72 67 65 74 d not the target 6e10: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 interpreter cre 6e20: 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 ated in the.. 6e30: 20 20 20 23 20 20 20 20 20 20 20 69 73 6f 6c 61 # isola 6e40: 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 ted application 6e50: 64 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74 68 domain unless th 6e60: 65 20 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61 e dollar signs a 6e70: 6e 64 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20 20 nd/or square.. 6e80: 20 20 20 20 23 20 20 20 20 20 20 20 62 72 61 63 # brac 6e90: 6b 65 74 73 20 61 72 65 20 73 70 65 63 69 61 6c kets are special 6ea0: 6c 79 20 71 75 6f 74 65 64 20 77 69 74 68 20 62 ly quoted with b 6eb0: 61 63 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20 ackslashes... 6ec0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 6ed0: 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c rn [uplevel 1 [l 6ee0: 69 73 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e ist subst [appen 6ef0: 64 41 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d dArgs$prefix {.
6f00: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
6f10: 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e  sRuntimeOption n
6f20: 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ative]} then {..
6f30: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
6f40: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
6f50: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 41 64  ter.GetActive Ad
6f60: 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e  dRuntimeOption n
6f70: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 7d  ative..        }
6f80: 0d 0a 20 20 20 20 20 20 7d 20 5b 67 65 74 54 65  ..      } [getTe
6f90: 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d  stOverridesPream
6fa0: 62 6c 65 20 5b 6c 69 73 74 20 70 61 74 68 20 74  ble [list path t
6fb0: 65 73 74 5f 63 68 61 6e 6e 65 6c 5d 5d 20 24 73  est_channel]] $s 6fc0: 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 20 20 7d 0d uffix]]].. }. 6fd0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 .... proc try 6fe0: 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20 7b CopyBinaryFile { 6ff0: 20 66 69 6c 65 4e 61 6d 65 20 7b 6e 65 77 46 69 fileName {newFi 7000: 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a leName ""} } {.. 7010: 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 set source 7020: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e FileName [getBin 7030: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c aryFileName$fil
7040: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
7050: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74  if {![file exist
7060: 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  s $sourceFileNam 7070: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 7080: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
7090: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
70a0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
70b0: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
70c0: 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e 61 72  ed copying binar
70d0: 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72  y file \"" $sour 70e0: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 ceFileName \.. 70f0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 "\", i 7100: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist 7110: 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n"].... 7120: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d return.. }. 7130: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st 7140: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 ring length$new
7150: 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  FileName] > 0} t
7160: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
7170: 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  et targetFileNam
7180: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  e [getBuildFileN
7190: 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65  ame $newFileName 71a0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 71b0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 {.. set t 71c0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 argetFileName [g 71d0: 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName 71e0: 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
71f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
7200: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
7210: 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f           file co
7220: 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63  py -force $sourc 7230: 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 eFileName$targe
7240: 74 46 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30  tFileName}] == 0
7250: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
7260: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 7270: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 7280: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 7290: 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 "---- copied 72a0: 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f 6d binary file from 72b0: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 \""$sourceFile
72c0: 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20  Name "\" to \""
72d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24  \..            $72e0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c targetFileName \ 72f0: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c "\n].. } el 7300: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp 7310: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
7320: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
7330: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
7340: 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63  ---- failed to c
7350: 6f 70 79 20 62 69 6e 61 72 79 20 66 69 6c 65 20  opy binary file
7360: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65  from \"" $source 7370: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 FileName \.. 7380: 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c "\" to \ 7390: 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 ""$targetFileNa
73a0: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  me \"\n]..
73b0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
73c0: 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 75 69   proc tryCopyBui
73d0: 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d  ldFile { fileNam
73e0: 65 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22  e {newFileName "
73f0: 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  "} } {..      se
7400: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65  t sourceFileName
7410: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
7420: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  me $fileName]... 7430: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c . if {![fil 7440: 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 e exists$source
7450: 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  FileName]} then
7460: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
7470: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 7480: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 7490: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 74a0: 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e - skipped copyin 74b0: 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 g build file \"" 74c0: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
74d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
74e0: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  "\", it does not
74f0: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20   exist\n"]....
7500: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20        return..
7510: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
7520: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
7530: 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20  h $newFileName] 7540: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 7550: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 set targetF 7560: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 ileName [getBina 7570: 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 ryFileName$newF
7580: 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  ileName]..
7590: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
75a0: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65    set targetFile
75b0: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46  Name [getBinaryF
75c0: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam 75d0: 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 e].. }.... 75e0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 75f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 7600: 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 file copy -forc 7610: 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d e$sourceFileNam
7620: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  e $targetFileNam 7630: 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b e}] == 0} then { 7640: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 7650: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
7660: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
7670: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
7680: 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69   copied build fi
7690: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou 76a0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 rceFileName "\" 76b0: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 to \"" \.. 76c0: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c$targetFil
76d0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
76e0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
76f0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 7700: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 7710: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 7720: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c "---- fail 7730: 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c 64 ed to copy build 7740: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 file from \""$
7750: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c  sourceFileName \
7760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c  ..            "\
7770: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74  " to \"" $target 7780: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a FileName \"\n].. 7790: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 77a0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 ... proc tryD 77b0: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 77c0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a { fileName } {.. 77d0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 77e0: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c me [getBinaryFil 77f0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d eName$fileName]
7800: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
7810: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 7820: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 7830: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
7840: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
7850: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
7860: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
7870: 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20  kipped deleting
7880: 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20  binary file \""
7890: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  $fileName \.. 78a0: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 "\", it 78b0: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c does not exist\ 78c0: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 n"].... r 78d0: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a eturn.. }.. 78e0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 78f0: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 ch {file delete 7900: 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30$fileName}] == 0
7910: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
7920: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 7930: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 7940: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 7950: 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 "---- deleted 7960: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 binary file \"" 7970: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d$fileName \"\n]
7980: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
7990: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
79a0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 79b0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 79c0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 79d0: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 79e0: 65 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 e binary file \" 79f0: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e "$fileName \"\n
7a00: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
7a10: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
7a20: 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c  ryDeleteBuildFil
7a30: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b  e { fileName } {
7a40: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
7a50: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69  Name [getBuildFi
7a60: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 7a70: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 ].... if {! 7a80: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
7a90: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
7aa0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $7ab0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 7ac0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 7ad0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 7ae0: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting 7af0: 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 build file \"" 7b00: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
7b10: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74           "\", it
7b20: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
7b30: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  n"]....        r
7b40: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a  eturn..      }..
7b50: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
7b60: 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20  ch {file delete
7b70: 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30  $fileName}] == 0 7b80: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 7b90: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
7ba0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
7bb0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
7bc0: 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64     "---- deleted
7bd0: 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20   build file \""
7be0: 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  $fileName \"\n]. 7bf0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 7c00: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
7c10: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
7c20: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
7c30: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
7c40: 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65  failed to delete
7c50: 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20   build file \""
7c60: 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  $fileName \"\n]. 7c70: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 7c80: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 .... proc try 7c90: 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b 20 66 CopyAssembly { f 7ca0: 69 6c 65 4e 61 6d 65 20 7b 70 64 62 20 74 72 75 ileName {pdb tru 7cb0: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 e} } {.. tr 7cc0: 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24 yCopyBuildFile$
7cd0: 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20  fileName....
7ce0: 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e    if {$pdb} then 7cf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 43 {.. tryC 7d00: 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 5b 61 70 opyBuildFile [ap 7d10: 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 72 pendArgs [file r 7d20: 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d ootname$fileNam
7d30: 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20 20 20 20  e] .pdb]..
7d40: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
7d50: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 41   proc tryDeleteA
7d60: 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61  ssembly { fileNa
7d70: 6d 65 20 7b 70 64 62 20 74 72 75 65 7d 20 7d 20  me {pdb true} }
7d80: 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 6c 65  {..      tryDele
7d90: 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69  teBinaryFile $fi 7da0: 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20 20 20 leName.... 7db0: 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b if {$pdb} then {
7dc0: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44 65 6c  ..        tryDel
7dd0: 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 5b 61  eteBinaryFile [a
7de0: 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20  ppendArgs [file
7df0: 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61  rootname $fileNa 7e00: 6d 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20 20 20 me] .pdb].. 7e10: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 7e20: 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 41 73 proc tryLoadAs 7e30: 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d sembly { fileNam 7e40: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 e } {.. set 7e50: 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 fileName [getBi 7e60: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
7e70: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20  leName]....
7e80: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 65 74   if {[catch {set
7e90: 20 61 73 73 65 6d 62 6c 79 20 5c 0d 0a 20 20 20   assembly \..
7ea0: 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65             [obje
7eb0: 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 70  ct load -loadtyp
7ec0: 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 24 66  e File -alias $f 7ed0: 69 6c 65 4e 61 6d 65 5d 7d 5d 20 3d 3d 20 30 7d ileName]}] == 0} 7ee0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 7ef0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7f00: 54 45 3a 20 4e 6f 77 2c 20 61 64 64 20 74 68 65 TE: Now, add the 7f10: 20 6e 65 63 65 73 73 61 72 79 20 74 65 73 74 20 necessary test 7f20: 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 constraint... 7f30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 7f40: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 66 addConstraint [f 7f50: 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 ile rootname [fi 7f60: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
7f70: 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  e]]....        #
7f80: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
7f90: 3a 20 47 72 61 62 20 74 68 65 20 69 6d 61 67 65  : Grab the image
7fa0: 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e   runtime version
7fb0: 20 66 72 6f 6d 20 74 68 65 20 61 73 73 65 6d 62   from the assemb
7fc0: 6c 79 20 62 65 63 61 75 73 65 0d 0a 20 20 20 20  ly because..
7fd0: 20 20 20 20 23 20 20 20 20 20 20 20 73 65 76 65      #       seve
7fe0: 72 61 6c 20 74 65 73 74 73 20 72 65 6c 79 20 6f  ral tests rely o
7ff0: 6e 20 69 74 20 68 61 76 69 6e 67 20 61 20 63 65  n it having a ce
8000: 72 74 61 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 20  rtain value...
8010: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
8020: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b   addConstraint [
8030: 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65  appendArgs [file
8040: 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d   tail $fileName] 8050: 20 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 _ \.. 8060: 20 20 5b 24 61 73 73 65 6d 62 6c 79 20 49 6d 61 [$assembly Ima
8070: 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
8080: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  ]]....        #.
8090: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
80a0: 20 52 65 74 75 72 6e 20 74 68 65 20 66 75 6c 6c   Return the full
80b0: 20 70 61 74 68 20 6f 66 20 74 68 65 20 6c 6f 61   path of the loa
80c0: 64 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  ded file...
80d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
80e0: 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  turn $fileName.. 80f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 8100: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 8110: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 }..... proc i 8120: 73 53 51 4c 69 74 65 52 65 61 64 79 20 7b 7d 20 sSQLiteReady {} 8130: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 8140: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 # NOTE: This p 8150: 72 6f 63 65 64 75 72 65 20 6d 75 73 74 20 72 65 rocedure must re 8160: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e turn non-zero on 8170: 6c 79 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 ly if the SQLite 8180: 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 23 native.. # 8190: 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 20 61 library a 81a0: 6e 64 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 nd the System.Da 81b0: 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 ta.SQLite manage 81c0: 64 20 61 73 73 65 6d 62 6c 79 20 61 72 65 20 6c d assembly are l 81d0: 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 oaded.. # 81e0: 20 20 20 20 20 61 6e 64 20 72 65 61 64 79 20 66 and ready f 81f0: 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 or use by the te 8200: 73 74 20 73 75 69 74 65 2e 20 20 43 75 72 72 65 st suite. Curre 8210: 6e 74 6c 79 2c 20 74 68 69 73 20 70 72 6f 63 65 ntly, this proce 8220: 64 75 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 dure.. # 8230: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 63 61 should be ca 8240: 6c 6c 65 64 20 6f 6e 6c 79 20 61 66 74 65 72 20 lled only after 8250: 74 68 65 20 5b 74 72 79 4c 6f 61 64 41 73 73 65 the [tryLoadAsse 8260: 6d 62 6c 79 5d 20 70 72 6f 63 65 64 75 72 65 20 mbly] procedure 8270: 68 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 has.. # 8280: 20 20 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 been called t 8290: 6f 20 70 72 6f 62 65 20 66 6f 72 20 74 68 65 20 o probe for the 82a0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 82b0: 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d te managed assem 82c0: 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 bly.. # 82d0: 20 20 20 61 6e 64 20 74 68 65 20 5b 63 68 65 63 and the [chec 82e0: 6b 46 6f 72 53 51 4c 69 74 65 5d 20 70 72 6f 63 kForSQLite] proc 82f0: 65 64 75 72 65 20 68 61 73 20 62 65 65 6e 20 63 edure has been c 8300: 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66 alled to probe f 8310: 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 or.. # 8320: 20 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 the SQLite nat 8330: 69 76 65 20 6c 69 62 72 61 72 79 3b 20 6f 74 68 ive library; oth 8340: 65 72 77 69 73 65 2c 20 74 68 69 73 20 70 72 6f erwise, this pro 8350: 63 65 64 75 72 65 20 77 69 6c 6c 20 73 69 6d 70 cedure will simp 8360: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ly.. # 8370: 20 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 always return 8380: 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a zero... #.. 8390: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 return [ex 83a0: 70 72 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 pr {[haveConstra 83b0: 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e int System.Data. 83c0: 53 51 4c 69 74 65 5d 20 26 26 20 5c 0d 0a 20 20 SQLite] && \.. 83d0: 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e [haveCon 83e0: 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 5d 7d straint SQLite]} 83f0: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 8400: 20 70 72 6f 63 20 6d 61 74 63 68 4d 61 63 68 69 proc matchMachi 8410: 6e 65 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20 ne { platform } 8420: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 8430: 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 # NOTE: An emp 8440: 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 ty string for th 8450: 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73 e platform means 8460: 20 74 68 61 74 20 74 68 65 20 62 75 69 6c 64 20 that the build 8470: 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20 is not.. # 8480: 20 20 20 20 20 20 5b 70 72 69 6d 61 72 69 6c 79 [primarily 8490: 5d 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 ] a native build 84a0: 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 ; therefore, it 84b0: 61 6c 77 61 79 73 20 6d 61 74 63 68 65 73 2e 0d always matches.. 84c0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 84d0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 84e0: 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d th$platform] ==
84f0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
8500: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d      return true.
8510: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
8520: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
8530: 45 3a 20 44 6f 65 73 20 74 68 65 20 73 70 65 63  E: Does the spec
8540: 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d  ified platform m
8550: 61 74 63 68 20 75 70 20 74 6f 20 74 68 65 20 63  atch up to the c
8560: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d  urrent process?.
8570: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
8580: 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71  if {$platform eq 8590: 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 [machineToPlatf 85a0: 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 orm$::tcl_platf
85b0: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74  orm(machine)]} t
85c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
85d0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
85e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
85f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
8600: 65 20 73 70 65 63 69 66 69 65 64 20 70 6c 61 74  e specified plat
8610: 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61  form does not ma
8620: 74 63 68 20 75 70 20 77 69 74 68 20 74 68 65 20  tch up with the
8630: 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..
8640: 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20  #       for the
8650: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
8660: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8670: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20   return false..
8680: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
8690: 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
86a0: 42 75 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c  Builds { channel
86b0: 20 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20   {select false}
86c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
86d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
86e0: 6b 20 66 6f 72 20 65 76 65 72 79 20 70 6f 73 73  k for every poss
86f0: 69 62 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 69  ible valid combi
8700: 6e 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73  nation of values
8710: 20 75 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 20   used when..
8720: 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 69    #       locati
8730: 6e 67 20 6f 75 74 20 74 68 65 20 62 75 69 6c 64  ng out the build
8740: 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72   output director
8750: 79 2c 20 73 68 6f 77 69 6e 67 20 65 61 63 68 20  y, showing each
8760: 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20  available..
8770: 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 76   #       build v
8780: 61 72 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74  ariation along t
8790: 68 65 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 23  he way...      #
87a0: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
87b0: 6e 61 74 69 76 65 20 5b 6c 69 73 74 20 66 61 6c  native [list fal
87c0: 73 65 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20  se true] {..
87d0: 20 20 20 20 66 6f 72 65 61 63 68 20 79 65 61 72      foreach year
87e0: 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 73 5d   [getBuildYears]
87f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f   {..          fo
8800: 72 65 61 63 68 20 63 6f 6e 66 69 67 75 72 61 74  reach configurat
8810: 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e  ion [getBuildCon
8820: 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a  figurations] {..
8830: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
8840: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
8850: 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68  E: Figure out th
8860: 65 20 65 66 66 65 63 74 69 76 65 20 62 75 69 6c  e effective buil
8870: 64 20 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69  d platform.  Thi
8880: 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  s is..
8890: 20 20 23 20 20 20 20 20 20 20 62 61 73 65 64 20    #       based
88a0: 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  on whether or no
88b0: 74 20 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20  t a [primarily]
88c0: 6e 61 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 20  native build..
88d0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
88e0: 20 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e    is being used.
88f0: 20 20 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79    For [primarily
8900: 5d 20 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69  ] non-native bui
8910: 6c 64 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lds,..
8920: 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20 77    #       this w
8930: 69 6c 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 20  ill be an empty
8940: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  string...
8950: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
8960: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d      set platform
8970: 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f   [getBuildPlatfo
8980: 72 6d 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20  rm $native].... 8990: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 89a0: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
89b0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
89c0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
89d0: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74  hecking for Syst
89e0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62  em.Data.SQLite b
89f0: 75 69 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 5c  uild \"" [expr \
8a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
8a10: 20 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61    {$native ? "na 8a20: 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 tive/" : ""}] [e 8a30: 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e xpr {[string len 8a40: 67 74 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 gth \.. 8a50: 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d$platform
8a60: 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41  ] > 0 ? [appendA
8a70: 72 67 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d  rgs $platform /] 8a80: 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d : ""}]$year \.
8a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
8aa0: 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f   / $configuratio 8ab0: 6e 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 n "\"... "].... 8ac0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 8ad0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 8ae0: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c : Build the full 8af0: 79 20 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 y qualified dire 8b00: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 ctory where the 8b10: 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 necessary.. 8b20: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 8b30: 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 omponents for Sy 8b40: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 8b50: 20 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 should be found 8b60: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 8b70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 8b80: 74 20 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 t directory [joi 8b90: 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 nBuildDirectory 8ba0: 24 6e 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20$native \..
8bb0: 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
8bc0: 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72  uildBaseDirector
8bd0: 79 5d 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f  y] $year$platfo
8be0: 72 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f  rm $configuratio 8bf0: 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n].... 8c00: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 8c10: 20 23 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 # NOTE: Do the 8c20: 6e 65 63 65 73 73 61 72 79 20 66 69 6c 65 73 20 necessary files 8c30: 65 78 69 73 74 3f 20 20 43 75 72 72 65 6e 74 6c exist? Currentl 8c40: 79 2c 20 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 y, no other step 8c50: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 s.. # 8c60: 20 20 20 20 20 20 20 61 72 65 20 74 61 6b 65 6e are taken 8c70: 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 73 20 to verify this 8c80: 62 75 69 6c 64 20 69 73 20 61 63 74 75 61 6c 6c build is actuall 8c90: 79 20 76 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 y viable... 8ca0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8cb0: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 42 75 69 if {[isBui 8cc0: 6c 64 41 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 ldAvailable$nat
8cd0: 69 76 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d  ive $directory]} 8ce0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 8cf0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8d00: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 8d10: 57 68 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 When in "select" 8d20: 20 6d 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 mode, automatic 8d30: 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 ally select the 8d40: 66 69 72 73 74 0d 0a 20 20 20 20 20 20 20 20 20 first.. 8d50: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 76 61 # ava 8d60: 69 6c 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 ilable build of 8d70: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 8d80: 74 65 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 te and then retu 8d90: 72 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rn.. 8da0: 20 20 23 20 20 20 20 20 20 20 69 6d 6d 65 64 69 # immedi 8db0: 61 74 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 ately... 8dc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 8dd0: 20 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 if {$sele
8de0: 63 74 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68  ct && [matchMach
8df0: 69 6e 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20  ine $platform]} 8e00: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 8e10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8e20: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 8e30: 45 3a 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 E: Manually over 8e40: 72 69 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69 ride all the bui 8e50: 6c 64 20 64 69 72 65 63 74 6f 72 79 20 73 65 6c ld directory sel 8e60: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 ection.. 8e70: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 8e80: 72 65 6c 61 74 65 64 20 74 65 73 74 20 73 65 74 related test set 8e90: 74 69 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74 tings in order t 8ea0: 6f 20 66 6f 72 63 65 20 74 68 69 73 20 62 75 69 o force this bui 8eb0: 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ld.. 8ec0: 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 53 # of S 8ed0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 8ee0: 65 20 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 e to be used... 8ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 # 8f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 8f10: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 8f20: 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 8f30: 63 74 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 ctive [expr {$na
8f40: 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20  tive ? \..
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
8f60: 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22  ddRuntimeOption"
8f70: 20 3a 20 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d   : "RemoveRuntim
8f80: 65 4f 70 74 69 6f 6e 22 7d 5d 20 20 6e 61 74 69  eOption"}]  nati
8f90: 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ve....
8fa0: 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74        set ::test
8fb0: 5f 79 65 61 72 20 24 79 65 61 72 0d 0a 20 20 20  _year $year.. 8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set 8fd0: 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d ::test_platform 8fe0: 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20$platform..
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
9000: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61  ::test_configura
9010: 74 69 6f 6e 20 24 63 6f 6e 66 69 67 75 72 61 74  tion $configurat 9020: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ion.... 9030: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
9040: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
9050: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
9060: 20 20 20 20 20 20 20 20 20 22 79 65 73 2c 20 73           "yes, s
9070: 65 6c 65 63 74 65 64 20 28 22 20 5b 65 78 70 72  elected (" [expr
9080: 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74   {$native ? "nat 9090: 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a ive/" : ""}] \.. 90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 90b0: 20 20 20 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 [expr {[stri 90c0: 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
90d0: 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65  orm] > 0 ? [appe
90e0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
90f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70                $p 9100: 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d latform /] : ""} 9110: 5d 20 24 79 65 61 72 20 2f 20 24 63 6f 6e 66 69 ]$year / $confi 9120: 67 75 72 61 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d guration ")\n"]. 9130: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 9140: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 9150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 } 9160: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 9170: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
9180: 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20  hannel yes\n..
9190: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
91a0: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
91b0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
91c0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 91d0: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 l no\n.. 91e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 91f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 9200: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 9210: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. 9220: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 9230: 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 checkForSQLiteR 9240: 65 6c 65 61 73 65 73 20 7b 20 63 68 61 6e 6e 65 eleases { channe 9250: 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d l {select false} 9260: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 9270: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 9280: 63 6b 20 66 6f 72 20 70 61 73 74 20 72 65 6c 65 ck for past rele 9290: 61 73 65 73 20 6f 66 20 53 79 73 74 65 6d 2e 44 ases of System.D 92a0: 61 74 61 2e 53 51 4c 69 74 65 20 69 6e 20 74 68 ata.SQLite in th 92b0: 65 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 e directory.. 92c0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 # conta 92d0: 69 6e 65 64 20 69 6e 20 74 68 65 20 22 53 79 73 ined in the "Sys 92e0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 tem.Data.SQLite" 92f0: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 environment var 9300: 69 61 62 6c 65 2c 20 69 66 0d 0a 20 20 20 20 20 iable, if.. 9310: 20 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 # present 9320: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 9330: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 9340: 74 73 20 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e ts ::env(System. 9350: 44 61 74 61 2e 53 51 4c 69 74 65 29 5d 20 26 26 Data.SQLite)] && 9360: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 9370: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
9380: 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e  env(System.Data.
9390: 53 51 4c 69 74 65 29 5d 20 3e 20 30 7d 20 74 68  SQLite)] > 0} th
93a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
93b0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
93c0: 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79   Build the fully
93d0: 20 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 63   qualified direc
93e0: 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 6e  tory where the n
93f0: 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20  ecessary..
9400: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e    #       compon
9410: 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e  ents for System.
9420: 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75  Data.SQLite shou
9430: 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20  ld be found...
9440: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9450: 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b   set directory [
9460: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
9470: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
9480: 20 20 20 20 20 20 20 20 20 20 24 3a 3a 65 6e 76            $::env 9490: 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c (System.Data.SQL 94a0: 69 74 65 29 20 5b 67 65 74 52 65 6c 65 61 73 65 ite) [getRelease 94b0: 56 65 72 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 Version]]].... 94c0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
94d0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
94e0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
94f0: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
9500: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  or System.Data.S
9510: 51 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22  QLite release \"
9520: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
9530: 20 24 64 69 72 65 63 74 6f 72 79 20 22 5c 22 2e   $directory "\". 9540: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 .. "].... 9550: 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 if {[isReleaseA 9560: 76 61 69 6c 61 62 6c 65 20 24 64 69 72 65 63 74 vailable$direct
9570: 6f 72 79 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74  ory platform]} t
9580: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
9590: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
95a0: 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d  gth $platform] = 95b0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 95c0: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 set pla 95d0: 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 tform unknown.. 95e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 95f0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c if {$sel
9600: 65 63 74 20 26 26 20 5b 6d 61 74 63 68 4d 61 63  ect && [matchMac
9610: 68 69 6e 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d  hine $platform]} 9620: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 9630: 20 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 set ::build 9640: 5f 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 _directory$dire
9650: 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20  ctory....
9660: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 9670: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 9680: 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 "yes, selected ( 9690: 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e "$platform ")\n
96a0: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  "]....
96b0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
96c0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
96d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
96e0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 96f0: 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 ppendArgs "yes ( 9700: 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e "$platform ")\n
9710: 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  "]..          }.
9720: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
9730: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
9740: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n 9750: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f .... fo 9760: 72 65 61 63 68 20 70 61 74 68 20 5b 6c 73 6f 72 reach path [lsor 9770: 74 20 2d 64 65 63 72 65 61 73 69 6e 67 20 5b 66 t -decreasing [f 9780: 69 6c 65 20 6c 69 73 74 20 24 64 69 72 65 63 74 ile list$direct
9790: 6f 72 79 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20  ory *]] {..
97a0: 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65         if {[file
97b0: 20 65 78 69 73 74 73 20 24 70 61 74 68 5d 20 26   exists $path] & 97c0: 26 20 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 & [file isdirect 97d0: 6f 72 79 20 24 70 61 74 68 5d 7d 20 74 68 65 6e ory$path]} then
97e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
97f0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 9800: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 9810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9820: 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 "---- checking 9830: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 for System.Data 9840: 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 73 65 20 .SQLite release 9850: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 9860: 20 20 20 20 20 20 20 20 20 24 70 61 74 68 20 22$path "
9870: 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20  \"... "]....
9880: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69            if {[i
9890: 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c  sReleaseAvailabl
98a0: 65 20 24 70 61 74 68 20 70 6c 61 74 66 6f 72 6d  e $path platform 98b0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 98c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 98d0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 string length$p
98e0: 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74  latform] == 0} t
98f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
9900: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61           set pla
9910: 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20  tform unknown..
9920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
9930: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
9940: 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20      if {$select 9950: 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65 && [matchMachine 9960: 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65$platform]} the
9970: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
9980: 20 20 20 20 20 20 20 73 65 74 20 3a 3a 62 75 69         set ::bui
9990: 6c 64 5f 64 69 72 65 63 74 6f 72 79 20 24 70 61  ld_directory $pa 99a0: 74 68 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 th.... 99b0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
99c0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
99d0: 67 73 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65  gs "yes, selecte
99e0: 64 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22  d (" $platform " 99f0: 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 )\n"].... 9a00: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur 9a10: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 n true.. 9a20: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 9a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 9a40: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
9a50: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
9a60: 79 65 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d  yes (" $platform 9a70: 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ")\n"].. 9a80: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 9a90: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 9aa0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 9ab0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
9ac0: 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20  el no\n..
9ad0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
9ae0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
9af0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
9b00: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
9b10: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $9b20: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 9b30: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 9b40: 20 20 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e "---- environ 9b50: 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 5c 22 ment variable \" 9b60: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 9b70: 74 65 5c 22 20 69 73 20 6e 6f 74 20 22 20 5c 0d te\" is not " \. 9b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 73 65 . "se 9b90: 74 2c 20 73 6b 69 70 70 69 6e 67 20 63 68 65 63 t, skipping chec 9ba0: 6b 20 66 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e k for releases.. 9bb0: 2e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a .\n"].. }.. 9bc0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 .. return f 9bd0: 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a alse.. }..... 9be0: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo 9bf0: 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 7b rSQLiteLibrary { 9c00: 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 channel } {.. 9c10: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
9c20: 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e  el "---- checkin
9c30: 67 20 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72  g for SQLite cor
9c40: 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a  e library... "..
9c50: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
9c60: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
9c70: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
9c80: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
9c90: 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  lic System.Data.
9ca0: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 5c  SQLite.SQLite3 \
9cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
9cc0: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 7d 20 76  SQLiteVersion} v
9cd0: 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68  ersion] == 0} th
9ce0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
9cf0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
9d00: 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65   Check if the re
9d10: 74 75 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77  turned version w
9d20: 61 73 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c  as null.  If so,
9d30: 20 6d 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20   make it easy..
9d40: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
9d50: 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20  o spot...
9d60: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
9d70: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $9d80: 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 version] == 0} t 9d90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 9da0: 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c set version nul 9db0: 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a l.. }.... 9dc0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 9dd0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 9de0: 70 74 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 pt to query the 9df0: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 Fossil source id 9e00: 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 entifier for the 9e10: 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 SQLite.. 9e20: 20 23 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 # core li 9e30: 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 brary... 9e40: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 9e50: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 9e60: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 9e70: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 9e80: 6f 6e 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e onPublic System. 9e90: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi 9ea0: 74 65 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 te3 \.. 9eb0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 6f 75 SQLiteSou 9ec0: 72 63 65 49 64 7d 20 73 6f 75 72 63 65 49 64 5d rceId} sourceId] 9ed0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 9ee0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 9ef0: 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c # NOTE: We fail 9f00: 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 ed to query the 9f10: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 Fossil source id 9f20: 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 entifier... 9f30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9f40: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 set sourceId u 9f50: 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 nknown.. 9f60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 9f70: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 9f80: 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 Check if the ret 9f90: 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 urned Fossil sou 9fa0: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 rce identifier w 9fb0: 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 as null. If.. 9fc0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f # so 9fd0: 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 , make it easy t 9fe0: 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 o spot... 9ff0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { a000: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
a010: 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20  sourceId] == 0}
a020: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a030: 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e    set sourceId n
a040: 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ull..        }..
a050: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
a060: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73       # NOTE: Yes
a070: 2c 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  , the SQLite cor
a080: 65 20 6c 69 62 72 61 72 79 20 61 70 70 65 61 72  e library appear
a090: 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c  s to be availabl
a0a0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
a0b0: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
a0c0: 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20  aint SQLite....
a0d0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch a0e0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg a0f0: 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69 s "yes ("$versi
a100: 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64  on " " $sourceId a110: 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d ")\n"].. } a120: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. a130: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
a140: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  no\n..      }..
a150: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
a160: 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
a170: 49 6e 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65  Interop { channe
a180: 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  l } {..      tpu
a190: 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- a1a0: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S a1b0: 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as a1c0: 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 sembly... ".... a1d0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch a1e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. a1f0: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - a200: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic a210: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL a220: 69 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 ite.SQLite3 \.. a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 Int a240: 65 72 6f 70 56 65 72 73 69 6f 6e 7d 20 76 65 72 eropVersion} ver a250: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then a260: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. a270: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C a280: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 heck if the retu a290: 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 rned version was a2a0: 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d null. If so, m a2b0: 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 ake it easy.. a2c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to a2d0: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 spot... # a2e0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s a2f0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 tring length$ve
a300: 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65  rsion] == 0} the
a310: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
a320: 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d  et version null.
a330: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
a340: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
a350: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
a360: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f   to query the Fo
a370: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
a380: 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53  tifier for the S
a390: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23  QLite..        #
a3a0: 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72         core libr
a3b0: 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ary...        #.
a3c0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
a3d0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
a3e0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
a3f0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
a400: 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61  Public System.Da
a410: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
a420: 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  3 \..
a430: 20 20 20 20 20 49 6e 74 65 72 6f 70 53 6f 75 72       InteropSour
a440: 63 65 49 64 7d 20 73 6f 75 72 63 65 49 64 5d 7d  ceId} sourceId]}
a450: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a460: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
a470: 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65  # NOTE: We faile
a480: 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46  d to query the F
a490: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65  ossil source ide
a4a0: 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20  ntifier...
a4b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
a4c0: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e   set sourceId un
a4d0: 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d  known..        }
a4e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
a4f0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
a500: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75  heck if the retu
a510: 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72  rned Fossil sour
a520: 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61  ce identifier wa
a530: 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20  s null.  If..
a540: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c       #       so,
a550: 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f   make it easy to
a560: 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20   spot...
a570: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
a580: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73  string length $s a590: 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 ourceId] == 0} t a5a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. a5b0: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 set sourceId nu a5c0: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ll.. }... a5d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. a5e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c # NOTE: Yes, a5f0: 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 65 the SQLite inte a600: 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 70 70 rop assembly app a610: 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 69 6c ears to be avail a620: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 able... # a630: 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e .. addCon a640: 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 49 6e straint SQLiteIn a650: 74 65 72 6f 70 0d 0a 0d 0a 20 20 20 20 20 20 20 terop.... a660: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
a670: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73  [appendArgs "yes
a680: 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22   (" $version " " a690: 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22$sourceId ")\n"
a6a0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
a6b0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
a6c0: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n.. a6d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. a6e0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 ... proc chec a6f0: 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 kForSQLiteDefine a700: 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61 6e 6e Constant { chann a710: 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 el name } {.. a720: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
a730: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
a740: 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d  .          "----
a750: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79   checking for Sy
a760: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
a770: 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74   define constant
a780: 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 20   \"" $name \.. a790: 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 22 "\"... " a7a0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ a7b0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. a7c0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in a7d0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non a7e0: 50 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 Public System.Da a7f0: 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite a800: 33 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 3 \.. a810: 20 20 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e DefineConstan a820: 74 73 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 ts} defineConsta a830: 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 nts] == 0} then a840: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ a850: 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d lsearch -exact - a860: 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65 43 6f nocase$defineCo
a870: 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d 20 21  nstants $name] ! a880: 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 = -1} then {.. a890: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. a8a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 # NOTE: Yes a8b0: 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20 63 6f , this define co a8c0: 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61 62 6c nstant was enabl a8d0: 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61 6e 61 ed when the mana a8e0: 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ged.. # a8f0: 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 assembly a900: 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 was compiled... a910: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. a920: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra a930: 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs a940: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 defineConstant.S a950: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit a960: 65 2e 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 e.$name]....
a970: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch a980: 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 annel yes\n.. a990: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. a9a0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
a9b0: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20  channel no\n..
a9c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
a9d0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
a9e0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel a9f0: 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d error\n.. } aa00: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... aa10: 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 6d 65 proc getDateTime aa20: 46 6f 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20 20 20 Format {} {.. aa30: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO aa40: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 TE: This procedu aa50: 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e re simply return aa60: 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 22 20 s the "default" aa70: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 DateTime format aa80: 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 used.. # aa90: 20 20 20 20 62 79 20 74 68 65 20 74 65 73 74 20 by the test aaa0: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d suite... #. aab0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info aac0: 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 74 69 exists ::dateti aad0: 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 5c 0d me_format] && \. aae0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri aaf0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 ng length$::dat
ab00: 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e 20  etime_format] >
ab10: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
ab20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
ab30: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
ab40: 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69   manually overri
ab50: 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72 20 74  dden value for t
ab60: 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d  he DateTime form
ab70: 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  at...        #..
ab80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $ab90: 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 ::datetime_forma aba0: 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 t.. } else abb0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. abc0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re abd0: 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 31 20 turn an ISO8601 abe0: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 DateTime format abf0: 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 compatible with ac00: 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 20 20 SQLite,.. ac10: 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e # System. ac20: 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 6e 64 Data.SQLite, and ac30: 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 72 6f suitable for ro ac40: 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 69 74 und-tripping wit ac50: 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 h the.. # ac60: 20 20 20 20 20 20 20 44 61 74 65 54 69 6d 65 20 DateTime ac70: 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 72 61 class of the fra ac80: 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 69 73 mework. If this ac90: 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e 67 65 value is change aca0: 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 d,.. # acb0: 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 73 74 various test acc0: 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 20 20 s may fail... acd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. ace0: 72 65 74 75 72 6e 20 22 79 79 79 79 2d 4d 4d 2d return "yyyy-MM- acf0: 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 dd HH:mm:ss.FFFF ad00: 46 46 46 4b 22 0d 0a 20 20 20 20 20 20 7d 0d 0a FFFK".. }.. ad10: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr ad20: 6f 63 20 65 6e 75 6d 65 72 61 62 6c 65 54 6f 4c oc enumerableToL ad30: 69 73 74 20 7b 20 65 6e 75 6d 65 72 61 62 6c 65 ist { enumerable ad40: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set ad50: 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d result [list]... ad60: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri ad70: 6e 67 20 6c 65 6e 67 74 68 20 24 65 6e 75 6d 65 ng length$enume
ad80: 72 61 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20 24  rable] == 0 || $ad90: 65 6e 75 6d 65 72 61 62 6c 65 20 65 71 20 22 6e enumerable eq "n ada0: 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ull"} then {.. adb0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
adc0: 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  sult..      }...
add0: 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f  .      object fo
ade0: 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69 74 65  reach -alias ite
adf0: 6d 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 7b 0d  m $enumerable {. ae00: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st ae10: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 69 74 65 ring length$ite
ae20: 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  m] > 0} then {..
ae30: 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
ae40: 64 20 72 65 73 75 6c 74 20 5b 24 69 74 65 6d 20  d result [$item ae50: 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20 20 20 ToString].. ae60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... ae70: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 . return$r
ae80: 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  esult..    }....
ae90: 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63 68 41  .    proc catchA
aea0: 6e 64 52 65 74 75 72 6e 20 7b 20 73 63 72 69 70  ndReturn { scrip
aeb0: 74 20 7b 73 74 61 63 6b 54 72 61 63 65 20 66 61  t {stackTrace fa
aec0: 6c 73 65 7d 20 7b 73 74 72 69 63 74 20 74 72 75  lse} {strict tru
aed0: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
aee0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45  .      # NOTE: E
aef0: 76 61 6c 75 61 74 65 20 74 68 65 20 73 63 72 69  valuate the scri
af00: 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f  pt provided by o
af10: 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 74 68 65  ur caller in the
af20: 69 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20  ir context,..
af30: 20 20 20 23 20 20 20 20 20 20 20 63 61 70 74 75     #       captu
af40: 72 69 6e 67 20 62 6f 74 68 20 74 68 65 20 72 65  ring both the re
af50: 73 75 6c 74 20 61 6e 64 20 74 68 65 20 72 65 74  sult and the ret
af60: 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20  urn code...
af70: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f   #..      set co
af80: 64 65 20 5b 63 61 74 63 68 20 7b 75 70 6c 65 76  de [catch {uplev
af90: 65 6c 20 31 20 24 73 63 72 69 70 74 7d 20 72 65  el 1 $script} re afa0: 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 sult].... # afb0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: afc0: 44 69 64 20 74 68 65 20 73 63 72 69 70 74 20 70 Did the script p afd0: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 rovided by our c afe0: 61 6c 6c 65 72 20 4e 4f 54 20 72 61 69 73 65 20 aller NOT raise aff0: 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 20 20 20 an error?.. b000: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 73 #.. if {$s
b010: 74 72 69 63 74 20 26 26 20 24 63 6f 64 65 20 3d  trict && $code = b020: 3d 20 30 20 7c 7c 20 21 24 73 74 72 69 63 74 20 = 0 || !$strict
b030: 26 26 20 24 63 6f 64 65 20 21 3d 20 31 7d 20 74  && $code != 1} t b040: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # b050: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE b060: 3a 20 53 75 63 63 65 73 73 2e 20 20 52 65 74 75 : Success. Retu b070: 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 rn a list with t b080: 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 he return code a b090: 6e 64 20 74 68 65 20 72 65 73 75 6c 74 2e 0d 0a nd the result... b0a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. b0b0: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list b0c0: 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a$code $result].. b0d0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { b0e0: 24 73 74 61 63 6b 54 72 61 63 65 7d 20 74 68 65$stackTrace} the
b0f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
b100: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
b110: 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61  Failure.  Our ca
b120: 6c 6c 65 72 20 77 61 6e 74 73 20 61 20 66 75 6c  ller wants a ful
b130: 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20 28 69  l stack trace (i
b140: 66 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 0d 0a  f applicable),..
b150: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
b160: 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69  return a list wi
b170: 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f  th the return co
b180: 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c  de and the resul
b190: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20  t verbatim...
b1a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b1b0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f  return [list $co b1c0: 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 de$result]..
b1d0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
b1e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b1f0: 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e  # NOTE: Failure.
b200: 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 64 6f 65    Our caller doe
b210: 73 20 6e 6f 74 20 77 61 6e 74 20 61 20 66 75 6c  s not want a ful
b220: 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20 28 69  l stack trace (i
b230: 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  f..        #
b240: 20 20 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 20     applicable),
b250: 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69  return a list wi
b260: 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f  th the return co
b270: 64 65 2c 20 74 68 65 20 65 72 72 6f 72 0d 0a 20  de, the error..
b280: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
b290: 6f 64 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65  ode for the inte
b2a0: 72 70 72 65 74 65 72 2c 20 61 6e 64 20 74 68 65  rpreter, and the
b2b0: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 75   error message u
b2c0: 70 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20  p to the..
b2d0: 20 20 23 20 20 20 20 20 20 20 70 6f 69 6e 74 20    #       point
b2e0: 77 68 65 72 65 20 74 68 65 20 73 74 61 63 6b 20  where the stack
b2f0: 74 72 61 63 65 20 73 68 6f 75 6c 64 20 73 74 61  trace should sta
b300: 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rt...        #..
b310: 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 64 65          set inde
b320: 78 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20  x [string first
b330: 22 20 20 20 61 74 20 22 20 24 72 65 73 75 6c 74  "   at " $result b340: 5d 3b 20 23 20 48 41 43 4b 3a 20 52 65 6c 69 61 ]; # HACK: Relia b350: 62 6c 65 3f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ble?.... b360: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f return [list$co
b370: 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f 64 65 20  de $::errorCode b380: 5b 65 78 70 72 20 7b 24 69 6e 64 65 78 20 21 3d [expr {$index !=
b390: 20 2d 31 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20   -1 ? \..
b3a0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 74 72 69       [string tri
b3b0: 6d 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20  m [string range
b3c0: 24 72 65 73 75 6c 74 20 30 20 24 69 6e 64 65 78  $result 0$index
b3d0: 5d 5d 20 3a 20 24 72 65 73 75 6c 74 7d 5d 5d 0d  ]] : $result}]]. b3e0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. b3f0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d .... proc com b400: 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 20 7b pileCSharpWith { b410: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 .. te b420: 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62 6f 6c xt memory symbol b430: 73 20 73 74 72 69 63 74 20 72 65 73 75 6c 74 73 s strict results b440: 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 56 61 VarName errorsVa b450: 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 73 0d rName fileNames. b460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 . arg b470: 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a s } {.. #.. b480: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 # NOTE: Si b490: 6e 63 65 20 77 65 20 61 72 65 20 67 6f 69 6e 67 nce we are going b4a0: 20 74 6f 20 75 73 65 20 74 68 69 73 20 6d 65 74 to use this met b4b0: 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 hod name a lot, b4c0: 61 73 73 69 67 6e 20 69 74 20 74 6f 20 61 0d 0a assign it to a.. b4d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 # va b4e0: 72 69 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a 20 riable first... b4f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se b500: 74 20 61 64 64 20 52 65 66 65 72 65 6e 63 65 64 t add Referenced b510: 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 0d 0a Assemblies.Add.. b520: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. b530: 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 # NOTE: Create b540: 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64 the base command b550: 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 6e 64 to evaluate and b560: 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 72 74 add the propert b570: 79 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 20 20 y settings.. b580: 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 61 # that a b590: 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 re almost always b5a0: 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72 20 75 needed by our u b5b0: 6e 69 74 20 74 65 73 74 73 20 28 69 2e 65 2e 20 nit tests (i.e. b5c0: 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 20 20 20 the System.. b5d0: 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 53 79 # and Sy b5e0: 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 6d 62 stem.Data assemb b5f0: 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 2e 0d ly references).. b600: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. b610: 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 set command [lis b620: 74 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 t compileCSharp b630: 24 74 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73$text $memory$s
b640: 79 6d 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72  ymbols $strict r b650: 65 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 esults \.. b660: 20 20 20 20 65 72 72 6f 72 73 20 24 61 64 64 20 errors$add
b670: 53 79 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20  System.dll $add b680: 53 79 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 System.Data.dll b690: 24 61 64 64 20 53 79 73 74 65 6d 2e 58 6d 6c 2e$add System.Xml.
b6a0: 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  dll]....      #.
b6b0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
b6c0: 64 64 20 61 6c 6c 20 74 68 65 20 70 72 6f 76 69  dd all the provi
b6d0: 64 65 64 20 66 69 6c 65 20 6e 61 6d 65 73 20 61  ded file names a
b6e0: 73 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72  s assembly refer
b6f0: 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d  ences...      #.
b700: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66  .      foreach f
b710: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam b720: 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c 61 es {.. la b730: 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 ppend command$a
b740: 64 64 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  dd [getBinaryFil
b750: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d  eName $fileName] b760: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... b770: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO b780: 54 45 3a 20 41 64 64 20 74 68 65 20 65 78 74 72 TE: Add the extr b790: 61 20 61 72 67 75 6d 65 6e 74 73 2c 20 69 66 20 a arguments, if b7a0: 61 6e 79 2c 20 74 6f 20 74 68 65 20 63 6f 6d 6d any, to the comm b7b0: 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 2e and to evaluate. b7c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. b7d0: 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 63 6f eval lappend co b7e0: 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a 0d 0a 20 mmand$args....
b7f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
b800: 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74 68 65 20  NOTE: Alias the
b810: 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 6c 20 72  compiler local r
b820: 65 73 75 6c 74 73 20 61 6e 64 20 65 72 72 6f 72  esults and error
b830: 73 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20 74  s variables to t
b840: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
b850: 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73    variable names
b860: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
b870: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...
b880: 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  #..      upvar 1
b890: 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65   $resultsVarName b8a0: 20 72 65 73 75 6c 74 73 0d 0a 20 20 20 20 20 20 results.. b8b0: 75 70 76 61 72 20 31 20 24 65 72 72 6f 72 73 56 upvar 1$errorsV
b8c0: 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a 0d  arName errors...
b8d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
b8e0: 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65  # NOTE: Evaluate
b8f0: 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74 65 64   the constructed
b900: 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 5d   [compileCSharp]
b910: 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65 74   command and ret
b920: 75 72 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23  urn the..      #
b930: 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e 0d 0a         result...
b940: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65        #..      e
b950: 76 61 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20  val $command.. b960: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc b970: 20 69 73 4d 65 6d 6f 72 79 44 62 20 7b 20 66 69 isMemoryDb { fi b980: 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 leName } {.. b990: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT b9a0: 45 3a 20 49 73 20 74 68 65 20 73 70 65 63 69 66 E: Is the specif b9b0: 69 65 64 20 64 61 74 61 62 61 73 65 20 66 69 6c ied database fil b9c0: 65 20 6e 61 6d 65 20 72 65 61 6c 6c 79 20 61 6e e name really an b9d0: 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 in-memory datab b9e0: 61 73 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ase?.. #.. b9f0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp ba00: 72 20 7b 24 66 69 6c 65 4e 61 6d 65 20 65 71 20 r {$fileName eq
ba10: 22 3a 6d 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d  ":memory:" || \.
ba20: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
ba30: 6e 67 20 72 61 6e 67 65 20 24 66 69 6c 65 4e 61  ng range $fileNa ba40: 6d 65 20 30 20 31 32 5d 20 65 71 20 22 66 69 6c me 0 12] eq "fil ba50: 65 3a 3a 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 e::memory:"}].. ba60: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro ba70: 63 20 69 73 54 61 62 6c 65 49 6e 44 62 20 7b 20 c isTableInDb { ba80: 6e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 name {varName db ba90: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. baa0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re bab0: 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 fer to the speci bac0: 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 fied variable (e bad0: 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 .g. "db") in the bae0: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d context of our. baf0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c bb00: 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 aller. It conta bb10: 69 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 ins the database bb20: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 connection hand bb30: 6c 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0d le that will be. bb40: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 . # u bb50: 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 sed to execute t bb60: 68 65 20 71 75 65 72 79 20 75 73 65 64 20 74 6f he query used to bb70: 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 determine if th bb80: 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 e named table is bb90: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # bba0: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20 present in that bbb0: 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 database... bbc0: 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar bbd0: 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
bbe0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
bbf0: 23 20 4e 4f 54 45 3a 20 45 78 65 63 75 74 65 20  # NOTE: Execute
bc00: 74 68 65 20 53 51 4c 20 71 75 65 72 79 20 61 67  the SQL query ag
bc10: 61 69 6e 73 74 20 74 68 65 20 73 71 6c 69 74 65  ainst the sqlite
bc20: 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f  _master table to
bc30: 20 63 68 65 63 6b 20 69 66 0d 0a 20 20 20 20 20   check if..
bc40: 20 23 20 20 20 20 20 20 20 74 68 65 20 6e 61 6d   #       the nam
bc50: 65 64 20 74 61 62 6c 65 20 69 73 20 70 72 65 73  ed table is pres
bc60: 65 6e 74 20 61 6e 64 20 72 65 74 75 72 6e 20 6e  ent and return n
bc70: 6f 6e 2d 7a 65 72 6f 20 69 66 20 69 74 20 69 73  on-zero if it is
bc80: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
bc90: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b    return [expr {
bca0: 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78  [sql execute -ex
bcb0: 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62  ecute scalar $db bcc0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 53 \.. "S bcd0: 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 ELECT COUNT(*) F bce0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 ROM sqlite_maste bcf0: 72 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 r WHERE type = ' bd00: 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 20 table' AND name bd10: 3d 20 3f 3b 22 20 5c 0d 0a 20 20 20 20 20 20 20 = ?;" \.. bd20: 20 20 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 [list param1 bd30: 53 74 72 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e String$name]] >
bd40: 20 30 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a   0}]..    }.....
bd50: 20 20 20 20 70 72 6f 63 20 74 72 69 6d 53 71 6c      proc trimSql
bd60: 20 7b 20 73 71 6c 20 7d 20 7b 0d 0a 20 20 20 20   { sql } {..
bd70: 20 20 72 65 74 75 72 6e 20 5b 72 65 67 73 75 62    return [regsub
bd80: 20 2d 61 6c 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 5b   -all -- {\s+} [
bd90: 73 74 72 69 6e 67 20 74 72 69 6d 20 24 73 71 6c  string trim $sql bda0: 5d 20 22 20 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0c ] " "].. }... bdb0: 0d 0a 20 20 20 20 70 72 6f 63 20 65 78 65 63 75 .. proc execu bdc0: 74 65 53 71 6c 20 7b 20 73 71 6c 20 7b 65 78 65 teSql { sql {exe bdd0: 63 75 74 65 20 6e 6f 6e 65 7d 20 7b 66 69 6c 65 cute none} {file bde0: 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 Name ""} } {.. bdf0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string be00: 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 length$fileName
be10: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 73 65  ] == 0} then {se
be20: 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d 65 6d 6f  t fileName :memo
be30: 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73 65 74 75  ry:}..      setu
be40: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22 22  pDb $fileName "" be50: 20 22 22 20 22 22 20 22 22 20 22 22 20 66 61 6c "" "" "" "" fal be60: 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 se false false f be70: 61 6c 73 65 20 6d 65 6d 44 62 0d 0a 0d 0a 20 20 alse memDb.... be80: 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 try {.. be90: 20 20 20 72 65 74 75 72 6e 20 5b 73 71 6c 20 65 return [sql e bea0: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 xecute -execute beb0: 24 65 78 65 63 75 74 65 20 24 6d 65 6d 44 62 20$execute $memDb bec0: 24 73 71 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 66$sql]..      } f
bed0: 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20  inally {..
bee0: 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c    cleanupDb $fil bef0: 65 4e 61 6d 65 20 6d 65 6d 44 62 20 66 61 6c 73 eName memDb fals bf00: 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d e false.. } bf10: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... bf20: 70 72 6f 63 20 73 65 74 75 70 44 62 20 7b 0d 0a proc setupDb {.. bf30: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 file bf40: 4e 61 6d 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b Name {mode ""} { bf50: 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 dateTimeFormat " bf60: 22 7d 20 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 "} {dateTimeKind bf70: 20 22 22 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d ""} {flags ""}. bf80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 65 78 . {ex bf90: 74 72 61 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 tra ""} {qualify bfa0: 20 74 72 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 true} {delete t bfb0: 72 75 65 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d rue} {uri false} bfc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 74 .. {t bfd0: 65 6d 70 6f 72 61 72 79 20 74 72 75 65 7d 20 7b emporary true} { bfe0: 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d varName db} } {. bff0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. c000: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 # NOTE: First, s c010: 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 ee if our caller c020: 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20 61 has requested a c030: 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 n in-memory data c040: 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a base... #.. c050: 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f set isMemo c060: 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 ry [isMemoryDb$
c070: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  fileName]....
c080: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
c090: 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c  TE: For now, all
c0a0: 20 74 65 73 74 20 64 61 74 61 62 61 73 65 73 20   test databases
c0b0: 75 73 65 64 20 62 79 20 74 68 65 20 74 65 73 74  used by the test
c0c0: 20 73 75 69 74 65 20 61 72 65 20 70 6c 61 63 65   suite are place
c0d0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
c0e0: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
c0f0: 73 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20 45  se directory.  E
c100: 61 63 68 20 64 61 74 61 62 61 73 65 20 61 6e 64  ach database and
c110: 20 72 65 6c 61 74 65 64 20 66 69 6c 65 73 0d 0a   related files..
c120: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73        #       us
c130: 65 64 20 62 79 20 61 20 74 65 73 74 20 73 68 6f  ed by a test sho
c140: 75 6c 64 20 62 65 20 63 6c 65 61 6e 65 64 20 75  uld be cleaned u
c150: 70 20 62 79 20 74 68 61 74 20 74 65 73 74 20 75  p by that test u
c160: 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  sing the..
c170: 23 20 20 20 20 20 20 20 22 63 6c 65 61 6e 75 70  #       "cleanup
c180: 44 62 22 20 70 72 6f 63 65 64 75 72 65 2c 20 62  Db" procedure, b
c190: 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  elow...      #..
c1a0: 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65        if {!$isMe c1b0: 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 mory &&$qualify
c1c0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
c1d0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
c1e0: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61  file join [getDa
c1f0: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d  tabaseDirectory]
c200: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c   [file tail $fil c210: 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d eName]].. } c220: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. c230: 20 20 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 # NOTE: By de c240: 66 61 75 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e fault, delete an c250: 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 y pre-existing d c260: 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68 65 atabase with the c270: 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 same file.. c280: 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 69 # name i c290: 66 20 69 74 20 63 75 72 72 65 6e 74 6c 79 20 65 f it currently e c2a0: 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d xists... #. c2b0: 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d . if {!$isM
c2c0: 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65  emory && $delete c2d0: 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 && [file exists c2e0: 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65$fileName]} the
c2f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
c300: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
c310: 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74  Attempt to delet
c320: 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69  e any pre-existi
c330: 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74 68  ng database with
c340: 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a   the same file..
c350: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
c360: 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  name...        #
c370: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
c380: 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74  atch {file delet
c390: 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72  e $fileName} err c3a0: 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. c3b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. c3c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 # NOTE: We s c3d0: 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f omehow failed to c3e0: 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 delete the file c3f0: 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... c400: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. c410: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
c420: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
c430: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
c440: 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
c450: 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
c460: 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73  o delete databas
c470: 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  e file \"" $file c480: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. c490: 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 "\" during c4a0: 20 73 65 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 setup, error: " c4b0: 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
c4c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
c4d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
c4e0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
c4f0: 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63  efer to the spec
c500: 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28  ified variable (
c510: 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68  e.g. "db") in th
c520: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72  e context of our
c530: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
c540: 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e  caller.  The han
c550: 64 6c 65 20 74 6f 20 74 68 65 20 6f 70 65 6e 65  dle to the opene
c560: 64 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20  d database will
c570: 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e  be stored there.
c580: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
c590: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam c5a0: 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d e db.... #. c5b0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 . # NOTE: S c5c0: 74 61 72 74 20 62 75 69 6c 64 69 6e 67 20 74 68 tart building th c5d0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str c5e0: 69 6e 67 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 ing. The only r c5f0: 65 71 75 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d equired portion. c600: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f . # o c610: 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e f the connection c620: 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 64 string is the d c630: 61 74 61 20 73 6f 75 72 63 65 2c 20 77 68 69 63 ata source, whic c640: 68 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a h contains the.. c650: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 # da c660: 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 tabase file name c670: 20 69 74 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 itself. If our c680: 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f caller wants to c690: 20 75 73 65 20 61 20 55 52 49 20 61 73 0d 0a 20 use a URI as.. c6a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the c6b0: 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20 75 73 data source, us c6c0: 65 20 74 68 65 20 46 75 6c 6c 55 72 69 20 63 6f e the FullUri co c6d0: 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 nnection string c6e0: 70 72 6f 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 property to.. c6f0: 20 20 20 23 20 20 20 20 20 20 20 70 72 65 76 65 # preve c700: 6e 74 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 nt the data sour c710: 63 65 20 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 ce string from b c720: 65 69 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 eing mangled... c730: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if c740: 20 7b 24 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a {$uri} then {..
c750: 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e          set conn
c760: 65 63 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d  ection {FullUri=
c770: 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20  ${fileName}}.. c780: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. c790: 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 set connec c7a0: 74 69 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 tion {Data Sourc c7b0: 65 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a e=${fileName}}..
c7c0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
c7d0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
c7e0: 3a 20 53 69 6e 63 65 20 74 68 69 73 20 70 72 6f  : Since this pro
c7f0: 63 65 64 75 72 65 20 68 61 73 20 6e 6f 20 73 70  cedure has no sp
c800: 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20  ecial knowledge
c810: 6f 66 20 77 68 61 74 20 74 68 65 20 64 65 66 61  of what the defa
c820: 75 6c 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ult..      #
c830: 20 20 20 73 65 74 74 69 6e 67 20 69 73 20 66 6f     setting is fo
c840: 72 20 74 68 65 20 54 6f 46 75 6c 6c 50 61 74 68  r the ToFullPath
c850: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
c860: 6e 67 20 70 72 6f 70 65 72 79 2c 20 61 6c 77 61  ng propery, alwa
c870: 79 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ys..      #
c880: 20 20 61 64 64 20 74 68 65 20 76 61 6c 75 65 20    add the value
c890: 77 65 20 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f  we know about to
c8a0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
c8b0: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23  string...      #
c8c0: 0d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 63  ..      append c
c8d0: 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75  onnection {;ToFu
c8e0: 6c 6c 50 61 74 68 3d 24 7b 71 75 61 6c 69 66 79  llPath=${qualify c8f0: 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }}.... #.. c900: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If c910: 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 our caller speci c920: 66 69 65 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d fied a journal m c930: 6f 64 65 2c 20 61 64 64 20 74 68 65 20 6e 65 63 ode, add the nec c940: 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a essary portion.. c950: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 # of c960: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection c970: 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 string now... c980: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { c990: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
c9a0: 6d 6f 64 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  mode] > 0} then
c9b0: 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  {..        appen
c9c0: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a  d connection {;J
c9d0: 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f  ournal Mode=${mo c9e0: 64 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d de}}.. }... c9f0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. ca00: 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 # NOTE: If our c ca10: 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 aller specified ca20: 61 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 a DateTime forma ca30: 74 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 t, add the neces ca40: 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 sary.. # ca50: 20 20 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 portion of t ca60: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st ca70: 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ring now... ca80: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s ca90: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 tring length$da
caa0: 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20  teTimeFormat] >
cab0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
cac0: 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63     append connec
cad0: 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46  tion {;DateTimeF
cae0: 6f 72 6d 61 74 3d 24 7b 64 61 74 65 54 69 6d 65  ormat=${dateTime caf0: 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 Format}}.. cb00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. cb10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f # NOTE: If o cb20: 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 ur caller specif cb30: 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 4b 69 ied a DateTimeKi cb40: 6e 64 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 nd, add the nece cb50: 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 ssary portion.. cb60: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 # of cb70: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 the connection s cb80: 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 tring now... cb90: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ cba0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 string length$d
cbb0: 61 74 65 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30  ateTimeKind] > 0
cbc0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
cbd0: 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74    append connect
cbe0: 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69  ion {;DateTimeKi
cbf0: 6e 64 3d 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e  nd=${dateTimeKin cc00: 64 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a d}}.. }.... cc10: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # cc20: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 72 65 20 NOTE: If there cc30: 61 72 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 are any global ( cc40: 70 65 72 20 74 65 73 74 20 72 75 6e 29 20 63 6f per test run) co cc50: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 nnection flags c cc60: 75 72 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 urrently.. cc70: 23 20 20 20 20 20 20 20 73 65 74 2c 20 75 73 65 # set, use cc80: 20 74 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 them now (i.e. cc90: 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 by combining the cca0: 6d 20 77 69 74 68 20 74 68 65 20 6f 6e 65 73 20 m with the ones ccb0: 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 for this.. ccc0: 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 # connecti ccd0: 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 on)... #.. cce0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e ccf0: 78 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 xists ::connecti cd00: 6f 6e 5f 66 6c 61 67 73 5d 20 26 26 20 5c 0d 0a on_flags] && \.. cd10: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin cd20: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6e 6e g length$::conn
cd30: 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 3e 20  ection_flags] >
cd40: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
cd50: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
cd60: 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20  NOTE: Show (and
cd70: 6c 6f 67 29 20 74 68 61 74 20 77 65 20 64 65 74  log) that we det
cd80: 65 63 74 65 64 20 73 6f 6d 65 20 67 6c 6f 62 61  ected some globa
cd90: 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  l connection fla
cda0: 67 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  gs...        #..
cdb0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: cdc0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a cdd0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. cde0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67 "---- g cdf0: 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e lobal connection ce00: 20 66 6c 61 67 73 20 64 65 74 65 63 74 65 64 3a flags detected: ce10: 20 22 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e "$::connection
ce20: 5f 66 6c 61 67 73 20 5c 6e 5d 0d 0a 0d 0a 20 20  _flags \n]....
ce30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
ce40: 20 23 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e 65   # NOTE: Combine
ce50: 20 61 6e 64 2f 6f 72 20 72 65 70 6c 61 63 65 20   and/or replace
ce60: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  the connection f
ce70: 6c 61 67 73 20 61 6e 64 20 74 68 65 6e 20 73 68  lags and then sh
ce80: 6f 77 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ow the..
ce90: 23 20 20 20 20 20 20 20 6e 65 77 20 76 61 6c 75  #       new valu
cea0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
ceb0: 20 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73         set flags
cec0: 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24   [combineFlags $ced0: 66 6c 61 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 flags$::connect
cee0: 69 6f 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20  ion_flags]....
cef0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t cf00: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app cf10: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. cf20: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d "---- com cf30: 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e bined connection cf40: 20 66 6c 61 67 73 20 61 72 65 3a 20 22 20 24 66 flags are: "$f
cf50: 6c 61 67 73 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  lags \n]..
cf60: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
cf70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f      # NOTE: If o
cf80: 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66  ur caller specif
cf90: 69 65 64 20 73 6f 6d 65 20 53 51 4c 69 74 65 43  ied some SQLiteC
cfa0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20  onnectionFlags,
cfb0: 61 64 64 20 74 68 65 0d 0a 20 20 20 20 20 20 23  add the..      #
cfc0: 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79         necessary
cfd0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20   portion of the
cfe0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
cff0: 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d  g now...      #.
d000: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
d010: 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73  ng length $flags d020: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. d030: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f append co d040: 6e 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 nnection {;Flags d050: 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 =${flags}}..
d060: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
d070: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
d080: 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63   our caller spec
d090: 69 66 69 65 64 20 61 6e 20 65 78 74 72 61 20 70  ified an extra p
d0a0: 61 79 6c 6f 61 64 20 74 6f 20 74 68 65 20 63 6f  ayload to the co
d0b0: 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  nnection..
d0c0: 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20  #       string,
d0d0: 61 70 70 65 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a  append it now...
d0e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
d0f0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
d100: 68 20 24 65 78 74 72 61 5d 20 3e 20 30 7d 20 74  h $extra] > 0} t d110: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a d120: 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e ppend connection d130: 20 5c 3b 20 24 65 78 74 72 61 0d 0a 20 20 20 20 \;$extra..
d140: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
d150: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 70        # NOTE: Op
d160: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database
d170: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 2c 20  connection now,
d180: 70 6c 61 63 69 6e 67 20 74 68 65 20 6f 70 61 71  placing the opaq
d190: 75 65 20 68 61 6e 64 6c 65 20 76 61 6c 75 65 0d  ue handle value.
d1a0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
d1b0: 6e 74 6f 20 74 68 65 20 76 61 72 69 61 62 6c 65  nto the variable
d1c0: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 6f 75   specified by ou
d1d0: 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20  r caller...
d1e0: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62   #..      set db
d1f0: 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65   [sql open -type
d200: 20 53 51 4c 69 74 65 20 5b 73 75 62 73 74 20 24   SQLite [subst $d210: 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a connection]].... d220: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # d230: 20 4e 4f 54 45 3a 20 43 6f 6e 66 69 67 75 72 65 NOTE: Configure d240: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 64 the temporary d d250: 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 irectory for the d260: 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20 64 61 newly opened da d270: 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 23 20 tabase.. # d280: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e connection d290: 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 now unless our d2a0: 63 61 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 69 caller forbids i d2b0: 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 t... #.. d2c0: 20 20 20 69 66 20 7b 24 74 65 6d 70 6f 72 61 72 if {$temporar
d2d0: 79 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 73  y && ![info exis
d2e0: 74 73 20 3a 3a 6e 6f 28 73 65 74 54 65 6d 70 6f  ts ::no(setTempo
d2f0: 72 61 72 79 44 69 72 65 63 74 6f 72 79 29 5d 7d  raryDirectory)]}
d300: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
d310: 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db d320: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. d330: 20 20 20 20 20 20 20 20 20 20 20 20 22 50 52 41 "PRA d340: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 GMA temp_store_d d350: 69 72 65 63 74 6f 72 79 20 3d 20 5c 22 22 20 5b irectory = \"" [ d360: 67 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 getTemporaryDire d370: 63 74 6f 72 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 ctory] \"\;].. d380: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # d390: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: d3a0: 41 6c 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 Always return th d3b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e e connection han d3c0: 64 6c 65 20 75 70 6f 6e 20 73 75 63 63 65 73 73 dle upon success d3d0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. d3e0: 20 20 72 65 74 75 72 6e 20 24 64 62 0d 0a 20 20 return$db..
d3f0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
d400: 20 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e   getDbConnection
d410: 20 7b 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20   { {varName db}
d420: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
d430: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
d440: 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
d450: 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
d460: 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
d470: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
d480: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
d490: 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65  ler.  The handle
d4a0: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
d4b0: 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
d4c0: 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20  ed via the..
d4d0: 20 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70    #       [setup
d4e0: 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68  Db] procedure sh
d4f0: 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74  ould be stored t
d500: 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  here...      #..
d510: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76        upvar 1 $v d520: 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 arName db.... d530: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO d540: 54 45 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 TE: This returns d550: 20 74 68 65 20 41 44 4f 2e 4e 45 54 20 49 44 62 the ADO.NET IDb d560: 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 Connection objec d570: 74 20 69 6e 73 74 61 6e 63 65 20 66 6f 72 20 74 t instance for t d580: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # d590: 20 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 specified data d5a0: 62 73 65 20 68 61 6e 64 6c 65 2e 20 20 53 69 6e bse handle. Sin d5b0: 63 65 20 67 65 74 74 69 6e 67 20 74 68 69 73 20 ce getting this d5c0: 6f 62 6a 65 63 74 20 72 65 6c 69 65 73 20 75 70 object relies up d5d0: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 on.. # d5e0: 20 20 45 61 67 6c 65 20 69 6e 74 65 72 6e 61 6c Eagle internal d5f0: 73 2c 20 67 72 65 61 74 20 63 61 72 65 20 73 68 s, great care sh d600: 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e 20 74 6f ould be taken to d610: 20 61 76 6f 69 64 20 64 69 73 70 6f 73 69 6e 67 avoid disposing d620: 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 of.. # d630: 20 20 20 74 68 69 73 20 6f 62 6a 65 63 74 20 6f this object o d640: 72 20 6f 74 68 65 72 77 69 73 65 20 70 75 74 74 r otherwise putt d650: 69 6e 67 20 69 74 20 69 6e 74 6f 20 61 6e 20 69 ing it into an i d660: 6e 76 61 6c 69 64 20 73 74 61 74 65 2e 0d 0a 20 nvalid state... d670: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if d680: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 {[info exists d d690: 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 b]} then {.. d6a0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { d6b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. d6c0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke d6d0: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli d6e0: 63 20 2d 6f 62 6a 65 63 74 66 6c 61 67 73 20 2b c -objectflags + d6f0: 4e 6f 44 69 73 70 6f 73 65 20 5c 0d 0a 20 20 20 NoDispose \.. d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 61 6c -al d710: 69 61 73 20 49 6e 74 65 72 70 72 65 74 65 72 2e ias Interpreter. d720: 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 GetActive.connec d730: 74 69 6f 6e 73 20 49 74 65 6d 20 24 64 62 7d 20 tions Item$db}
d740: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
d750: 20 20 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d     result] == 0}
d760: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
d770: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
d780: 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2c  # NOTE: Success,
d790: 20 72 65 74 75 72 6e 20 74 68 65 20 6f 70 61 71   return the opaq
d7a0: 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65  ue object handle
d7b0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
d7c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
d7d0: 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20   $result.. d7e0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. d7f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. d800: 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 # NOTE: Failu d810: 72 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d re, report why.. d820: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. d830: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
d840: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
d850: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
d860: 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
d870: 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
d880: 20 74 6f 20 67 65 74 20 63 6f 6e 6e 65 63 74 69   to get connecti
d890: 6f 6e 20 68 61 6e 64 6c 65 20 66 6f 72 20 64 61  on handle for da
d8a0: 74 61 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20  tabase \"" \..
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62 20              $db d8c0: 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "\", error: " \n d8d0: 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a \t$result \n]..
d8e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
d8f0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
d900: 20 20 70 72 6f 63 20 66 72 65 65 44 62 43 6f 6e    proc freeDbCon
d910: 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61  nection { {varNa
d920: 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d  me connection} }
d930: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
d940: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72     # NOTE: Refer
d950: 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
d960: 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e  d variable (e.g.
d970: 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69   "connection") i
d980: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  n the..      #
d990: 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20       context of
d9a0: 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65  our caller.  The
d9b0: 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68   opaque object h
d9c0: 61 6e 64 6c 65 20 66 6f 72 20 61 6e 20 41 44 4f  andle for an ADO
d9d0: 2e 4e 45 54 0d 0a 20 20 20 20 20 20 23 20 20 20  .NET..      #
d9e0: 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70      connection p
d9f0: 72 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e  reviously return
da00: 65 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e  ed by [getDbConn
da10: 65 63 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 62  ection] should b
da20: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
da30: 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a   stored there...
da40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
da50: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName da60: 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 connection.... da70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N da80: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to da90: 72 65 6d 6f 76 65 20 74 68 65 20 6f 70 61 71 75 remove the opaqu daa0: 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 e object handle dab0: 66 72 6f 6d 20 74 68 65 20 69 6e 74 65 72 70 72 from the interpr dac0: 65 74 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 eter.. # dad0: 20 20 20 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b now. This [ dae0: 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 5d 20 object dispose] daf0: 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 call will not ac db00: 74 75 61 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f tually dispose o db10: 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 f the.. # db20: 20 20 20 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 underlying db30: 6f 62 6a 65 63 74 20 62 65 63 61 75 73 65 20 74 object because t db40: 68 65 20 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c he +NoDispose fl db50: 61 67 20 77 61 73 20 73 65 74 20 6f 6e 20 69 74 ag was set on it db60: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # db70: 64 75 72 69 6e 67 20 63 72 65 61 74 69 6f 6e 20 during creation db80: 6f 66 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 of the opaque ob db90: 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 ject handle... dba0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if dbb0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f {[info exists co dbc0: 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a nnection] && \.. dbd0: 20 20 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 [catch dbe0: 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 {object dispose dbf0: 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72$connection} er
dc00: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
dc10: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
dc20: 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65   # NOTE: We some
dc30: 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 72 65  how failed to re
dc40: 6d 6f 76 65 20 74 68 65 20 68 61 6e 64 6c 65 2c  move the handle,
dc50: 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20   report why...
dc60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
dc70: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c dc80: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr dc90: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. dca0: 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: dcb0: 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 failed to remov dcc0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e e connection han dcd0: 64 6c 65 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 dle \""$connect
dce0: 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
dcf0: 20 20 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22     "\", error: "
dd00: 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] dd10: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } dd20: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 61 64 ..... proc ad dd30: 64 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 dDbConnection { dd40: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 72 4e connection {varN dd50: 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 ame db} } {.. dd60: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO dd70: 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 TE: Refer to the dd80: 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 specified varia dd90: 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 ble (e.g. "db") dda0: 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f in the context o ddb0: 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 f our.. # ddc0: 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 caller... ddd0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 #.. upv dde0: 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 ar 1$varName db
ddf0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
de00: 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74     # NOTE: Creat
de10: 65 20 61 20 63 6f 72 72 65 63 74 6c 79 20 66 6f  e a correctly fo
de20: 72 6d 61 74 74 65 64 20 6e 61 6d 65 20 66 6f 72  rmatted name for
de30: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
de40: 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 20  nnection to..
de50: 20 20 20 23 20 20 20 20 20 20 20 62 65 20 61 64     #       be ad
de60: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list
de70: 6d 61 6e 61 67 65 64 20 62 79 20 74 68 65 20 45  managed by the E
de80: 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72  agle interpreter
de90: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
dea0: 20 20 73 65 74 20 64 62 20 5b 6f 62 6a 65 63 74    set db [object
deb0: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
dec0: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
ded0: 20 20 20 20 20 20 20 45 61 67 6c 65 2e 5f 43 6f         Eagle._Co
dee0: 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76 61 74 65  mponents.Private
def0: 2e 46 6f 72 6d 61 74 4f 70 73 20 44 61 74 61 62  .FormatOps Datab
df00: 61 73 65 4f 62 6a 65 63 74 4e 61 6d 65 20 24 63  aseObjectName $c df10: 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 onnection \.. df20: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e SQLiteCon df30: 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 nection [object df40: 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 invoke Interpret df50: 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 er.GetActive Nex df60: 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 tId]].... # df70: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: df80: 41 64 64 20 74 68 65 20 64 61 74 61 62 61 73 65 Add the database df90: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 76 connection prov dfa0: 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c ided by our call dfb0: 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0d 0a er to the list.. dfc0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 # of dfd0: 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 those known to dfe0: 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 the Eagle interp dff0: 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d reter... #. e000: 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e . object in e010: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non e020: 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 Public Interpret e030: 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e er.GetActive.con e040: 6e 65 63 74 69 6f 6e 73 20 41 64 64 20 5c 0d 0a nections Add \.. e050: 20 20 20 20 20 20 20 20 20 20 24 64 62 20 24 63$db $c e060: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 7d onnection.. } e070: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c ..... proc cl e080: 65 61 6e 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 eanupDb { fileNa e090: 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 me {varName db} e0a0: 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b {collect true} { e0b0: 71 75 61 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 qualify true}.. e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e0d0: 20 20 20 20 7b 64 65 6c 65 74 65 20 74 72 75 65 {delete true e0e0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. e0f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At e100: 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 tempt to force a e110: 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72 62 ll pending "garb e120: 61 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 age" objects to e130: 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 be collected,.. e140: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 63 # inc e150: 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73 74 luding SQLite st e160: 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 atements and bac e170: 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 kup objects; thi e180: 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a s should allow.. e190: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th e1a0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 e underlying dat e1b0: 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 abase file to be e1c0: 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 deleted... e1d0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 #.. if {$c
e1e0: 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a  ollect} then {..
e1f0: 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47          collectG
e200: 61 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f 63  arbage $::test_c e210: 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d hannel.. }. e220: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. e230: 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 # NOTE: Refer e240: 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 to the specified e250: 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 variable (e.g. e260: 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e "db") in the con e270: 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 text of our.. e280: 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 # calle e290: 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 r. The handle t e2a0: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 70 o the database p e2b0: 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 reviously opened e2c0: 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 via the.. e2d0: 23 20 20 20 20 20 20 20 5b 73 65 74 75 70 44 62 # [setupDb e2e0: 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 ] procedure shou e2f0: 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 ld be stored the e300: 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 re... #.. e310: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
e320: 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20  Name db....
e330: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
e340: 3a 20 43 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e  : Close the conn
e350: 65 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 64 61  ection to the da
e360: 74 61 62 61 73 65 20 6e 6f 77 2e 20 20 54 68 69  tabase now.  Thi
e370: 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75  s should allow u
e380: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
e390: 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 75   to delete the u
e3a0: 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61  nderlying databa
e3b0: 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20  se file...
e3c0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
e3d0: 66 6f 20 65 78 69 73 74 73 20 64 62 5d 20 26 26  fo exists db] &&
e3e0: 20 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f   [catch {sql clo
e3f0: 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20  se $db} error]} e400: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. e410: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT e420: 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa e430: 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 iled to close th e440: 65 20 64 61 74 61 62 61 73 65 2c 20 72 65 70 6f e database, repo e450: 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... e460: 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput e470: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
e480: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
e490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d  .            "==
e4a0: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
e4b0: 65 64 20 74 6f 20 63 6c 6f 73 65 20 64 61 74 61  ed to close data
e4c0: 62 61 73 65 20 5c 22 22 20 24 64 62 20 22 5c 22  base \"" $db "\" e4d0: 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 , error: " \.. e4e0: 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 \n\t$
e4f0: 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
e500: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
e510: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72       # NOTE: Fir
e520: 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63  st, see if our c
e530: 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73  aller has reques
e540: 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  ted an in-memory
e550: 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...
e560: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69    #..      set i
e570: 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72  sMemory [isMemor
e580: 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a  yDb $fileName].. e590: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. e5a0: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t e5b0: 68 65 20 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 he full path to e5c0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c the database fil e5d0: 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 e name. For now e5e0: 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 , all test.. e5f0: 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61 # databa e600: 73 65 20 66 69 6c 65 73 20 61 72 65 20 73 74 6f se files are sto e610: 72 65 64 20 69 6e 20 74 68 65 20 74 65 6d 70 6f red in the tempo e620: 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e 0d rary directory.. e630: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. e640: 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 if {!$isMemory &
e650: 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e  & $qualify} then e660: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set e670: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a fileName [file j e680: 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 oin [getDatabase e690: 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 Directory] [file e6a0: 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d tail$fileName]
e6b0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
e6c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
e6d0: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
e6e0: 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69  e file still exi
e6f0: 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  sts...      #..
e700: 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d       if {!$isMem e710: 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 ory &&$delete &
e720: 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  & [file exists $e730: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then e740: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. e750: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk e760: 69 70 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 ip deleting data e770: 62 61 73 65 20 66 69 6c 65 73 20 69 66 20 73 6f base files if so e780: 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 mebody sets the e790: 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 global.. e7a0: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable e7b0: 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d to prevent it.. e7c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. e7d0: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e e7e0: 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e xists ::no(clean e7f0: 75 70 44 62 46 69 6c 65 29 5d 7d 20 74 68 65 6e upDbFile)]} then e800: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. e810: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT e820: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 E: Attempt to de e830: 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 64 61 lete the test da e840: 74 61 62 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e tabase file now. e850: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. e860: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 if {[se e870: 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 t code [catch {f e880: 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 ile delete$file
e890: 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74  Name} error]]} t
e8a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
e8b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
e8c0: 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d    # NOTE: We som
e8d0: 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64  ehow failed to d
e8e0: 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20  elete the file,
e8f0: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
e900: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
e910: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: e920: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a e930: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== e950: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail e960: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74 ed to delete dat e970: 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 abase file \""$
e980: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
e990: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
e9a0: 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20  during cleanup,
e9b0: 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e e9c0: 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. e9d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } e9e0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. e9f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. ea00: 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 # NOTE: Show tha ea10: 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c t we skipped del ea20: 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d eting the file.. ea30: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. ea40: 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code ea50: 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 0.... ea60: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
ea70: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
ea80: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
ea90: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
eaa0: 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  : skipped deleti
eab0: 6e 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ng database file
eac0: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c   \"" $fileName \ ead0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. eae0: 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e "\" during clean eaf0: 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 up\n"].. eb00: 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 }.. } else eb10: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. eb20: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th eb30: 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 e file does not eb40: 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 21 0d exist, success!. eb50: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. eb60: 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a set code 0.. eb70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... eb80: 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 return$code..
eb90: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
eba0: 63 20 73 65 74 75 70 44 62 49 6e 74 65 72 72 75  c setupDbInterru
ebb0: 70 74 43 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61  ptCallback { cha
ebc0: 6e 6e 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20  nnel log } {..
ebd0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann ebe0: 65 6c 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 el "---- setting ebf0: 20 75 70 20 64 65 62 75 67 67 65 72 20 69 6e 74 up debugger int ec00: 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e errupt callback. ec10: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 .. ".... if ec20: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. ec30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # ec40: 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 NOTE: Make sure ec50: 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75 the script debu ec60: 67 67 65 72 20 61 6e 64 20 74 68 65 20 69 73 6f gger and the iso ec70: 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 lated interprete ec80: 72 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 r are.. # ec90: 20 20 20 20 20 20 20 73 65 74 75 70 20 61 6e 64 setup and eca0: 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 2e 0d ready for use.. ecb0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. ecc0: 20 20 20 20 64 65 62 75 67 20 73 65 74 75 70 20 debug setup ecd0: 74 72 75 65 20 74 72 75 65 0d 0a 0d 0a 20 20 20 true true.... ece0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. ecf0: 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 # NOTE: Load the ed00: 20 6e 65 63 65 73 73 61 72 79 20 70 61 63 6b 61 necessary packa ed10: 67 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f ges into the iso ed20: 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 lated interprete ed30: 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 r... #.. ed40: 20 20 20 20 20 20 20 64 65 62 75 67 20 65 76 61 debug eva ed50: 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 70 l {.. p ed60: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 ackage require E ed70: 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 agle.. ed80: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require ed90: 45 61 67 6c 65 2e 4c 69 62 72 61 72 79 0d 0a 20 Eagle.Library.. eda0: 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 package edb0: 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e 54 require Eagle.T edc0: 65 73 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a est.. }.. edd0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. ede0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 # NOTE: Cop edf0: 79 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 y the necessary ee00: 76 61 72 69 61 62 6c 65 73 20 69 6e 74 6f 20 74 variables into t ee10: 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 he isolated inte ee20: 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 rpreter... ee30: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 #.. deb ee40: 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 ug invoke 0 set ee50: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 ::test_channel$
ee60: 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a  channel; # NOTE:
ee70: 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20   For [tputs]...
ee80: 20 20 20 20 20 20 20 64 65 62 75 67 20 69 6e 76         debug inv
ee90: 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73 74  oke 0 set ::test
eea0: 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e 4f 54  _log $log; # NOT eeb0: 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d 0a E: For [tlog]... eec0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. eed0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e 73 # NOTE: Ins eee0: 74 61 6c 6c 20 74 68 65 20 63 61 6c 6c 62 61 63 tall the callbac eef0: 6b 20 73 63 72 69 70 74 20 74 6f 20 62 65 20 65 k script to be e ef00: 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20 valuated in the ef10: 69 73 6f 6c 61 74 65 64 0d 0a 20 20 20 20 20 20 isolated.. ef20: 20 20 23 20 20 20 20 20 20 20 69 6e 74 65 72 70 # interp ef30: 72 65 74 65 72 20 77 68 65 6e 20 74 68 69 73 20 reter when this ef40: 69 6e 74 65 72 70 72 65 74 65 72 20 69 73 20 69 interpreter is i ef50: 6e 74 65 72 72 75 70 74 65 64 20 62 79 20 73 63 nterrupted by sc ef60: 72 69 70 74 0d 0a 20 20 20 20 20 20 20 20 23 20 ript.. # ef70: 20 20 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 69 cancellati ef80: 6f 6e 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 on, etc... ef90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 #.. deb efa0: 75 67 20 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c ug callback appl efb0: 79 20 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d y {{sender e} {. efc0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. efd0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: efe0: 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 63 61 Check if this ca eff0: 6c 6c 62 61 63 6b 20 69 73 20 6f 6e 65 20 74 68 llback is one th f000: 61 74 20 77 65 20 63 61 72 65 20 61 62 6f 75 74 at we care about f010: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. f020: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 43 if {"C f030: 61 6e 63 65 6c 65 64 22 20 69 6e 20 5b 73 70 6c anceled" in [spl f040: 69 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70 74 it [$e Interrupt
f050: 54 79 70 65 5d 20 22 2c 20 22 5d 7d 20 74 68 65  Type] ", "]} the
f060: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
f070: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
f080: 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 74 65 20  # NOTE: Iterate
f090: 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 61 74 61  through all data
f0a0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  base connections
f0b0: 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 0d 0a 20   known to the..
f0c0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
f0d0: 20 20 20 70 61 72 65 6e 74 20 69 6e 74 65 72 70     parent interp
f0e0: 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  reter...
f0f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
f100: 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63     object foreac
f110: 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 5c 0d  h -alias pair \.
f120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
f130: 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
f140: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
f150: 63 20 24 65 20 49 6e 74 65 72 70 72 65 74 65 72  c $e Interpreter f160: 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d .connections] {. f170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # f180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f190: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt f1a0: 74 6f 20 63 61 6e 63 65 6c 20 61 6e 79 20 53 51 to cancel any SQ f1b0: 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f L queries in pro f1c0: 67 72 65 73 73 20 6f 6e 20 74 68 69 73 0d 0a 20 gress on this.. f1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # f1e0: 20 20 20 20 20 64 61 74 61 62 61 73 65 20 63 6f database co f1f0: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 nnection... f200: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. f210: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c f220: 61 74 63 68 20 7b 24 70 61 69 72 20 56 61 6c 75 atch {$pair Valu
f230: 65 2e 43 61 6e 63 65 6c 7d 20 65 72 72 6f 72 5d  e.Cancel} error]
f240: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
f250: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
f260: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel f270: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c [appendArgs \n \ f280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f290: 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN f2a0: 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 ING: failed to c f2b0: 61 6e 63 65 6c 20 71 75 65 72 79 20 66 6f 72 20 ancel query for f2c0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22 22 20 5c connection \"" \ f2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f2e0: 20 20 20 20 20 20 5b 24 70 61 69 72 20 4b 65 79 [$pair Key
f2f0: 5d 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20  ] "\", error: "
f300: 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. f310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } f320: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. f330: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. f340: 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 20 20 20 }}.. f350: 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 } error] == 0} t f360: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a f370: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 ddConstraint int f380: 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 erruptCallback.s f390: 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 qlite3.... f3a0: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
f3b0: 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20   yes\n..      }
f3c0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
f3d0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ f3e0: 61 70 70 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 appendArgs "no, f3f0: 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 error: " \n\t$e
f400: 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
f410: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
f420: 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c   proc cleanupFil
f430: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f  e { fileName {co
f440: 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 66 6f 72  llect true} {for
f450: 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  ce false} } {..
f460: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
f470: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
f480: 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 6e 64 69   force all pendi
f490: 6e 67 20 22 67 61 72 62 61 67 65 22 20 6f 62 6a  ng "garbage" obj
f4a0: 65 63 74 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65  ects to be colle
f4b0: 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 23 20 20  cted,..      #
f4c0: 20 20 20 20 20 69 6e 63 6c 75 64 69 6e 67 20 53       including S
f4d0: 51 4c 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  QLite statements
f4e0: 20 61 6e 64 20 62 61 63 6b 75 70 20 6f 62 6a 65   and backup obje
f4f0: 63 74 73 3b 20 74 68 69 73 20 73 68 6f 75 6c 64  cts; this should
f500: 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20   allow..      #
f510: 20 20 20 20 20 20 74 68 65 20 75 6e 64 65 72 6c        the underl
f520: 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69  ying database fi
f530: 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 74 65 64  le to be deleted
f540: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
f550: 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20    if {$collect} f560: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. f570: 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 collectGarbage$
f580: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
f590: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
f5a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
f5b0: 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66  : Check if the f
f5c0: 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73  ile still exists
f5d0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
f5e0: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
f5f0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t f600: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # f610: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE f620: 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 : Skip deleting f630: 74 65 73 74 20 66 69 6c 65 73 20 69 66 20 73 6f test files if so f640: 6d 65 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 mebody sets the f650: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 0d global variable. f660: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # f670: 20 74 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d to prevent it.. f680: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. f690: 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c if {$force |
f6a0: 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  | ![info exists
f6b0: 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65  ::no(cleanupFile
f6c0: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
f6d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
f6e0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
f6f0: 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65  pt to delete the
f700: 20 74 65 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d   test file now..
f710: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
f720: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74          if {[set
f730: 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 69   code [catch {fi
f740: 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e  le delete $fileN f750: 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 ame} error]]} th f760: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. f770: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. f780: 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 # NOTE: We some f790: 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 how failed to de f7a0: 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 lete the file, r f7b0: 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... f7c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. f7d0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
f7e0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
f7f0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
f800: 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
f810: 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
f820: 64 20 74 6f 20 64 65 6c 65 74 65 20 74 65 73 74  d to delete test
f830: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN f840: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. f850: 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e "\" durin f860: 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 g cleanup, error f870: 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
f880: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
f890: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
f8a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
f8b0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
f8c0: 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 20  E: Show that we
f8d0: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67  skipped deleting
f8e0: 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20   the file...
f8f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
f900: 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d     set code 0...
f910: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
f920: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel f930: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. f940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= f950: 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 === WARNING: ski f960: 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 65 pped deleting te f970: 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c st file \""$fil
f980: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
f990: 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e         "\" durin
f9a0: 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20  g cleanup\n"]..
f9b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
f9c0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
f9d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
f9e0: 4f 54 45 3a 20 54 68 65 20 66 69 6c 65 20 64 6f  OTE: The file do
f9f0: 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 73 75  es not exist, su
fa00: 63 63 65 73 73 21 0d 0a 20 20 20 20 20 20 20 20  ccess!..
fa10: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  #..        set c
fa20: 6f 64 65 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a  ode 0..      }..
fa30: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $fa40: 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a code.. }..... fa50: 20 20 20 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 proc collect fa60: 47 61 72 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 Garbage { channe fa70: 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 l {milliseconds fa80: 31 30 30 30 7d 20 7b 71 75 69 65 74 20 74 72 75 1000} {quiet tru fa90: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 e} } {.. if faa0: 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 {[catch {object fab0: 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f invoke GC GetTo fac0: 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 7d talMemory false} fad0: 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 result] == 0} t fae0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i faf0: 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
fb00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
fb10: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap fb20: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. fb30: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- fb40: 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 memory in use by fb50: 20 74 68 65 20 43 4c 52 20 62 65 66 6f 72 65 20 the CLR before fb60: 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 collection... " fb70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. fb80: 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65 73$result " bytes
fb90: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  \n"]..        }.
fba0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
fbb0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $fbc0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA fbd0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. fbe0: 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING fbf0: 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 : failed to get fc00: 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 CLR memory usage fc10: 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 , error: " \.. fc20: 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 \n\t$
fc30: 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
fc40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23    }....      ###
fc50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fc60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fc70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fc80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fc90: 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20  ######....
fca0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
fcb0: 20 52 65 70 65 61 74 65 64 6c 79 20 61 74 74 65   Repeatedly atte
fcc0: 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67  mpt to collect g
fcd0: 61 72 62 61 67 65 20 75 6e 74 69 6c 20 74 68 65  arbage until the
fce0: 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62 65 72   allotted number
fcf0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
fd00: 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  of milliseconds
fd10: 68 61 73 20 65 6c 61 70 73 65 64 2e 20 20 41 6c  has elapsed.  Al
fd20: 77 61 79 73 20 61 74 74 65 6d 70 74 20 74 6f 20  ways attempt to
fd30: 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 0d  collect garbage.
fd40: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
fd50: 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d 0a 20  t least once...
fd60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
fd70: 74 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20 73  t start [clock s
fd80: 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 73  econds]..      s
fd90: 65 74 20 73 74 6f 70 20 5b 65 78 70 72 20 7b 24  et stop [expr {$fda0: 73 74 61 72 74 20 2b 20 28 24 6d 69 6c 6c 69 73 start + ($millis
fdb0: 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 29 7d 5d  econds / 1000)}]
fdc0: 0d 0a 0d 0a 20 20 20 20 20 20 64 6f 20 7b 0d 0a  ....      do {..
fdd0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
fde0: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
fdf0: 70 74 20 74 6f 20 66 6f 72 63 65 20 61 20 66 75  pt to force a fu
fe00: 6c 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65  ll garbage colle
fe10: 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 6f  ction now.  Repo
fe20: 72 74 20 61 6e 79 0d 0a 20 20 20 20 20 20 20 20  rt any..
fe30: 23 20 20 20 20 20 20 20 65 72 72 6f 72 20 74 68  #       error th
fe40: 61 74 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  at is encountere
fe50: 64 20 69 66 20 77 65 20 66 61 69 6c 2e 0d 0a 20  d if we fail...
fe60: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
fe70: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62    if {[catch {ob
fe80: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47  ject invoke GC G
fe90: 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74 72  etTotalMemory tr
fea0: 75 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e  ue} error]} then
feb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
fec0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap fed0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. fee0: 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== fef0: 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed ff00: 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f 6c full garbage col ff10: 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72 3a 20 lection, error: ff20: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. ff30: 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c \n\t$error \
ff40: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  n]..        }...
ff50: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 77  .        set now
ff60: 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d   [clock seconds]
ff70: 0d 0a 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20  ..      } while
ff80: 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e 6f 77 20  {$start <=$now
ff90: 26 26 20 24 6e 6f 77 20 3c 20 24 73 74 6f 70 7d  && $now <$stop}
ffa0: 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 23 23  ....      ######
ffb0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ffc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ffd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ffe0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
fff0: 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ###....      if
10000 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20  {[catch {object
10010 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74  invoke GC GetTot
10020 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 7d 20  alMemory false}
10030 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68  result] == 0} th
10040 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
10050 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 10060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 10070 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
10080 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
10090 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d           "---- m
100a0 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20  emory in use by
100b0 74 68 65 20 43 4c 52 20 61 66 74 65 72 20 63 6f  the CLR after co
100c0 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d  llection... " \.
100d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24  .              $100e0 72 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e result " bytes\n 100f0 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 "].. }.. 10100 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 10110 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
10120 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
10130 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
10140 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
10150 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c  failed to get CL
10160 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20  R memory usage,
10170 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20  error: " \..
10180 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 10190 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 101a0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 101b0 20 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 48 proc getSQLiteH 101c0 61 6e 64 6c 65 43 6f 75 6e 74 73 20 7b 20 63 68 andleCounts { ch 101d0 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c annel {quiet fal 101e0 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 se} } {.. s 101f0 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d et result [list] 10200 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 .... if {[h 10210 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d aveConstraint \. 10220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 . d 10230 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 efineConstant.Sy 10240 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 10250 2e 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d 20 .COUNT_HANDLE]} 10260 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 10270 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10280 45 3a 20 41 64 64 20 65 61 63 68 20 63 72 69 74 E: Add each crit 10290 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e ical handle coun 102a0 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 69 t to the resulti 102b0 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 ng list... 102c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 #.. for 102d0 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69 73 74 20 each name [list 102e0 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75 6e 74 20 connectionCount 102f0 73 74 61 74 65 6d 65 6e 74 43 6f 75 6e 74 20 62 statementCount b 10300 61 63 6b 75 70 43 6f 75 6e 74 5d 20 7b 0d 0a 20 ackupCount] {.. 10310 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c set val 10320 75 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b ue [object invok 10330 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 10340 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 10350 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 10360 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 .SQLite.UnsafeNa 10370 74 69 76 65 4d 65 74 68 6f 64 73 20 24 6e 61 6d tiveMethods$nam
10380 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e]....
10390 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 103a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 103b0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
103c0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
103e0 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61  ---- critical ha
103f0 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20 24  ndle count \"" $10400 6e 61 6d 65 20 22 5c 22 20 69 73 20 22 20 24 76 name "\" is "$v
10410 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  alue \n]..
10420 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
10430 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
10440 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  t $value.. 10450 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 10460 65 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 eif {!$quiet} th
10470 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
10480 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
10490 20 54 68 65 20 61 63 74 75 61 6c 20 68 61 6e 64   The actual hand
104a0 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 20 6e 6f  le counts are no
104b0 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 74 68 65  t available; the
104c0 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d 0a 20 20  refore, just..
104d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
104e0 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 6c 69  turn an empty li
104f0 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  st...        #..
10500 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 10510 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 69 hannel "---- cri 10520 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 tical handle cou 10530 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 5c nts unavailable\ 10540 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 n".. }.... 10550 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
10560 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ult..    }.....
10570 20 20 20 70 72 6f 63 20 73 68 75 74 64 6f 77 6e     proc shutdown
10580 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c  SQLite { channel
10590 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7b   {force false} {
105a0 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
105b0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
105c0 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75   # NOTE: Make su
105d0 72 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 63  re that SQLite c
105e0 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 63  ore library is c
105f0 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 74 64 6f  ompletely shutdo
10600 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 20  wn.  This..
10610 20 23 20 20 20 20 20 20 20 69 73 20 75 73 65 64   #       is used
10620 20 62 79 20 74 65 73 74 73 20 74 68 61 74 20 63   by tests that c
10630 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 72 61 74  hange configurat
10640 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 6e 64 2f  ion options and/
10650 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20  or those..
10660 23 20 20 20 20 20 20 20 74 68 61 74 20 6e 65 65  #       that nee
10670 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 6c  d to make sure l
10680 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 74 69 61  ogging is initia
10690 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a 75 73 74  lized (i.e. just
106a0 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 20 20 20   in case..
106b0 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
106c0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library
106d0 77 61 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  was initialized
106e0 69 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20 70  in the process p
106f0 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 23  rior to..      #
10700 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74         the SQLit
10710 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 69 6e 67  eLog class being
10720 20 61 62 6c 65 20 74 6f 20 73 65 74 75 70 20 69   able to setup i
10730 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62  ts logging callb
10740 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 23 20 20  ack)...      #
10750 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74       Normally, t
10760 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20  his should only
10770 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20  be performed if
10780 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64  SQLite is loaded
10790 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 20   and..      #
107a0 20 20 20 20 72 65 61 64 79 20 66 6f 72 20 75 73      ready for us
107b0 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  e by the test su
107c0 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ite...      #..
107d0 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20       if {$force 107e0 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 || [isSQLiteRead 107f0 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 10800 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 10810 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20 BUGFIX: Before 10820 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 calling the nati 10830 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 ve shutdown func 10840 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75 72 65 20 tion, make sure 10850 62 6f 74 68 0d 0a 20 20 20 20 20 20 20 20 23 20 both.. # 10860 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 50 of the P 10870 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 RAGMA related di 10880 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 rectory names ar 10890 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 e freed... 108a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 108b0 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 ckForSQLiteDirec 108c0 74 6f 72 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 tories$channel
108d0 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  true....
108e0 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65  if {[catch {obje
108f0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
10900 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
10920 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
10930 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
10940 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20  thods \..
10950 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
10960 5f 73 68 75 74 64 6f 77 6e 7d 20 72 65 73 75 6c  _shutdown} resul
10970 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
10980 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
10990 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 109a0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 109b0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
109c0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
109d0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
109e0 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75  call sqlite3_shu
109f0 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22  tdown()... ok: "
10a00 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 10a10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 10a20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 10a30 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
10a40 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
10a50 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 10a60 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 10a70 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 10a80 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c "---- call 10a90 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 sqlite3_shutdow 10aa0 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 n()... error: " 10ab0 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d \n\t$result \n]
10ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
10ad0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
10ae0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
10af0 20 70 72 6f 63 20 72 65 70 6f 72 74 53 51 4c 69   proc reportSQLi
10b00 74 65 52 65 73 6f 75 72 63 65 73 20 7b 20 63 68  teResources { ch
10b10 61 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c  annel {quiet fal
10b20 73 65 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75  se} {collect tru
10b30 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
10b40 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
10b50 6b 69 70 20 61 6c 6c 20 6f 75 74 70 75 74 20 69  kip all output i
10b60 66 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67  f we are running
10b70 20 69 6e 20 22 71 75 69 65 74 22 20 6d 6f 64 65   in "quiet" mode
10b80 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
10b90 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74    if {[haveConst
10ba0 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20  raint \..
10bb0 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e         defineCon
10bc0 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74  stant.System.Dat
10bd0 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50  a.SQLite.INTEROP
10be0 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20  _VIRTUAL_TABLE]
10bf0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
10c00 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
10c10 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
10c20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e   defineConstant.
10c30 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
10c40 74 65 2e 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f  te.TRACK_MEMORY_
10c50 42 59 54 45 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a  BYTES]} then {..
10c60 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 10c70 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 10c80 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
10c90 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72  annel "---- curr
10ca0 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73  ent memory in us
10cb0 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72  e by SQLiteMemor
10cc0 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 20  y... "..
10cd0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
10ce0 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20  {[catch {object
10cf0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
10d00 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
10d10 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
10d20 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
10d30 51 4c 69 74 65 4d 65 6d 6f 72 79 20 5c 0d 0a 20  QLiteMemory \..
10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10d50 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 7d 20 6d  ytesAllocated} m
10d60 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
10d70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
10d80 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 10d90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 10da0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
10db0 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 10dc0 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a ry " bytes\n"].. 10dd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 10de0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 10df0 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d set mem 10e00 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 ory unknown.... 10e10 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
10e20 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
10e30 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
10e40 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 10e50 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
10e60 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
10e70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
10e80 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 10e90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10ea0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
10eb0 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20  l "---- maximum
10ec0 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79  memory in use by
10ed0 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e   SQLiteMemory...
10ee0 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   "..        }...
10ef0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
10f00 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f  tch {object invo
10f10 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
10f20 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
10f30 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
10f40 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
10f50 65 4d 65 6d 6f 72 79 20 5c 0d 0a 20 20 20 20 20  eMemory \..
10f60 20 20 20 20 20 20 20 20 20 20 20 6d 61 78 69 6d             maxim
10f70 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61 74 65 64  umBytesAllocated
10f80 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20  } memory] == 0}
10f90 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
10fa0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 10fb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 10fc0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
10fd0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 10fe0 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 emory " bytes\n" 10ff0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 11000 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 11010 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 11020 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a memory unknown.. 11030 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 11040 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
11050 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
11060 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 11070 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
11080 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
11090 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
110a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
110b0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 110c0 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 110d0 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
110e0 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69  current memory i
110f0 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e  n use by SQLite.
11100 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  .. "..      }...
11110 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
11120 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  h {object invoke
11130 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
11140 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
11150 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
11160 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74  SQLite.UnsafeNat
11170 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20  iveMethods \..
11180 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
11190 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 7d  te3_memory_used}
111a0 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74   memory] == 0} t
111b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
111c0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 111d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 111e0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
111f0 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 11200 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 " bytes\n"].. 11210 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 11220 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 11230 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11240 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 TE: Maybe the SQ 11250 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar 11260 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 y is unavailable 11270 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ?.. #.. 11280 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory 11290 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 unknown.... 112a0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
112b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
112c0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 112d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
112e0 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
112f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
11300 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c  .      set resul
11310 74 20 24 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f 54  t $memory; # NOT 11320 45 3a 20 52 65 74 75 72 6e 20 6d 65 6d 6f 72 79 E: Return memory 11330 20 69 6e 2d 75 73 65 20 74 6f 20 6f 75 72 20 63 in-use to our c 11340 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 20 aller..... 11350 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
11360 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n {..        tpu
11370 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 11380 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 - maximum memory 11390 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 in use by SQLit 113a0 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d e... ".. }. 113b0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca 113c0 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f tch {object invo 113d0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 113e0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 113f0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 11400 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 11410 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a ativeMethods \.. 11420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 sq 11430 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 lite3_memory_hig 11440 68 77 61 74 65 72 20 30 7d 20 6d 65 6d 6f 72 79 hwater 0} memory 11450 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 11460 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
11470 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
11480 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 11490 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 114a0 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 s$memory " byte
114b0 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d  s\n"]..        }
114c0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
114d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
114e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79       # NOTE: May
114f0 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  be the SQLite co
11500 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e  re library is un
11510 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20  available?..
11520 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
11530 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77  et memory unknow
11540 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n....        if
11550 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 11560 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 11570 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
11580 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c  ndArgs $memory \ 11590 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 n].. }.. 115a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 115b0 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 if {$collect} th
115c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f  en {..        co
115d0 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 63 68  llectGarbage $ch 115e0 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a annel.. }.. 115f0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
11600 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
11610 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 11620 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e nel "---- curren 11630 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 t memory in use 11640 62 79 20 74 68 65 20 43 4c 52 2e 2e 2e 20 22 0d by the CLR... ". 11650 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 11660 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 if {[catch {ob 11670 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 ject invoke GC G 11680 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 etTotalMemory fa 11690 6c 73 65 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 lse} memory] == 116a0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 116b0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 if {[string i 116c0 73 20 69 6e 74 65 67 65 72 20 2d 73 74 72 69 63 s integer -stric 116d0 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 6e t$memory]} then
116e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
116f0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 11700 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 11710 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
11720 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 11730 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 y " bytes\n"].. 11740 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 11750 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 11760 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f set memo 11770 72 79 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 20 ry invalid.... 11780 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
11790 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
117a0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $117b0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 117c0 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d rgs$memory \n].
117d0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
117e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
117f0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
11800 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e   set memory unkn
11810 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  own....        i
11820 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 11830 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 11840 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
11850 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 11860 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 11870 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 11880 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
11890 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
118a0 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c  proc checkForSQL
118b0 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 7b  iteDirectories {
118c0 20 63 68 61 6e 6e 65 6c 20 7b 72 65 73 65 74 20   channel {reset
118d0 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
118e0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
118f0 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
11900 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
11910 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63  t_directory func
11920 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
11930 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
11940 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 11950 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 l \.. " 11960 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo 11970 72 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 r function sqlit 11980 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 11990 65 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 ectory... ".... 119a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 119b0 4e 4f 54 45 3a 20 54 68 69 73 20 63 61 6c 6c 20 NOTE: This call 119c0 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 to the sqlite3_w 119d0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 119e0 72 79 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 ry function uses 119f0 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 11a00 20 20 20 20 69 6e 76 61 6c 69 64 20 76 61 6c 75 invalid valu 11a10 65 20 30 20 66 6f 72 20 74 68 65 20 66 69 72 73 e 0 for the firs 11a20 74 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 69 t argument. Thi 11a30 73 20 63 6f 64 65 20 69 73 20 64 65 73 69 67 6e s code is design 11a40 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # 11a50 20 20 74 6f 20 63 68 65 63 6b 20 69 66 20 63 61 to check if ca 11a60 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 74 69 lling the functi 11a70 6f 6e 20 77 69 6c 6c 20 72 61 69 73 65 20 61 6e on will raise an 11a80 20 65 78 63 65 70 74 69 6f 6e 20 28 69 2e 65 2e exception (i.e. 11a90 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 11aa0 74 68 65 20 61 63 74 75 61 6c 20 72 65 73 75 6c the actual resul 11ab0 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f t of the functio 11ac0 6e 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 n does not matte 11ad0 72 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d r as long as no. 11ae0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 11af0 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e irectory is chan 11b00 67 65 64 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ged)... #.. 11b10 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 11b20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 11b30 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 11b40 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 11b50 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 11b60 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 11b70 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 QLite.UnsafeNati 11b80 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 veMethods \.. 11b90 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 sqlit 11ba0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 11bb0 65 63 74 6f 72 79 20 30 20 6e 75 6c 6c 7d 5d 20 ectory 0 null}] 11bc0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 11bd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 11be0 20 23 20 4e 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 # NOTE: Calling 11bf0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e the sqlite3_win 11c00 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 11c10 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e function does n 11c20 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ot.. # 11c30 20 20 20 20 63 61 75 73 65 20 61 6e 20 65 78 63 cause an exc 11c40 65 70 74 69 6f 6e 3b 20 74 68 65 72 65 66 6f 72 eption; therefor 11c50 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 61 76 e, it must be av 11c60 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 ailable (i.e... 11c70 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 # e 11c80 76 65 6e 20 74 68 6f 75 67 68 20 69 74 20 73 68 ven though it sh 11c90 6f 75 6c 64 20 72 65 74 75 72 6e 20 61 20 66 61 ould return a fa 11ca0 69 6c 75 72 65 20 72 65 74 75 72 6e 20 63 6f 64 ilure return cod 11cb0 65 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 e in this.. 11cc0 20 20 20 23 20 20 20 20 20 20 20 63 61 73 65 29 # case) 11cd0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 11ce0 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra 11cf0 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 int sqlite3_win3 11d00 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 0d 2_set_directory. 11d10 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs 11d20 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d$channel yes\n.
11d30 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
11d40 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f        # NOTE: Do
11d50 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61  es our caller wa
11d60 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20  nt to reset the
11d70 64 69 72 65 63 74 6f 72 69 65 73 3f 0d 0a 20 20  directories?..
11d80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11d90 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65   if {$reset} the 11da0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 11db0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 11dc0 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 TE: Now make sur 11dd0 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 e the database a 11de0 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 nd temporary dir 11df0 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 ectories are.. 11e00 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 11e10 72 65 73 65 74 20 74 68 65 69 72 20 64 65 66 61 reset their defa 11e20 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 ult values, whic 11e30 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c h should be null 11e40 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 for both... 11e50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 69 # Si 11e60 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f nce the sqlite3_ 11e70 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 11e80 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 ory function is 11e90 61 76 61 69 6c 61 62 6c 65 2c 0d 0a 20 20 20 20 available,.. 11ea0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 # us 11eb0 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 e it... 11ec0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f #.. fo 11ed0 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20 r {set index 1} 11ee0 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20 7b 69 6e {$index < 3} {in
11ef0 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20  cr index} {..
11f00 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
11f10 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
11f20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
11f30 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
11f40 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11f60 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
11f70 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
11f80 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20  eMethods \..
11f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11fa0 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
11fb0 74 5f 64 69 72 65 63 74 6f 72 79 20 24 69 6e 64  t_directory $ind 11fc0 65 78 20 6e 75 6c 6c 7d 20 5c 0d 0a 20 20 20 20 ex null} \.. 11fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11fe0 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 11ff0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 12000 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
12010 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
12020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
12030 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73      "---- call s
12040 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
12050 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e  _directory(" $in 12060 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 dex \.. 12070 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c ", null 12080 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 )... ok: "$resu
12090 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  lt \n]..
120a0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
120b0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
120c0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 120d0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 120e0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 120f0 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 - call sqlite3_w 12100 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 12110 72 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 ry("$index \..
12120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12130 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72   ", null)... err
12140 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75  or: " \n\t $resu 12150 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 12160 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 12170 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 12180 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 12190 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
121a0 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20  annel no\n....
121b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
121c0 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75   # NOTE: Does ou
121d0 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f  r caller want to
121e0 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63   reset the direc
121f0 74 6f 72 69 65 73 3f 20 20 54 68 69 73 20 63 61  tories?  This ca
12200 6e 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  n only..
12210 23 20 20 20 20 20 20 20 62 65 20 70 65 72 66 6f  #       be perfo
12220 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  rmed if SQLite i
12230 73 20 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 61  s loaded and rea
12240 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  dy for use by th
12250 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  e test..
12260 23 20 20 20 20 20 20 20 73 75 69 74 65 2e 0d 0a  #       suite...
12270 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12280 20 20 20 69 66 20 7b 24 72 65 73 65 74 20 26 26     if {$reset && 12290 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d [isSQLiteReady] 122a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 122b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 122c0 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b # NOTE: Now mak 122d0 65 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 e sure the datab 122e0 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 ase and temporar 122f0 79 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 y directories ar 12300 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 e.. # 12310 20 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72 reset their 12320 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c default values, 12330 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 which should be 12340 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d null for both.. 12350 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 12360 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c Since the sql 12370 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d 12380 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f irectory functio 12390 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 n does not.. 123a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 # ap 123b0 70 65 61 72 20 74 6f 20 62 65 20 61 76 61 69 6c pear to be avail 123c0 61 62 6c 65 2c 20 75 73 65 20 74 68 65 20 61 73 able, use the as 123d0 73 6f 63 69 61 74 65 64 20 50 52 41 47 4d 41 20 sociated PRAGMA 123e0 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20 20 commands.. 123f0 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 74 # inst 12400 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ead... 12410 23 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 #.. for 12420 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b each directory [ 12430 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f list data_store_ 12440 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 directory temp_s 12450 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 tore_directory] 12460 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 {.. s 12470 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 et sql [appendAr 12480 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 gs "PRAGMA "$di
12490 72 65 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c 22  rectory " = \"\"
124a0 3b 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ;"]....
124b0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65     if {[catch {e
124c0 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c 7d 20  xecuteSql $sql} 124d0 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 124e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 124f0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
12500 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
12510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
12520 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74      "---- execut
12530 65 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65  e PRAGMA " $dire 12540 63 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a 20 5c ctory "... ok: \ 12550 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 12560 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20$result
12570 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  \"\n]..
12580 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
12590 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
125a0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 125b0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 125c0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 125d0 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 execute PRAGMA 125e0 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e "$directory "..
125f0 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20  . error: " \..
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12610 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d  \n\t $result \n] 12620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 12630 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 12640 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 12650 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 12660 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c # NOTE: Final 12670 6c 79 2c 20 73 68 6f 77 20 74 68 65 20 63 75 72 ly, show the cur 12680 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 rent value of th 12690 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 e database and t 126a0 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 emporary.. 126b0 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 126c0 69 65 73 2e 20 20 54 68 69 73 20 63 61 6e 20 6f ies. This can o 126d0 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 nly be performed 126e0 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f if SQLite is lo 126f0 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 aded.. # 12700 20 20 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f and ready fo 12710 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 r use by the tes 12720 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... 12730 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 #.. if {[is 12740 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 SQLiteReady]} th 12750 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f en {.. fo 12760 72 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 reach directory 12770 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 [list data_store 12780 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f _directory temp_ 12790 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d store_directory] 127a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 127b0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
127c0 70 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63  pendArgs "---- c
127d0 68 65 63 6b 69 6e 67 20 22 20 24 64 69 72 65 63  hecking " $direc 127e0 74 6f 72 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a tory "... "].... 127f0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71 set sq 12800 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 l [appendArgs "P 12810 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f RAGMA "$directo
12820 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20  ry \;]....
12830 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
12840 65 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c 20  executeSql $sql 12850 73 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 scalar} result] 12860 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 12870 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 12880 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
12890 41 72 67 73 20 22 6f 6b 3a 20 5c 22 22 20 24 72  Args "ok: \"" $r 128a0 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 esult \"\n].. 128b0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 128c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 128d0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
128e0 65 6e 64 41 72 67 73 20 22 65 72 72 6f 72 3a 20  endArgs "error:
128f0 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c  " \n\t $result \ 12900 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 12910 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 12920 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 12930 20 20 20 70 72 6f 63 20 6c 6f 61 64 53 51 4c 69 proc loadSQLi 12940 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 7b teTestSettings { 12950 20 63 68 61 6e 6e 65 6c 20 7b 73 75 66 66 69 78 channel {suffix 12960 20 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 ""} {quiet fals 12970 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 12980 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 . # NOTE: S 12990 6b 69 70 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 kip loading the 129a0 73 65 74 74 69 6e 67 73 20 69 66 20 74 68 65 69 settings if thei 129b0 72 20 75 73 61 67 65 20 68 61 73 20 62 65 65 6e r usage has been 129c0 20 64 69 73 61 62 6c 65 64 2e 0d 0a 20 20 20 20 disabled... 129d0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 129e0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 129f0 6f 28 73 71 6c 69 74 65 54 65 73 74 53 65 74 74 o(sqliteTestSett 12a00 69 6e 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a ings)]} then {.. 12a10 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 12a20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 # NOTE: Load 12a30 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 custom per-user 12a40 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 and/or per-host 12a50 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f test settings no 12a60 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 w... #.. 12a70 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info 12a80 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c exists ::tcl_pl 12a90 61 74 66 6f 72 6d 28 75 73 65 72 29 5d 7d 20 74 atform(user)]} t 12aa0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 12ab0 20 73 65 74 20 75 73 65 72 53 65 74 74 69 6e 67 set userSetting 12ac0 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 sFileName [file 12ad0 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 join [getCommonD 12ae0 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 irectory] \.. 12af0 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 [appe 12b00 6e 64 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 ndArgs settings 12b10 24 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c$suffix . $::tcl 12b20 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 20 _platform(user) 12b30 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 .eagle]].... 12b40 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 12b50 65 78 69 73 74 73 20 24 75 73 65 72 53 65 74 74 exists$userSett
12b60 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74  ingsFileName]} t
12b70 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
12b80 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 12b90 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12ba0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
12bb0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
12bc0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
12bd0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64        "---- load
12be0 69 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 73  ing per-user tes
12bf0 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20  t settings file
12c00 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
12c10 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65           $userSe 12c20 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c ttingsFileName \ 12c30 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 "...\n].. 12c40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 12c50 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 12c60 20 7b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 {uplevel 1 [lis 12c70 74 20 73 6f 75 72 63 65 20 24 75 73 65 72 53 65 t source$userSe
12c80 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d  ttingsFileName]}
12c90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
12ca0 20 20 20 20 20 20 20 20 65 72 72 6f 72 5d 7d 20          error]}
12cb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12cc0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 12cd0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 12ce0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 12cf0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
12d00 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
12d20 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
12d30 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 75  ed to load per-u
12d40 73 65 72 20 73 65 74 74 69 6e 67 73 20 66 69 6c  ser settings fil
12d50 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73               $us 12d70 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 erSettingsFileNa 12d80 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 me "\", error: " 12d90 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d \n\t$error \n]
12da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
12db0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
12dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
12dd0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
12de0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 12df0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 12e00 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
12e10 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
12e20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
12e30 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
12e40 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75  ed loading per-u
12e50 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67  ser test setting
12e60 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20  s file \"" \..
12e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12e80 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c  $userSettingsFil 12e90 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f eName "\", it do 12ea0 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d es not exist\n"] 12eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 12ec0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 12ed0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 12ee0 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ############# 12ef0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 12f00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 12f10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 12f20 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 ##########.... 12f30 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 12f40 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 exists ::tcl_pla 12f50 74 66 6f 72 6d 28 68 6f 73 74 29 5d 7d 20 74 68 tform(host)]} th 12f60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 12f70 73 65 74 20 68 6f 73 74 53 65 74 74 69 6e 67 73 set hostSettings 12f80 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a FileName [file j 12f90 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 oin [getCommonDi 12fa0 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 rectory] \.. 12fb0 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e [appen 12fc0 64 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 dArgs settings$
12fd0 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f  suffix . $::tcl_ 12fe0 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 20 2e platform(host) . 12ff0 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 eagle]].... 13000 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 if {[file e 13010 78 69 73 74 73 20 24 68 6f 73 74 53 65 74 74 69 xists$hostSetti
13020 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  ngsFileName]} th
13030 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
13040 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 13050 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 13060 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
13070 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
13080 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
13090 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69       "---- loadi
130a0 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74  ng per-host test
130b0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c   settings file \
130c0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
130d0 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74          $hostSet 130e0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 tingsFileName \" 130f0 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ...\n].. 13100 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 13110 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 13120 7b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 {uplevel 1 [list 13130 20 73 6f 75 72 63 65 20 24 68 6f 73 74 53 65 74 source$hostSet
13140 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20  tingsFileName]}
13150 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
13160 20 20 20 20 20 20 20 65 72 72 6f 72 5d 7d 20 74         error]} t
13170 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
13180 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 13190 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 131a0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 131b0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
131c0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
131d0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
131e0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
131f0 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 68 6f  d to load per-ho
13200 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65  st settings file
13210 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
13220 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73              $hos 13230 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d tSettingsFileNam 13240 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 e "\", error: " 13250 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
13260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
13270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
13280 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
13290 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
132a0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 132b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 132c0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
132d0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
132e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
132f0 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
13300 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f  d loading per-ho
13310 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  st test settings
13320 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20   file \"" \..
13330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $13340 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 hostSettingsFile 13350 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 Name "\", it doe 13360 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. 13370 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 13380 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 13390 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 133a0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 133b0 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 roc runSQLiteTes 133c0 74 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a tPrologue {} {.. 133d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 133e0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e NOTE: Skip runn 133f0 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 70 ing our custom p 13400 72 6f 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d rologue if the m 13410 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e ain one has been 13420 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 13430 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 skipped... 13440 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 #.. if {![i 13450 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 13460 70 72 6f 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d prologue.eagle)] 13470 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 13480 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 13490 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 62 OTE: Load the "b 134a0 65 66 6f 72 65 2d 63 6f 6e 73 74 72 61 69 6e 74 efore-constraint 134b0 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 s" custom per-us 134c0 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f er and/or per-ho 134d0 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 134e0 20 20 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 test setting 134f0 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 s now... 13500 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 #.. uplev 13510 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 el 1 [list loadS 13520 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 QLiteTestSetting 13530 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
13540 6c 20 2e 62 65 66 6f 72 65 5d 0d 0a 0d 0a 20 20  l .before]....
13550 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13560 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c   # NOTE: Skip al
13570 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  l System.Data.SQ
13580 4c 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c  Lite related fil
13590 65 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65  e handling (dele
135a0 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23  ting,..        #
135b0 20 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20         copying,
135c0 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20  and loading) if
135d0 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75  we are so instru
135e0 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  cted...        #
135f0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
13600 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
13610 28 73 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20  (sqliteFiles)]}
13620 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
13630 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
13640 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69   NOTE: Skip tryi
13650 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79  ng to delete any
13660 20 66 69 6c 65 73 20 69 66 20 77 65 20 61 72 65   files if we are
13670 20 73 6f 20 69 6e 73 74 72 75 63 74 65 64 2e 0d   so instructed..
13680 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
13690 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
136a0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64  fo exists ::no(d
136b0 65 6c 65 74 65 53 71 6c 69 74 65 46 69 6c 65 73  eleteSqliteFiles
136c0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
136d0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
136e0 65 41 73 73 65 6d 62 6c 79 20 73 71 6c 69 74 65  eAssembly sqlite
136f0 33 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20  3.dll..
13700 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61     removeConstra
13710 69 6e 74 20 66 69 6c 65 5f 73 71 6c 69 74 65 33  int file_sqlite3
13720 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .dll....
13730 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73      tryDeleteAss
13740 65 6d 62 6c 79 20 53 51 4c 69 74 65 2e 49 6e 74  embly SQLite.Int
13750 65 72 6f 70 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  erop.dll..
13760 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73        removeCons
13770 74 72 61 69 6e 74 20 66 69 6c 65 5f 53 51 4c 69  traint file_SQLi
13780 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a  te.Interop.dll..
13790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
137a0 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
137b0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
137c0 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20  te.dll..
137d0 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72      removeConstr
137e0 61 69 6e 74 20 66 69 6c 65 5f 53 79 73 74 65 6d  aint file_System
137f0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
13800 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
13810 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c  tryDeleteAssembl
13820 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  y System.Data.SQ
13830 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20  Lite.Linq.dll..
13840 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76             remov
13850 65 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65  eConstraint file
13860 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  _System.Data.SQL
13870 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20  ite.Linq.dll..
13880 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
13890 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
138a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
138b0 6b 20 66 6f 72 20 74 68 65 20 22 61 75 74 6f 53  k for the "autoS
138c0 65 6c 65 63 74 22 20 72 75 6e 74 69 6d 65 20 6f  elect" runtime o
138d0 70 74 69 6f 6e 2e 20 20 49 66 20 70 72 65 73 65  ption.  If prese
138e0 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23  nt,..          #
138f0 20 20 20 20 20 20 20 61 74 74 65 6d 70 74 20 74         attempt t
13900 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  o automatically
13910 73 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 74  select the first
13920 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20   available..
13930 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75        #       bu
13940 69 6c 64 20 28 6f 72 20 22 72 65 6c 65 61 73 65  ild (or "release
13950 22 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64  ") of SQLite and
13960 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
13970 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ite..          #
13980 20 20 20 20 20 20 20 66 6f 72 20 75 73 65 20 77         for use w
13990 69 74 68 20 74 68 65 20 74 65 73 74 20 73 75 69  ith the test sui
139a0 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  te...          #
139b0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
139c0 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f  [hasRuntimeOptio
139d0 6e 20 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74  n autoSelect]} t
139e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
139f0 20 20 20 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f     if {![checkFo
13a00 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a  rSQLiteBuilds $: 13a10 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 :test_channel tr 13a20 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ue]} then {.. 13a30 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 13a40 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 ForSQLiteRelease 13a50 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
13a60 6c 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20  l true..
13a70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
13a80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
13a90 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
13aa0 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67  OTE: Skip trying
13ab0 20 74 6f 20 76 65 72 69 66 79 20 74 68 65 20 62   to verify the b
13ac0 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69  uild directory i
13ad0 66 20 77 65 20 61 72 65 20 73 6f 0d 0a 20 20 20  f we are so..
13ae0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
13af0 6e 73 74 72 75 63 74 65 64 3b 20 6f 74 68 65 72  nstructed; other
13b00 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  wise, make sure
13b10 69 74 20 61 63 74 75 61 6c 6c 79 20 65 78 69 73  it actually exis
13b20 74 73 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  ts or..
13b30 20 23 20 20 20 20 20 20 20 68 61 6c 74 20 74 68   #       halt th
13b40 65 20 65 6e 74 69 72 65 20 74 65 73 74 69 6e 67  e entire testing
13b50 20 70 72 6f 63 65 73 73 20 69 66 20 69 74 20 64   process if it d
13b60 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a  oes not exist...
13b70 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
13b80 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
13b90 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 76 65  o exists ::no(ve
13ba0 72 69 66 79 42 75 69 6c 64 44 69 72 65 63 74 6f  rifyBuildDirecto
13bb0 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ry)]} then {..
13bc0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
13bd0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
13be0 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point,
13bf0 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74  the build direct
13c00 6f 72 79 20 4d 55 53 54 20 65 78 69 73 74 20 61  ory MUST exist a
13c10 73 20 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s a..
13c20 20 23 20 20 20 20 20 20 20 76 61 6c 69 64 20 64   #       valid d
13c30 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65  irectory for the
13c40 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
13c50 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20   to continue...
13c60 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
13c70 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69            set di
13c80 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75 69 6c  rectory [getBuil
13c90 64 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20  dDirectory]....
13ca0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
13cb0 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 64 69  [file exists $di 13cc0 72 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 rectory] || \.. 13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 ! 13ce0 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 [file isdirector 13cf0 79 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 y$directory]} t
13d00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
13d10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
13d20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4a 75        # NOTE: Ju
13d30 73 74 20 70 72 69 6f 72 20 74 6f 20 61 63 74 75  st prior to actu
13d40 61 6c 6c 79 20 68 61 6c 74 69 6e 67 20 74 68 65  ally halting the
13d50 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
13d60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..
13d70 20 23 20 20 20 20 20 20 20 61 64 64 20 61 6e 20   #       add an
13d80 65 72 72 6f 72 20 74 6f 20 74 68 65 20 74 65 73  error to the tes
13d90 74 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20  t log file...
13da0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
13db0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
13dc0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 13dd0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 13de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 13df0 20 20 20 22 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e "---- could n 13e00 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 ot verify build 13e10 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 directory \""$d
13e20 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20  irectory \..
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
13e40 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68  ", all testing h
13e50 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20  alted\n"]....
13e60 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
13e70 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
13e80 54 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63  TE: Raising a sc
13e90 72 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20  ript error from
13ea0 74 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c  this point shoul
13eb0 64 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20  d halt..
13ec0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
13ed0 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73  e testing proces
13ee0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...
13ef0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
13f00 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64     error [append
13f10 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
13f20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
13f30 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c   not verify buil
13f40 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20  d directory \""
13f50 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20  $directory \.. 13f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13f70 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 "\", all testing 13f80 20 68 61 6c 74 65 64 22 5d 0d 0a 20 20 20 20 20 halted"].. 13f90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 13fa0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 13fb0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 13fc0 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 # NOTE: Skip try 13fd0 69 6e 67 20 74 6f 20 63 6f 70 79 20 61 6e 79 20 ing to copy any 13fe0 66 69 6c 65 73 20 69 66 20 77 65 20 61 72 65 20 files if we are 13ff0 73 6f 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a so instructed... 14000 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 14010 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 14020 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 14030 70 79 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d pySqliteFiles)]} 14040 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 14050 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 tryCopyAsse 14060 6d 62 6c 79 20 73 71 6c 69 74 65 33 2e 64 6c 6c mbly sqlite3.dll 14070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 .. tr 14080 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 51 yCopyAssembly SQ 14090 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c Lite.Interop.dll 140a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 .. tr 140b0 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 79 yCopyAssembly Sy 140c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 140d0 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 140e0 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c tryCopyAssembl 140f0 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 14100 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 Lite.Linq.dll.. 14110 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 14120 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 14130 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 14140 70 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f 61 64 p trying to load 14150 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 77 65 any files if we 14160 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75 63 74 are so instruct 14170 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ed... # 14180 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 14190 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 141a0 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c no(loadSqliteFil 141b0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 141c0 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 141d0 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 141e0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 141f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 .. tr 14200 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 yLoadAssembly Sy 14210 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 14220 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 .Linq.dll.. 14230 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 14240 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 14250 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 # NOTE: Skip tr 14260 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 65 ying to delete e 14270 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 69 66 xternal files if 14280 20 77 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 we are so instr 14290 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 ucted... 142a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 142b0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 142c0 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 142d0 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 teExternalFiles) 142e0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 142f0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 14300 42 75 69 6c 64 46 69 6c 65 20 49 6e 73 74 61 6c BuildFile Instal 14310 6c 65 72 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 ler.exe.mda.conf 14320 69 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ig.. 14330 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 tryDeleteBuildFi 14340 6c 65 20 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e le test.exe.mda. 14350 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 20 20 config.. 14360 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 75 69 tryDeleteBui 14370 6c 64 46 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e ldFile testlinq. 14380 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 0d 0a exe.mda.config.. 14390 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 143a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 143b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 143c0 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 ip trying to cop 143d0 79 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 y external files 143e0 20 69 66 20 77 65 20 61 72 65 20 73 6f 20 69 6e if we are so in 143f0 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 structed... 14400 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14410 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 14420 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 14430 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 iteExternalFiles 14440 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 14450 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 14460 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 14470 6f 70 79 20 74 68 65 20 4d 44 41 20 63 6f 6e 66 opy the MDA conf 14480 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 20 66 iguration file f 14490 6f 72 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 or the Eagle she 144a0 6c 6c 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 ll to the.. 144b0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 144c0 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 uild output dire 144d0 63 74 6f 72 79 3b 20 68 6f 77 65 76 65 72 2c 20 ctory; however, 144e0 75 73 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 use the name of 144f0 74 68 65 20 6c 65 67 61 63 79 0d 0a 20 20 20 20 the legacy.. 14500 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 14510 74 65 73 74 20 65 78 65 63 75 74 61 62 6c 65 2e test executable. 14520 20 20 54 68 69 73 20 77 69 6c 6c 20 6d 61 6b 65 This will make 14530 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 6c sure that the l 14540 65 67 61 63 79 20 74 65 73 74 73 0d 0a 20 20 20 egacy tests.. 14550 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 14560 20 72 75 6e 20 77 69 74 68 20 74 68 65 20 73 61 run with the sa 14570 6d 65 20 73 65 74 20 6f 66 20 4d 44 41 73 20 63 me set of MDAs c 14580 6f 6e 66 69 67 75 72 65 64 2e 0d 0a 20 20 20 20 onfigured... 14590 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 145a0 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 69 tryCopyBi 145b0 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68 naryFile EagleSh 145c0 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 ell.exe.mda.conf 145d0 69 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 ig Installer.exe 145e0 2e 6d 64 61 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 .mda.config.. 145f0 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 tryCopy 14600 42 69 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65 BinaryFile Eagle 14610 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f Shell.exe.mda.co 14620 6e 66 69 67 20 74 65 73 74 2e 65 78 65 2e 6d 64 nfig test.exe.md 14630 61 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20 20 a.config.. 14640 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e tryCopyBin 14650 61 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65 aryFile EagleShe 14660 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 ll.exe.mda.confi 14670 67 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d g testlinq.exe.m 14680 64 61 2e 63 6f 6e 66 69 67 0d 0a 20 20 20 20 20 da.config.. 14690 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 146a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat 146b0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 146c0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
146d0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
146e0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
146f0 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
14700 72 73 69 6f 6e 20 6f 66 20 5c 22 73 71 6c 69 74  rsion of \"sqlit
14710 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d  e3.dll\"... " \.
14720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
14730 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65  file version [ge
14740 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
14750 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 20 5c 6e  sqlite3.dll]] \n
14760 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ]..        }....
14770 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
14780 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
14790 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 147a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 147c0 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 147d0 20 6f 66 20 5c 22 53 51 4c 69 74 65 2e 49 6e 74 of \"SQLite.Int 147e0 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 erop.dll\"... " 147f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14800 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b [file version [ 14810 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 14820 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 e SQLite.Interop 14830 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 .dll]] \n].. 14840 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 14850 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 14860 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
14870 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
14880 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
14890 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
148a0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53  e version of \"S
148b0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
148c0 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a  e.dll\"... " \..
148d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
148e0 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74  ile version [get
148f0 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53  BinaryFileName S
14900 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
14910 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20  e.dll]] \n]..
14920 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
14930 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
14940 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 14950 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 14960 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 14970 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 14980 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 14990 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 149a0 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e te.Linq.dll\"... 149b0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 149c0 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f [file versio 149d0 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 n [getBinaryFile 149e0 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 Name System.Data 149f0 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c .SQLite.Linq.dll 14a00 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. 14a10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 }.... set 14a20 20 61 73 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a assemblies [obj 14a30 65 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f ect invoke AppDo 14a40 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 main.CurrentDoma 14a50 69 6e 20 47 65 74 41 73 73 65 6d 62 6c 69 65 73 in GetAssemblies 14a60 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a ].... obj 14a70 65 63 74 20 66 6f 72 65 61 63 68 20 61 73 73 65 ect foreach asse 14a80 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 73 mbly$assemblies
14a90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
14aa0 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20   {[string match
14ab0 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  \{System.Data.SQ
14ac0 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d  Lite* $assembly] 14ad0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14ae0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
14af0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
14b00 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
14b10 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
14b20 20 66 6f 75 6e 64 20 61 73 73 65 6d 62 6c 79 3a   found assembly:
14b30 20 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d   " $assembly \n] 14b40 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 14b50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 14b60 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 14b70 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
14b80 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
14ba0 2d 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74  --- define const
14bb0 61 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65  ants for \"Syste
14bc0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e  m.Data.SQLite\".
14bd0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .. "....
14be0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62    if {[catch {ob
14bf0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
14c00 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
14c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
14c20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
14c30 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65  QLite.SQLite3 De
14c40 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 7d 20 5c  fineConstants} \
14c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14c60 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61      defineConsta
14c70 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  nts] == 0} then
14c80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
14c90 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 14ca0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 14cb0 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 [formatList [ls 14cc0 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ort \.. 14cd0 20 20 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f$defineCo
14ce0 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d  nstants] <none>]
14cf0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
14d00 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
14d10 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 14d20 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn 14d30 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. 14d40 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 14d50 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 14d60 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 14d70 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
14d80 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
14d90 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20     "---- source
14da0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73  version of \"Sys
14db0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
14dc0 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  dll\"... "....
14dd0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
14de0 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ch {object invok
14df0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
14e00 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
14e10 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
14e20 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
14e30 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f  teConnection Pro
14e40 76 69 64 65 72 56 65 72 73 69 6f 6e 7d 20 5c 0d  viderVersion} \.
14e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
14e60 20 20 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30     version] == 0
14e70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
14e80 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
14e90 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f  g length $versio 14ea0 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d n] == 0} then {. 14eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 . s 14ec0 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d et version null. 14ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 14ee0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 14ef0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
14f00 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 76  l [appendArgs $v 14f10 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 20 ersion \n].. 14f20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 14f30 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 14f40 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
14f50 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20  l unknown\n..
14f60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
14f70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
14f80 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
14f90 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 14fa0 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 14fb0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 14fc0 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74 20 6f ource checkout o 14fd0 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e f \"System.Data. 14fe0 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 SQLite.dll\"... 14ff0 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ".... i 15000 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 f {[catch {objec 15010 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 15020 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15040 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 15050 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 te.SQLiteConnect 15060 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 72 ion ProviderSour 15070 63 65 49 64 7d 20 5c 0d 0a 20 20 20 20 20 20 20 ceId} \.. 15080 20 20 20 20 20 20 20 20 20 20 20 73 6f 75 72 63 sourc 15090 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 eId] == 0} then 150a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 150b0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 150c0 68 20 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 h$sourceId] ==
150d0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
150e0 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75           set sou
150f0 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20  rceId null..
15100 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
15110 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 15120 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 15130 70 65 6e 64 41 72 67 73 20 24 73 6f 75 72 63 65 pendArgs$source
15140 49 64 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  Id \n]..
15150 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
15160 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 15170 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e :test_channel un 15180 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 known\n.. 15190 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 151a0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 151b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 151c0 65 63 6b 20 74 68 65 20 61 76 61 69 6c 61 62 6c eck the availabl 151d0 65 20 62 75 69 6c 64 73 20 28 61 6e 64 20 22 72 e builds (and "r 151e0 65 6c 65 61 73 65 73 22 29 20 6f 66 20 53 51 4c eleases") of SQL 151f0 69 74 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 ite and.. 15200 20 23 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e # System. 15210 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20 Data.SQLite... 15220 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 15230 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 checkForSQLiteB 15240 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f 63 68 uilds$::test_ch
15250 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 20 20 63  annel..        c
15260 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c  heckForSQLiteRel
15270 65 61 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 68  eases $::test_ch 15280 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 annel.... 15290 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 152a0 54 45 3a 20 4e 6f 77 2c 20 77 65 20 6e 65 65 64 TE: Now, we need 152b0 20 74 6f 20 6b 6e 6f 77 20 69 66 20 74 68 65 20 to know if the 152c0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 152d0 61 72 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 ary is available 152e0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 152f0 20 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20 (i.e. because 15300 74 68 65 20 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79 the managed-only 15310 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 15320 69 74 65 20 61 73 73 65 6d 62 6c 79 20 63 61 6e ite assembly can 15330 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 15340 20 20 6c 6f 61 64 20 77 69 74 68 6f 75 74 20 69 load without i 15350 74 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 63 t; however, it c 15360 61 6e 6e 6f 74 20 64 6f 20 61 6e 79 74 68 69 6e annot do anythin 15370 67 20 75 73 65 66 75 6c 20 77 69 74 68 6f 75 74 g useful without 15380 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 15390 20 20 69 74 29 2e 20 20 49 66 20 77 65 20 61 72 it). If we ar 153a0 65 20 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65 e using the mixe 153b0 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 d-mode assembly 153c0 61 6e 64 20 77 65 20 61 6c 72 65 61 64 79 0d 0a and we already.. 153d0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 153e0 66 6f 75 6e 64 20 69 74 20 28 61 62 6f 76 65 29 found it (above) 153f0 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c , this should al 15400 77 61 79 73 20 73 75 63 63 65 65 64 2e 0d 0a 20 ways succeed... 15410 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 15420 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 checkForSQLite 15430 4c 69 62 72 61 72 79 20 24 3a 3a 74 65 73 74 5f Library$::test_
15440 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20  channel....
15450 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
15460 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
15470 68 65 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f  he SQLite intero
15480 70 20 61 73 73 65 6d 62 6c 79 20 69 73 20 61 76  p assembly is av
15490 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  ailable...
154a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65    #..        che
154b0 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 72  ckForSQLiteInter
154c0 6f 70 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  op $::test_chann 154d0 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d el.... #. 154e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 154f0 20 43 68 65 63 6b 20 74 68 65 20 53 51 4c 69 74 Check the SQLit 15500 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 e database and t 15510 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f emporary directo 15520 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ries... # 15530 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 15540 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 orSQLiteDirector 15550 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ies$::test_chan
15560 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  nel....        #
15570 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
15580 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74  : Attempt to det
15590 65 72 6d 69 6e 65 20 69 66 20 76 61 72 69 6f 75  ermine if variou
155a0 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  s compile-time o
155b0 70 74 69 6f 6e 73 20 6e 65 65 64 65 64 20 66 6f  ptions needed fo
155c0 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  r..        #
155d0 20 20 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69     test constrai
155e0 6e 74 73 20 77 65 72 65 20 65 6e 61 62 6c 65 64  nts were enabled
155f0 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 64   for the managed
15600 20 61 73 73 65 6d 62 6c 79 2e 20 20 54 68 65 72   assembly.  Ther
15610 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
15620 20 20 20 61 72 65 20 73 6f 6d 65 20 63 6f 6d 70     are some comp
15630 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
15640 20 74 68 61 74 20 6d 75 73 74 20 61 6c 73 6f 20   that must also
15650 68 61 76 65 20 62 65 65 6e 20 65 6e 61 62 6c 65  have been enable
15660 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  d..        #
15670 20 20 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72     for the inter
15680 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 6e 20 6f  op assembly in o
15690 72 64 65 72 20 74 6f 20 62 65 20 65 66 66 65 63  rder to be effec
156a0 74 69 76 65 2e 20 20 46 6f 72 20 74 68 6f 73 65  tive.  For those
156b0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
156c0 20 20 6f 70 74 69 6f 6e 73 2c 20 69 74 20 77 69    options, it wi
156d0 6c 6c 20 62 65 20 61 73 73 75 6d 65 64 20 74 68  ll be assumed th
156e0 61 74 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65  at it was enable
156f0 64 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f  d for the intero
15700 70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  p..        #
15710 20 20 20 61 73 73 65 6d 62 6c 79 20 69 66 20 69     assembly if i
15720 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f  t was enabled fo
15730 72 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73  r the managed as
15740 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20  sembly...
15750 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65   #..        fore
15760 61 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 61  ach defineConsta
15770 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  nt [list \..
15780 20 20 20 20 20 20 20 20 43 48 45 43 4b 5f 53 54          CHECK_ST
15790 41 54 45 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45  ATE COUNT_HANDLE
157a0 20 44 45 42 55 47 20 49 4e 54 45 52 4f 50 5f 43   DEBUG INTEROP_C
157b0 4f 44 45 43 20 49 4e 54 45 52 4f 50 5f 44 45 42  ODEC INTEROP_DEB
157c0 55 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  UG \..
157d0 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53    INTEROP_EXTENS
157e0 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e  ION_FUNCTIONS IN
157f0 54 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f  TEROP_LEGACY_CLO
15800 53 45 20 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 5c  SE INTEROP_LOG \
15810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e  ..            IN
15820 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e  TEROP_TEST_EXTEN
15830 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 56 49 52  SION INTEROP_VIR
15840 54 55 41 4c 5f 54 41 42 4c 45 20 4e 45 54 5f 32  TUAL_TABLE NET_2
15850 30 20 4e 45 54 5f 33 35 20 5c 0d 0a 20 20 20 20  0 NET_35 \..
15860 20 20 20 20 20 20 20 20 4e 45 54 5f 34 30 20 4e          NET_40 N
15870 45 54 5f 34 35 20 4e 45 54 5f 43 4f 4d 50 41 43  ET_45 NET_COMPAC
15880 54 5f 32 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f  T_20 PLATFORM_CO
15890 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 20 5c  MPACTFRAMEWORK \
158a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 52  ..            PR
158b0 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42  ELOAD_NATIVE_LIB
158c0 52 41 52 59 20 52 45 54 41 52 47 45 54 41 42 4c  RARY RETARGETABL
158d0 45 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52  E SQLITE_STANDAR
158e0 44 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  D \..
158f0 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53   THROW_ON_DISPOS
15900 45 44 20 54 52 41 43 45 20 54 52 41 43 45 5f 43  ED TRACE TRACE_C
15910 4f 4e 4e 45 43 54 49 4f 4e 20 54 52 41 43 45 5f  ONNECTION TRACE_
15920 48 41 4e 44 4c 45 20 5c 0d 0a 20 20 20 20 20 20  HANDLE \..
15930 20 20 20 20 20 20 54 52 41 43 45 5f 50 52 45 4c        TRACE_PREL
15940 4f 41 44 20 54 52 41 43 45 5f 53 54 41 54 45 4d  OAD TRACE_STATEM
15950 45 4e 54 20 54 52 41 43 45 5f 57 41 52 4e 49 4e  ENT TRACE_WARNIN
15960 47 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42  G TRACK_MEMORY_B
15970 59 54 45 53 20 5c 0d 0a 20 20 20 20 20 20 20 20  YTES \..
15980 20 20 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f      USE_INTEROP_
15990 44 4c 4c 20 55 53 45 5f 50 52 45 50 41 52 45 5f  DLL USE_PREPARE_
159a0 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20  V2 WINDOWS] {..
159b0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
159c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
159d0 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 69  eck if the compi
159e0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69  le-time option i
159f0 73 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65 20  s listed in the
15a00 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 20 20  list of..
15a10 20 20 20 23 20 20 20 20 20 20 20 22 64 65 66 69     #       "defi
15a20 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65  ne constants" ke
15a30 70 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20 74  pt track of by t
15a40 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  he managed assem
15a50 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  bly...
15a60 23 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  #..          che
15a70 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e  ckForSQLiteDefin
15a80 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73  eConstant $::tes 15a90 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e t_channel$defin
15aa0 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20  eConstant..
15ab0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
15ac0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
15ad0 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72  E: Check the cur
15ae0 72 65 6e 74 20 62 75 69 6c 64 20 79 65 61 72 2e  rent build year.
15af0 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69    Basically, thi
15b00 73 20 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20  s indicates..
15b10 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69       #       whi
15b20 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53  ch version of MS
15b30 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 56 69 73  Build and/or Vis
15b40 75 61 6c 20 53 74 75 64 69 6f 20 77 61 73 20 75  ual Studio was u
15b50 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  sed to..
15b60 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 20  #       compile
15b70 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e  the assembly bin
15b80 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74  aries under test
15b90 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
15ba0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 15bb0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 15bc0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 15bd0 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 checking for Sy 15be0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 15bf0 20 62 75 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22 build year... " 15c00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 15c10 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 year [getBuildYe 15c20 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 ar].. add 15c30 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 15c40 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65 61 72 ndArgs buildYear 15c50 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 .$year]..
15c60 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 15c70 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 15c80 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c 22 5c rgs \"$year \"\
15c90 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
15ca0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
15cb0 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65   Check the curre
15cc0 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75  nt build configu
15cd0 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68  ration.  This sh
15ce0 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20  ould normally..
15cf0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62         #       b
15d00 65 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22  e either "Debug"
15d10 20 6f 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a   or "Release"...
15d20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
15d30 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 15d40 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 15d50 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch 15d60 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste 15d70 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 m.Data.SQLite bu 15d80 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ild configuratio 15d90 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 n... ".... 15da0 20 20 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74 set configurat 15db0 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e ion [getBuildCon 15dc0 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 figuration].. 15dd0 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai 15de0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 nt [appendArgs b 15df0 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f uildConfiguratio 15e00 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f n.$configuratio
15e10 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74  n]..        tput
15e20 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 15e30 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 l [appendArgs \" 15e40 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20$configuration
15e50 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  \"\n]....
15e60 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
15e70 54 45 3a 20 54 72 79 20 74 6f 20 73 65 74 75 70  TE: Try to setup
15e80 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 63 61   an interrupt ca
15e90 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 74 68 65  llback using the
15ea0 20 73 63 72 69 70 74 20 64 65 62 75 67 67 65 72   script debugger
15eb0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
15ec0 20 20 74 68 61 74 20 77 69 6c 6c 20 63 61 6e 63    that will canc
15ed0 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75 65 72 69  el all SQL queri
15ee0 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 66  es in progress f
15ef0 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 0d  or all database.
15f00 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
15f10 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f   connections kno
15f20 77 6e 20 74 6f 20 74 68 69 73 20 69 6e 74 65 72  wn to this inter
15f30 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20  preter...
15f40 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
15f50 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
15f60 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65 72 72 75  no(sqliteInterru
15f70 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 74 68  ptCallback)]} th
15f80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
15f90 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74  setupDbInterrupt
15fa0 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 73 74  Callback $::test 15fb0 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 _channel$::test
15fc0 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 7d 0d  _log..        }.
15fd0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
15fe0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
15ff0 65 63 6b 20 66 6f 72 20 74 68 65 20 6e 61 74 69  eck for the nati
16000 76 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f  ve runtime optio
16010 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c 64 20 6d  n, which would m
16020 65 61 6e 20 77 65 20 61 72 65 0d 0a 20 20 20 20  ean we are..
16030 20 20 20 20 23 20 20 20 20 20 20 20 75 73 69 6e      #       usin
16040 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65  g the mixed-mode
16050 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20   assembly...
16060 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63      #..        c
16070 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70  heckForRuntimeOp
16080 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61  tion $::test_cha 16090 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 nnel native.... 160a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 160b0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 160c0 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74 if the test suit 160d0 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e 74 20 74 e should count t 160e0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6e he number of con 160f0 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 nections.. 16100 20 20 23 20 20 20 20 20 20 20 22 6f 70 65 6e 65 # "opene 16110 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 64 22 20 d" and "closed" 16120 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 77 68 from the pool wh 16130 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 69 en determining i 16140 66 20 61 20 74 65 73 74 0d 0a 20 20 20 20 20 20 f a test.. 16150 20 20 23 20 20 20 20 20 20 20 70 61 73 73 65 64 # passed 16160 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 74 68 69 . Disabling thi 16170 73 20 62 65 68 61 76 69 6f 72 20 69 73 20 73 6f s behavior is so 16180 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 73 61 72 metimes necessar 16190 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 20 y (e.g... 161a0 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 # during 161b0 74 68 65 20 72 65 6c 65 61 73 65 20 74 65 73 74 the release test 161c0 69 6e 67 20 70 72 6f 63 65 73 73 29 20 62 65 63 ing process) bec 161d0 61 75 73 65 20 74 68 65 72 65 20 61 72 65 20 73 ause there are s 161e0 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 20 20 20 everal.. 161f0 23 20 20 20 20 20 20 20 74 65 73 74 73 20 74 68 # tests th 16200 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 65 20 22 at rely on the " 16210 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 6f 6f 6c opened from pool 16220 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 20 67 72 " count being gr 16230 65 61 74 65 72 0d 0a 20 20 20 20 20 20 20 20 23 eater.. # 16240 20 20 20 20 20 20 20 74 68 61 6e 20 7a 65 72 6f than zero 16250 2e 20 20 54 68 65 73 65 20 74 65 73 74 73 20 6d . These tests m 16260 61 79 20 66 61 69 6c 20 64 75 65 20 74 6f 20 74 ay fail due to t 16270 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 he non-determini 16280 73 74 69 63 0d 0a 20 20 20 20 20 20 20 20 23 20 stic.. # 16290 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 20 6f behavior o 162a0 66 20 74 68 65 20 43 4c 52 20 47 43 2c 20 65 76 f the CLR GC, ev 162b0 65 6e 20 77 68 65 6e 20 74 68 65 72 65 20 69 73 en when there is 162c0 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 65 20 63 no bug in the c 162d0 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ode.. # 162e0 20 20 20 20 20 62 65 69 6e 67 20 74 65 73 74 65 being teste 162f0 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 16300 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 checkForR 16310 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a untimeOption$::
16320 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50  test_channel noP
16330 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20  oolCounts....
16340 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16350 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74  # NOTE: Report t
16360 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 67  he resource usag
16370 65 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69  e prior to runni
16380 6e 67 20 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20  ng any tests...
16390 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
163a0 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65    reportSQLiteRe
163b0 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f  sources $::test_ 163c0 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 163d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 163e0 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 61 NOTE: Show the a 163f0 63 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73 74 ctive test const 16400 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 raints... 16410 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 16420 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
16430 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d  l [appendArgs "-
16440 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a  --- constraints:
16450 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
16460 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c    [formatList [l
16470 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72 61  sort [getConstra
16480 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c  ints]] <none>] \
16490 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  n]....        #.
164a0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
164b0 20 53 61 76 65 20 74 68 65 20 74 65 73 74 20 63   Save the test c
164c0 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 75  onstraints for u
164d0 73 65 20 62 79 20 74 68 72 65 61 64 73 20 63 72  se by threads cr
164e0 65 61 74 65 64 20 69 6e 20 74 68 69 73 0d 0a 20  eated in this..
164f0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
16500 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69  pplication domai
16510 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  n.  This is nece
16520 73 73 61 72 79 20 62 65 63 61 75 73 65 20 61 6c  ssary because al
16530 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20  l the Eagle..
16540 20 20 20 20 20 23 20 20 20 20 20 20 20 22 74 65       #       "te
16550 73 74 20 63 6f 6e 74 65 78 74 22 20 69 6e 66 6f  st context" info
16560 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 2d 74  rmation is per-t
16570 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20  hread...
16580 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  #..        if {!
16590 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
165a0 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 5d  est_constraints]
165b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
165c0 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63      set ::test_c
165d0 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a 65 61  onstraints $::ea 165e0 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e 73 74 72 gle_tests(constr 165f0 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 20 aints).. 16600 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 16610 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 16620 4c 6f 61 64 20 74 68 65 20 22 61 66 74 65 72 2d Load the "after- 16630 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73 constraints" cus 16640 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 tom per-user and 16650 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 /or per-host.. 16660 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 # te 16670 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e st settings now. 16680 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 16690 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b uplevel 1 [ 166a0 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 list loadSQLiteT 166b0 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 estSettings$::t
166c0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66 74  est_channel .aft
166d0 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  er]....        #
166e0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
166f0 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 20  : Show when our
16700 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 62  tests actually b
16710 65 67 61 6e 20 28 6e 6f 77 29 2e 0d 0a 20 20 20  egan (now)...
16720 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16730 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 16740 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 16750 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 16760 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 "---- System.Da 16770 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73 20 ta.SQLite tests 16780 62 65 67 61 6e 20 61 74 20 22 20 5c 0d 0a 20 20 began at " \.. 16790 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b [clock 167a0 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 format [clock s 167b0 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 econds]] \n].. 167c0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 167d0 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c . proc runSQL 167e0 69 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65 20 iteTestEpilogue 167f0 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 16800 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 16810 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 p running our cu 16820 73 74 6f 6d 20 65 70 69 6c 6f 67 75 65 20 69 66 stom epilogue if 16830 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 the main one ha 16840 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 s been.. # 16850 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a skipped... 16860 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 16870 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 16880 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65 ::no(epilogue.e 16890 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a agle)]} then {.. 168a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 168b0 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 # NOTE: Show 168c0 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 when our tests a 168d0 63 74 75 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e ctually ended (n 168e0 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ow)... #. 168f0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
16900 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
16910 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
16920 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
16930 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
16940 74 65 20 74 65 73 74 73 20 65 6e 64 65 64 20 61  te tests ended a
16950 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  t " \..
16960 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74     [clock format
16970 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d   [clock seconds]
16980 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ] \n]....
16990 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55   #..        # BU
169a0 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 68 65  GFIX: Before che
169b0 63 6b 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20  cking the final
169c0 72 65 73 6f 75 72 63 65 73 20 69 6e 20 75 73 65  resources in use
169d0 20 62 79 20 53 51 4c 69 74 65 2c 20 6d 61 6b 65   by SQLite, make
169e0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
169f0 20 20 20 20 73 75 72 65 20 62 6f 74 68 20 6f 66      sure both of
16a00 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61   the PRAGMA rela
16a10 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61  ted directory na
16a20 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a  mes are freed...
16a30 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
16a40 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
16a50 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a  eDirectories $:: 16a60 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 test_channel tru 16a70 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e.... #.. 16a80 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 16a90 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 68 65 20 Also report the 16aa0 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 61 resource usage a 16ab0 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 fter running the 16ac0 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 tests... 16ad0 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f #.. repo 16ae0 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 rtSQLiteResource 16af0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
16b00 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  l....        #..
16b10 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
16b20 52 65 70 6f 72 74 20 74 68 65 20 63 72 69 74 69  Report the criti
16b30 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74  cal handle count
16b40 73 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20  s after running
16b50 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20  the tests...
16b60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 67      #..        g
16b70 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f  etSQLiteHandleCo
16b80 75 6e 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  unts \$::test_cha
16b90 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  nnel..      }..
16ba0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 23 23     }.....    ###
16bb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16bd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16be0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16bf0 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23 23  ########..    ##
16c00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c10 23 23 23 23 23 23 23 23 23 23 23 20 45 4e 44 20  ########### END
16c20 45 61 67 6c 65 20 4f 4e 4c 59 20 23 23 23 23 23  Eagle ONLY #####
16c30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c40 23 23 23 23 23 23 23 23 23 0d 0a 20 20 20 20 23  #########..    #
16c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c90 23 23 23 23 23 23 23 23 23 23 0d 0a 20 20 7d 0d  ##########..  }.
16ca0 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45  ...  #..  # NOTE
16cb0 3a 20 53 61 76 65 20 74 68 65 20 6e 61 6d 65 20  : Save the name
16cc0 6f 66 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  of the directory
16cd0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 73   containing this
16ce0 20 66 69 6c 65 2e 0d 0a 20 20 23 0d 0a 20 20 69   file...  #..  i
16cf0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
16d00 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72   common_director
16d10 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
16d20 73 65 74 20 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63  set common_direc
16d30 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61  tory [file dirna
16d40 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d  me [info script]
16d50 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20  ]..  }....  #..
16d60 20 23 20 4e 4f 54 45 3a 20 50 72 6f 76 69 64 65   # NOTE: Provide
16d70 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61   the System.Data
16d80 2e 53 51 4c 69 74 65 20 74 65 73 74 20 70 61 63  .SQLite test pac
16d90 6b 61 67 65 20 74 6f 20 74 68 65 20 69 6e 74 65  kage to the inte
16da0 72 70 72 65 74 65 72 2e 0d 0a 20 20 23 0d 0a 20  rpreter...  #..
16db0 20 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65   package provide
16dc0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
16dd0 69 74 65 2e 54 65 73 74 20 31 2e 30 0d 0a 7d 0d  ite.Test 1.0..}.
16de0 0a                                               .