System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 05ca873d260a61a412a569567b71f5146c154373:

• File lib/System.Data.SQLite/common.eagle — part of check-in [e161b486c4] at 2015-08-12 20:15:41 on branch trunk — Enhance test suite infrastructure to make it work properly without the interop assembly. (user: mistachkin size: 143803) [more...]

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 32 30 31 32 2c 20 32 30 31   2010, 2012, 201
0460: 33 2c 20 6f 72 20 32 30 31 35 20 62 75 69 6c 64  3, or 2015 build
0470: 20 73 79 73 74 65 6d 73 2e 20 20 54 6f 20 6f 76   systems.  To ov
0480: 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 23 20  erride..      #
0490: 20 20 20 20 20 20 74 68 69 73 20 76 61 6c 75 65        this value
04a0: 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64   via the command
04b0: 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 20 63   line, enter a c
04c0: 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74  ommand similar t
04d0: 6f 20 6f 6e 65 0d 0a 20 20 20 20 20 20 23 20 20  o one..      #
04e0: 20 20 20 20 20 6f 66 20 74 68 65 20 66 6f 6c 6c       of the foll
04f0: 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e  owing (all on on
0500: 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20  e line):..
0510: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0520: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
0530: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22  -anyInitialize "
0540: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
0550: 30 35 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  05"..      #
0560: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
0570: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
0580: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0590: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
05a0: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61  l.exe -anyInitia
05b0: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
05c0: 65 61 72 20 32 30 30 38 22 0d 0a 20 20 20 20 20  ear 2008"..
05d0: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
05e0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
05f0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
0600: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
0610: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79  leShell.exe -any
0620: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
0630: 74 65 73 74 5f 79 65 61 72 20 32 30 31 30 22 0d  test_year 2010".
0640: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
0650: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
0660: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
0670: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
0680: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
0690: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65  e -anyInitialize
06a0: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20   "set test_year
06b0: 32 30 31 32 22 0d 0a 20 20 20 20 20 20 23 20 20  2012"..      #
06c0: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
06d0: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
06e0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
06f0: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0700: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
0710: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74  ialize "set test
0720: 5f 79 65 61 72 20 32 30 31 33 22 0d 0a 20 20 20  _year 2013"..
0730: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69     #         -fi
0740: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c  le .\path\to\all
0750: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d  .eagle..      #.
0760: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45  .      #       E
0770: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61  agleShell.exe -a
0780: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65  nyInitialize "se
0790: 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 31 35  t test_year 2015
07a0: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  "..      #
07b0: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c     -file .\path\
07c0: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20  to\all.eagle..
07d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20      #..      #
07e0: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e       EagleShell.
07f0: 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69  exe -anyInitiali
0800: 7a 65 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d  ze "unset -nocom
0810: 70 6c 61 69 6e 20 74 65 73 74 5f 79 65 61 72 22  plain test_year"
0820: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
0830: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74    -file .\path\t
0840: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20  o\all.eagle..
0850: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
0860: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
0870: 65 73 74 5f 79 65 61 72 5d 20 26 26 20 5b 73 74  est_year] && [st
0880: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74  ring length $::t 0890: 65 73 74 5f 79 65 61 72 5d 20 3e 20 30 7d 20 74 est_year] > 0} t 08a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 08b0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 08c0: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 : Use the specif 08d0: 69 65 64 20 74 65 73 74 20 79 65 61 72 2e 20 20 ied test year. 08e0: 49 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 If this variable 08f0: 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 is not set, the 0900: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 0910: 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 default value 0920: 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e will be based on 0930: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 whether or not 0940: 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e 0d 0a Eagle has been.. 0950: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 0960: 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 compiled against 0970: 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 6f 72 the CLR v2.0 or 0980: 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 CLR v4.0... 0990: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 09a0: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 eturn$::test_ye
09b0: 61 72 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ar..      } else
09c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
09d0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
09e0: 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e  f Eagle has been
09f0: 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73   compiled agains
0a00: 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2c 20  t the CLR v4.0,
0a10: 75 73 65 20 22 32 30 31 30 22 20 62 79 0d 0a 20  use "2010" by..
0a20: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64         #       d
0a30: 65 66 61 75 6c 74 20 28 77 65 20 63 6f 75 6c 64  efault (we could
0a40: 20 75 73 65 20 22 32 30 31 32 22 2c 20 22 32 30   use "2012", "20
0a50: 31 33 22 2c 20 6f 72 20 22 32 30 31 35 22 20 69  13", or "2015" i
0a60: 6e 20 74 68 61 74 20 63 61 73 65 20 61 73 0d 0a  n that case as..
0a70: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
0a80: 77 65 6c 6c 29 20 61 73 20 74 68 65 20 74 65 73  well) as the tes
0a90: 74 20 79 65 61 72 3b 20 6f 74 68 65 72 77 69 73  t year; otherwis
0aa0: 65 2c 20 75 73 65 20 22 32 30 30 38 22 20 62 79  e, use "2008" by
0ab0: 20 64 65 66 61 75 6c 74 20 28 77 65 0d 0a 20 20   default (we..
0ac0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
0ad0: 75 6c 64 20 75 73 65 20 22 32 30 30 35 22 20 69  uld use "2005" i
0ae0: 6e 20 74 68 61 74 20 63 61 73 65 20 61 73 20 77  n that case as w
0af0: 65 6c 6c 29 2e 20 20 49 66 20 61 6e 6f 74 68 65  ell).  If anothe
0b00: 72 20 6d 61 6a 6f 72 0d 0a 20 20 20 20 20 20 20  r major..
0b10: 20 23 20 20 20 20 20 20 20 5b 69 6e 63 6f 6d 70   #       [incomp
0b20: 61 74 69 62 6c 65 5d 20 76 65 72 73 69 6f 6e 20  atible] version
0b30: 6f 66 20 74 68 65 20 43 4c 52 20 69 73 20 72 65  of the CLR is re
0b40: 6c 65 61 73 65 64 2c 20 74 68 69 73 20 63 68 65  leased, this che
0b50: 63 6b 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20  ck will..
0b60: 20 23 20 20 20 20 20 20 20 68 61 76 65 20 74 6f   #       have to
0b70: 20 62 65 20 63 68 61 6e 67 65 64 2e 20 20 54 68   be changed.  Th
0b80: 65 20 64 65 66 61 75 6c 74 20 74 65 73 74 20 79  e default test y
0b90: 65 61 72 20 74 6f 20 75 73 65 20 66 6f 72 20 61  ear to use for a
0ba0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
0bb0: 20 20 70 61 72 74 69 63 75 6c 61 72 20 43 4c 52    particular CLR
0bc0: 20 76 65 72 73 69 6f 6e 20 6d 61 79 20 62 65 20   version may be
0bd0: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 73 65  overridden by se
0be0: 74 74 69 6e 67 20 74 68 65 20 67 6c 6f 62 61 6c  tting the global
0bf0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
0c00: 20 20 76 61 72 69 61 62 6c 65 20 22 74 65 73 74    variable "test
0c10: 5f 79 65 61 72 5f 63 6c 72 5f 76 24 58 22 2c 20  _year_clr_v$X", 0c20: 77 68 65 72 65 20 22 24 58 22 20 6d 61 79 20 5b where "$X" may [
0c30: 63 75 72 72 65 6e 74 6c 79 5d 20 62 65 0d 0a 20  currently] be..
0c40: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65         #       e
0c50: 69 74 68 65 72 20 22 32 22 20 6f 72 20 22 34 22  ither "2" or "4"
0c60: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
0c70: 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43        if {[haveC
0c80: 6f 6e 73 74 72 61 69 6e 74 20 69 6d 61 67 65 52  onstraint imageR
0c90: 75 6e 74 69 6d 65 34 30 5d 7d 20 74 68 65 6e 20  untime40]} then
0ca0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
0cb0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
0cc0: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34  test_year_clr_v4
0cd0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
0ce0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
0cf0: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61  ngth $::test_yea 0d00: 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 30 7d 20 74 r_clr_v4] > 0} t 0d10: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 0d20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 0d30: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 0d40: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 0d50: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c year for the CL 0d60: 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 R v4.0... 0d70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 0d80: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 return$::te
0d90: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34 0d 0a  st_year_clr_v4..
0da0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
0db0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
0dc0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
0dd0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
0de0: 65 66 61 75 6c 74 20 74 65 73 74 20 79 65 61 72  efault test year
0df0: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e   for the CLR v4.
0e00: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0...
0e10: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  #..            r
0e20: 65 74 75 72 6e 20 32 30 31 30 3b 20 23 20 54 4f  eturn 2010; # TO
0e30: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61  DO: Good "fallba
0e40: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20  ck" default?..
0e50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
0e60: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
0e70: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f         if {[info
0e80: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 79   exists ::test_y
0e90: 65 61 72 5f 63 6c 72 5f 76 32 5d 20 26 26 20 5c  ear_clr_v2] && \
0ea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
0eb0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $0ec0: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f ::test_year_clr_ 0ed0: 76 32 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d v2] > 0} then {. 0ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 0ef0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 0f00: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 0f10: 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 20 ified test year 0f20: 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 for the CLR v2.0 0f30: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 0f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 0f50: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 61 turn$::test_yea
0f60: 72 5f 63 6c 72 5f 76 32 0d 0a 20 20 20 20 20 20  r_clr_v2..
0f70: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
0f80: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
0f90: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
0fa0: 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   Use the default
0fb0: 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74   test year for t
0fc0: 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20  he CLR v2.0...
0fd0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
0fe0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
0ff0: 32 30 30 38 3b 20 23 20 54 4f 44 4f 3a 20 47 6f  2008; # TODO: Go
1000: 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64 65  od "fallback" de
1010: 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20  fault?..
1020: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1030: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
1040: 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  ...    #..    #
1050: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65  NOTE: This proce
1060: 64 75 72 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  dure is only use
1070: 64 20 77 68 65 6e 20 61 64 64 69 6e 67 20 73 68  d when adding sh
1080: 69 6d 6d 65 64 20 74 65 73 74 20 63 6f 6e 73 74  immed test const
1090: 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 23 0d 0a  raints...    #..
10a0: 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c      proc getBuil
10b0: 64 43 6c 72 56 65 72 73 69 6f 6e 20 7b 7d 20 7b  dClrVersion {} {
10c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
10d0: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
10e0: 63 6c 72 5d 20 26 26 20 5b 73 74 72 69 6e 67 20  clr] && [string
10f0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63  length $::test_c 1100: 6c 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d lr] > 0} then {. 1110: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1120: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 1130: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 the specified te 1140: 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 st version for t 1150: 68 65 20 43 4c 52 2e 20 20 49 66 20 74 68 69 73 he CLR. If this 1160: 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 variable.. 1170: 20 20 20 23 20 20 20 20 20 20 20 69 73 20 6e 6f # is no 1180: 74 20 73 65 74 2c 20 74 68 65 20 64 65 66 61 75 t set, the defau 1190: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 lt value will be 11a0: 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 based on whethe 11b0: 72 20 6f 72 20 6e 6f 74 0d 0a 20 20 20 20 20 20 r or not.. 11c0: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 20 # Eagle 11d0: 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c 65 has been compile 11e0: 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c d against the CL 11f0: 52 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 76 34 R v2.0 or CLR v4 1200: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a .0... #.. 1210: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
1220: 3a 3a 74 65 73 74 5f 63 6c 72 0d 0a 20 20 20 20  ::test_clr..
1230: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1240: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1250: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
1260: 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e 20 63  Eagle has been c
1270: 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20  ompiled against
1280: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49  the CLR v4.0.  I
1290: 66 20 73 6f 2c 0d 0a 20 20 20 20 20 20 20 20 23  f so,..        #
12a0: 20 20 20 20 20 20 20 6a 75 73 74 20 75 73 65 20         just use
12b0: 74 68 61 74 20 43 4c 52 20 76 65 72 73 69 6f 6e  that CLR version
12c0: 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20 75 73  .  Otherwise, us
12d0: 65 20 74 68 65 20 76 65 72 73 69 6f 6e 20 66 6f  e the version fo
12e0: 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  r the..        #
12f0: 20 20 20 20 20 20 20 43 4c 52 20 76 32 2e 30 2e         CLR v2.0.
1300: 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 61 6a    If another maj
1310: 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 6c 65  or [incompatible
1320: 5d 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  ] version of the
1330: 20 43 4c 52 0d 0a 20 20 20 20 20 20 20 20 23 20   CLR..        #
1340: 20 20 20 20 20 20 69 73 20 72 65 6c 65 61 73 65        is release
1350: 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 77 69  d, this check wi
1360: 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 20 63 68  ll have to be ch
1370: 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 66 61  anged.  The defa
1380: 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ult..        #
1390: 20 20 20 20 20 76 65 72 73 69 6f 6e 20 76 61 6c       version val
13a0: 75 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75  ue for a particu
13b0: 6c 61 72 20 43 4c 52 20 76 65 72 73 69 6f 6e 20  lar CLR version
13c0: 6d 61 79 20 62 65 20 6f 76 65 72 72 69 64 64 65  may be overridde
13d0: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
13e0: 20 20 20 62 79 20 73 65 74 74 69 6e 67 20 74 68     by setting th
13f0: 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
1400: 65 20 22 74 65 73 74 5f 63 6c 72 5f 76 24 58 22  e "test_clr_v$X" 1410: 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d 61 79 , where "$X" may
1420: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1430: 20 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 62 65    [currently] be
1440: 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 20 22   either "2" or "
1450: 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  4"...        #..
1460: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76          if {[hav
1470: 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d 61 67  eConstraint imag
1480: 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 68 65  eRuntime40]} the
1490: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
14a0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
14b0: 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 5d 20 26  ::test_clr_v4] &
14c0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
14d0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
14e0: 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34  h $::test_clr_v4 14f0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 1500: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1510: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1520: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 : Use the specif 1530: 69 65 64 20 74 65 73 74 20 76 65 72 73 69 6f 6e ied test version 1540: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e for the CLR v4. 1550: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 1560: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 1570: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6c eturn$::test_cl
1580: 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20  r_v4..
1590: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
15a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15b0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
15c0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73   the default tes
15d0: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
15e0: 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20  e CLR v4.0...
15f0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1600: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 34          return 4
1610: 2e 30 2e 33 30 33 31 39 3b 20 23 20 54 4f 44 4f  .0.30319; # TODO
1620: 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b  : Good "fallback
1630: 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20  " default?..
1640: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1650: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1660: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
1670: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6c 72  xists ::test_clr
1680: 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  _v2] && \..
1690: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
16a0: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f   length $::test_ 16b0: 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 clr_v2] > 0} the 16c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 16d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 16e0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 16f0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 76 specified test v 1700: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43 ersion for the C 1710: 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 LR v2.0... 1720: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1730: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 return$::t
1740: 65 73 74 5f 63 6c 72 5f 76 32 0d 0a 20 20 20 20  est_clr_v2..
1750: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1760: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1770: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
1780: 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75  E: Use the defau
1790: 6c 74 20 74 65 73 74 20 76 65 72 73 69 6f 6e 20  lt test version
17a0: 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30  for the CLR v2.0
17b0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
17c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
17d0: 74 75 72 6e 20 32 2e 30 2e 35 30 37 32 37 3b 20  turn 2.0.50727;
17e0: 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61  # TODO: Good "fa
17f0: 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f  llback" default?
1800: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1810: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1820: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
1830: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 59 65   proc getBuildYe
1840: 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ars {} {..
1850: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
1860: 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 74   See if the list
1870: 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20 68   of test years h
1880: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
1890: 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 0d 0a  en by the user..
18a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28 65        #       (e
18b0: 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61  .g. on the comma
18c0: 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20 20  nd line)...
18d0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
18e0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
18f0: 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c 6c 65  t_years] && [lle
1900: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61  ngth $::test_yea 1910: 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d rs] > 0} then {. 1920: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1930: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 1940: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c 69 the specified li 1950: 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 st of test years 1960: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1970: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
1980: 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 20 20  test_years..
1990: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
19a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
19b0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
19c0: 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20 74  efault list of t
19d0: 65 73 74 20 79 65 61 72 73 20 28 69 2e 65 2e 20  est years (i.e.
19e0: 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20 23  all)...        #
19f0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1a00: 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30 30 38   [list 2005 2008
1a10: 20 32 30 31 30 20 32 30 31 32 20 32 30 31 33 20   2010 2012 2013
1a20: 32 30 31 35 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  2015]..      }..
1a30: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
1a40: 6f 63 20 67 65 74 42 75 69 6c 64 4e 65 74 46 78  oc getBuildNetFx
1a50: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
1a60: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65        # NOTE: Se
1a70: 65 20 69 66 20 74 68 65 20 74 65 73 74 20 2e 4e  e if the test .N
1a80: 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 73 65 74  ET Framework set
1a90: 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76  ting has been ov
1aa0: 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20 20 20  erridden by..
1ab0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75     #       the u
1ac0: 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65  ser (e.g. on the
1ad0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d   command line)..
1ae0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1af0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
1b00: 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5d 20   ::test_net_fx]
1b10: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
1b20: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $1b30: 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5d 20 3e ::test_net_fx] > 1b40: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1b50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1b60: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 1b70: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 2e 4e pecified test .N 1b80: 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 ET Framework... 1b90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1ba0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 return$::test
1bb0: 5f 6e 65 74 5f 66 78 0d 0a 20 20 20 20 20 20 7d  _net_fx..      }
1bc0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1bd0: 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 42 75   set year [getBu
1be0: 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 20  ildYear]..
1bf0: 20 20 73 65 74 20 79 65 61 72 56 61 72 4e 61 6d    set yearVarNam
1c00: 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 3a 3a  e [appendArgs ::
1c10: 74 65 73 74 5f 6e 65 74 5f 66 78 5f 20 24 79 65  test_net_fx_ $ye 1c20: 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 ar].... i 1c30: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 1c40: 24 79 65 61 72 56 61 72 4e 61 6d 65 5d 20 26 26$yearVarName] &&
1c50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1c60: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b  [string length [
1c70: 73 65 74 20 24 79 65 61 72 56 61 72 4e 61 6d 65  set $yearVarName 1c80: 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ]] > 0} then {.. 1c90: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1ca0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 1cb0: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 1cc0: 20 74 65 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 test .NET Frame 1cd0: 77 6f 72 6b 2c 20 62 61 73 65 64 20 6f 6e 20 74 work, based on t 1ce0: 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 he build.. 1cf0: 20 20 20 20 23 20 20 20 20 20 20 20 79 65 61 72 # year 1d00: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1d10: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 1d20: 20 5b 73 65 74 20 24 79 65 61 72 56 61 72 4e 61 [set$yearVarNa
1d30: 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  me]..        } e
1d40: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1d50: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
1d60: 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74  NOTE: Fallback t
1d70: 6f 20 74 68 65 20 22 77 65 6c 6c 20 6b 6e 6f 77  o the "well know
1d80: 6e 22 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  n" .NET Framewor
1d90: 6b 20 76 65 72 73 69 6f 6e 20 74 68 61 74 0d 0a  k version that..
1da0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1db0: 20 20 69 73 20 6d 6f 73 74 20 63 6c 6f 73 65 6c    is most closel
1dc0: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
1dd0: 68 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 76  h a particular v
1de0: 65 72 73 69 6f 6e 20 6f 66 0d 0a 20 20 20 20 20  ersion of..
1df0: 20 20 20 20 20 23 20 20 20 20 20 20 20 56 69 73       #       Vis
1e00: 75 61 6c 20 53 74 75 64 69 6f 2e 0d 0a 20 20 20  ual Studio...
1e10: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1e20: 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 63      switch -exac
1e30: 74 20 2d 2d 20 24 79 65 61 72 20 7b 0d 0a 20 20  t -- $year {.. 1e40: 20 20 20 20 20 20 20 20 20 20 32 30 30 35 20 7b 2005 { 1e50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e60: 72 65 74 75 72 6e 20 6e 65 74 46 78 32 30 0d 0a return netFx20.. 1e70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1e80: 20 20 20 20 20 20 20 20 20 20 20 32 30 30 38 20 2008 1e90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1ea0: 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 35 0d return netFx35. 1eb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 31 30 2010 1ed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1ee0: 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 30 return netFx40 1ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 1f00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 31 . 201 1f10: 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 2 {.. 1f20: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 return netFx4 1f30: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 5.. } 1f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 .. 20 1f50: 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 13 {.. 1f60: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 return netFx 1f70: 34 35 31 3b 20 23 20 54 4f 44 4f 3a 20 4f 72 20 451; # TODO: Or 1f80: 22 6e 65 74 46 78 34 35 32 22 3f 0d 0a 20 20 20 "netFx452"?.. 1f90: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1fa0: 20 20 20 20 20 20 20 20 32 30 31 35 20 7b 0d 0a 2015 {.. 1fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re 1fc0: 74 75 72 6e 20 6e 65 74 46 78 34 36 0d 0a 20 20 turn netFx46.. 1fd0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1fe0: 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 default 1ff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2000: 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 35 return netFx35 2010: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 ; # TODO: Good " 2020: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c fallback" defaul 2030: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t?.. 2040: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 2050: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2060: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 2070: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 2080: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure 2090: 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 6e 6f should return no 20a0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 63 6f n-zero if the co 20b0: 6e 66 69 67 75 72 65 64 20 74 65 73 74 0d 0a 20 nfigured test.. 20c0: 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66 # platf 20d0: 6f 72 6d 20 69 73 20 6d 6f 73 74 20 6c 69 6b 65 orm is most like 20e0: 6c 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 ly the default f 20f0: 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 2e or this machine. 2100: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 70 72 6f .. #.. pro 2110: 63 20 69 73 44 65 66 61 75 6c 74 42 75 69 6c 64 c isDefaultBuild 2120: 50 6c 61 74 66 6f 72 6d 20 7b 20 7b 76 65 72 62 Platform { {verb 2130: 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a ose false} } {.. 2140: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 2150: 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 20 6f NOTE: Running o 2160: 6e 20 57 6f 57 36 34 20 69 73 20 6e 65 76 65 72 n WoW64 is never 2170: 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61 the default pla 2180: 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d tform... #. 2190: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 75 . if {[isRu 21a0: 6e 6e 69 6e 67 57 6f 57 36 34 5d 7d 20 74 68 65 nningWoW64]} the 21b0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 21c0: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 {$verbose} then
21d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
21e0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 21f0: 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 2200: 20 20 20 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74 "---- detect 2210: 65 64 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 20 70 ed non-default p 2220: 6c 61 74 66 6f 72 6d 20 28 57 6f 57 36 34 29 5c latform (WoW64)\ 2230: 6e 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 n".. }.. 2240: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa 2250: 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a lse.. }.... 2260: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 2270: 20 4e 4f 54 45 3a 20 54 68 69 73 20 68 61 73 20 NOTE: This has 2280: 61 20 67 6f 6f 64 20 63 68 61 6e 63 65 20 6f 66 a good chance of 2290: 20 62 65 69 6e 67 20 74 68 65 20 64 65 66 61 75 being the defau 22a0: 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 lt platform... 22b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 22c0: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 {$verbose} then
22d0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
22e0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 22f0: 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 64 20 "---- detected 2300: 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d default platform 2310: 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 \n".. }.. 2320: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d return true. 2330: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 2340: 72 6f 63 20 67 65 74 42 75 69 6c 64 50 6c 61 74 roc getBuildPlat 2350: 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 20 7d 20 form { native } 2360: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e {.. if {[in 2370: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 2380: 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 20 5c 0d _platform] && \. 2390: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 23a0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 ng length$::tes
23b0: 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d  t_platform] > 0}
23c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
23d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
23e0: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63  TE: Use the spec
23f0: 69 66 69 65 64 20 74 65 73 74 20 70 6c 61 74 66  ified test platf
2400: 6f 72 6d 2e 20 20 49 66 20 74 68 69 73 20 76 61  orm.  If this va
2410: 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65  riable is not se
2420: 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  t,..        #
2430: 20 20 20 20 74 68 65 20 64 65 66 61 75 6c 74 20      the default
2440: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61  value will be ba
2450: 73 65 64 20 6f 6e 20 74 68 65 20 6d 61 63 68 69  sed on the machi
2460: 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 2e  ne architecture.
2470: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2480: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70       return [exp
2490: 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 24 3a 3a  r {$native ?$::
24a0: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 3a 20  test_platform :
24b0: 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ""}]..      } el
24c0: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
24d0: 74 73 20 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e  ts ::test_machin
24e0: 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  e] && \..
24f0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
2500: 68 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e  h $::test_machin 2510: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 2520: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2530: 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e # NOTE: For n 2540: 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 72 65 ative builds, re 2550: 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 turn the platfor 2560: 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f 6e m name correspon 2570: 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 20 20 ding to.. 2580: 20 23 20 20 20 20 20 20 20 74 68 65 20 74 65 73 # the tes 2590: 74 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 t machine archit 25a0: 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73 ecture; otherwis 25b0: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 e, return an emp 25c0: 74 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ty.. # 25d0: 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 string... 25e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 25f0: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a return [expr {.. 2600: 20 20 20 20 20 20 20 20 20 20 24 6e 61 74 69 76$nativ
2610: 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c  e ? [machineToPl
2620: 61 74 66 6f 72 6d 20 24 3a 3a 74 65 73 74 5f 6d  atform $::test_m 2630: 61 63 68 69 6e 65 5d 20 3a 20 22 22 0d 0a 20 20 achine] : "".. 2640: 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20 }].. 2650: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 2660: 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 exists ::tcl_pla 2670: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d tform(machine)]} 2680: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2690: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 26a0: 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 20 62 TE: For native b 26b0: 75 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 74 68 uilds, return th 26c0: 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 e platform name 26d0: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f corresponding to 26e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 26f0: 20 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72 the machine ar 2700: 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 chitecture; othe 2710: 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e rwise, return an 2720: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a empty string... 2730: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2740: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 return [expr 2750: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 {..$na
2760: 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54  tive ? [machineT
2770: 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c  oPlatform $::tcl 2780: 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e _platform(machin 2790: 65 29 5d 20 3a 20 22 22 0d 0a 20 20 20 20 20 20 e)] : "".. 27a0: 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }].. } el 27b0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 27c0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 27d0: 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61 72 63 68 No machine arch 27e0: 69 74 65 63 74 75 72 65 20 69 73 20 61 76 61 69 itecture is avai 27f0: 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e lable, return an 2800: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a empty string... 2810: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2820: 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 It is important 2830: 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 to return an emp 2840: 74 79 20 73 74 72 69 6e 67 20 68 65 72 65 20 62 ty string here b 2850: 65 63 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 ecause the.. 2860: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 75 # resu 2870: 6c 74 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 lt of this proce 2880: 64 75 72 65 20 6d 61 79 20 62 65 20 75 73 65 64 dure may be used 2890: 20 77 69 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e with [file join 28a0: 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 ]... #.. 28b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 return "" 28c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 28d0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 28e0: 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 tBuildConfigurat 28f0: 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ion {} {.. 2900: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 2910: 20 53 65 65 20 69 66 20 74 68 65 20 22 63 6f 6e See if the "con 2920: 66 69 67 75 72 61 74 69 6f 6e 22 20 73 65 74 74 figuration" sett 2930: 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 ing has been ove 2940: 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 0d 0a rridden by the.. 2950: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 # us 2960: 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 er (e.g. on the 2970: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 command line). 2980: 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 This helps contr 2990: 6f 6c 20 65 78 61 63 74 6c 79 0d 0a 20 20 20 20 ol exactly.. 29a0: 20 20 23 20 20 20 20 20 20 20 77 68 69 63 68 20 # which 29b0: 73 65 74 20 6f 66 20 62 69 6e 61 72 69 65 73 20 set of binaries 29c0: 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 20 28 we are testing ( 29d0: 69 2e 65 2e 20 74 68 6f 73 65 20 62 75 69 6c 74 i.e. those built 29e0: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 in the.. # 29f0: 20 20 20 20 20 20 20 22 44 65 62 75 67 22 20 6f "Debug" o 2a00: 72 20 22 52 65 6c 65 61 73 65 22 20 62 75 69 6c r "Release" buil 2a10: 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 d configurations 2a20: 29 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 65 20 ). To override 2a30: 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 this.. # 2a40: 20 20 20 20 76 61 6c 75 65 20 76 69 61 20 74 68 value via th 2a50: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 e command line, 2a60: 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64 20 enter a command 2a70: 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f similar to one o 2a80: 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 f.. # 2a90: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 the following ( 2aa0: 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 all on one line) 2ab0: 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 :.. #.. 2ac0: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 # EagleS 2ad0: 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 hell.exe -anyIni 2ae0: 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 tialize "set tes 2af0: 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 t_configuration 2b00: 44 65 62 75 67 22 0d 0a 20 20 20 20 20 20 23 20 Debug".. # 2b10: 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c -file .\ 2b20: 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c path\to\all.eagl 2b30: 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 e.. #.. 2b40: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 # EagleS 2b50: 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 hell.exe -anyIni 2b60: 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 tialize "set tes 2b70: 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 t_configuration 2b80: 52 65 6c 65 61 73 65 22 0d 0a 20 20 20 20 20 20 Release".. 2b90: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 # -file 2ba0: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 .\path\to\all.ea 2bb0: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 gle.. #.. 2bc0: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 2bd0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66 69 6c 65 eShell.exe -file 2be0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 .\path\to\all.e 2bf0: 61 67 6c 65 20 2d 70 72 65 54 65 73 74 0d 0a 20 agle -preTest.. 2c00: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 22 # " 2c10: 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 2c20: 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 n test_configura 2c30: 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 23 0d 0a tion".. #.. 2c40: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 2c50: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f exists ::test_co 2c60: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 26 26 20 nfiguration] && 2c70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st 2c80: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 ring length$::t
2c90: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
2ca0: 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  n] > 0} then {..
2cb0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2cc0: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
2cd0: 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73  he specified tes
2ce0: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  t configuration.
2cf0: 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61    The default va
2d00: 6c 75 65 20 75 73 65 64 0d 0a 20 20 20 20 20 20  lue used..
2d10: 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68    #       for th
2d20: 69 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 74  is variable is t
2d30: 79 70 69 63 61 6c 6c 79 20 22 52 65 6c 65 61 73  ypically "Releas
2d40: 65 22 2c 20 61 73 20 73 65 74 20 62 79 20 74 68  e", as set by th
2d50: 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  e test..
2d60: 23 20 20 20 20 20 20 20 73 75 69 74 65 20 69 74  #       suite it
2d70: 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 20 20 23  self...        #
2d80: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
2d90: 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75   $::test_configu 2da0: 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 ration.. } 2db0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 2dc0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2dd0: 45 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20 77 65 20 E: Normally, we 2de0: 77 69 6c 6c 20 6e 65 76 65 72 20 68 69 74 20 74 will never hit t 2df0: 68 69 73 20 63 61 73 65 20 62 65 63 61 75 73 65 his case because 2e00: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 the value of th 2e10: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 2e20: 20 20 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 test configur 2e30: 61 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 ation variable i 2e40: 73 20 61 6c 77 61 79 73 20 73 65 74 20 62 79 20 s always set by 2e50: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 0d 0a the test suite.. 2e60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2e70: 69 74 73 65 6c 66 3b 20 68 6f 77 65 76 65 72 2c itself; however, 2e80: 20 69 74 20 63 61 6e 20 62 65 20 6f 76 65 72 72 it can be overr 2e90: 69 64 64 65 6e 20 75 73 69 6e 67 20 74 68 65 20 idden using the 2ea0: 75 6e 73 65 74 20 63 6f 6d 6d 61 6e 64 0d 0a 20 unset command.. 2eb0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 # f 2ec0: 72 6f 6d 20 74 68 65 20 2d 70 72 65 54 65 73 74 rom the -preTest 2ed0: 20 6f 70 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 option to the t 2ee0: 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 est suite... 2ef0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 2f00: 65 74 75 72 6e 20 24 3a 3a 65 61 67 6c 65 5f 70 eturn$::eagle_p
2f10: 6c 61 74 66 6f 72 6d 28 63 6f 6e 66 69 67 75 72  latform(configur
2f20: 61 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 7d 0d  ation)..      }.
2f30: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
2f40: 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6f 6e 66  roc getBuildConf
2f50: 69 67 75 72 61 74 69 6f 6e 73 20 7b 7d 20 7b 0d  igurations {} {.
2f60: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
2f70: 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74  # NOTE: See if t
2f80: 68 65 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20  he list of test
2f90: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 68  configurations h
2fa0: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
2fb0: 65 6e 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20  en by..      #
2fc0: 20 20 20 20 20 74 68 65 20 75 73 65 72 20 28 65       the user (e
2fd0: 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61  .g. on the comma
2fe0: 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20 20  nd line)...
2ff0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
3000: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
3010: 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  t_configurations
3020: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
3030: 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65    [llength $::te 3040: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st_configuration 3050: 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a s] > 0} then {.. 3060: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 3070: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 # NOTE: Use t 3080: 68 65 20 73 70 65 63 69 66 69 65 64 20 6c 69 73 he specified lis 3090: 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 t of test config 30a0: 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 urations... 30b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 30c0: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e turn$::test_con
30d0: 66 69 67 75 72 61 74 69 6f 6e 73 0d 0a 20 20 20  figurations..
30e0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
30f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
3100: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
3110: 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20  default list of
3120: 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69  test configurati
3130: 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ons...        #.
3140: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3150: 5b 6c 69 73 74 20 44 65 62 75 67 20 52 65 6c 65  [list Debug Rele
3160: 61 73 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ase]..      }..
3170: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
3180: 63 20 67 65 74 42 75 69 6c 64 42 61 73 65 44 69  c getBuildBaseDi
3190: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
31a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
31b0: 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20  OTE: Figure out
31c0: 74 68 65 20 62 61 73 65 20 64 69 72 65 63 74 6f  the base directo
31d0: 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65  ry where all the
31e0: 20 62 75 69 6c 64 73 20 73 68 6f 75 6c 64 20 62   builds should b
31f0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
3200: 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20   located.  This
3210: 77 69 6c 6c 20 62 65 20 74 68 65 20 64 69 72 65  will be the dire
3220: 63 74 6f 72 79 20 74 68 61 74 20 63 6f 6e 74 61  ctory that conta
3230: 69 6e 73 20 74 68 65 20 61 63 74 75 61 6c 0d 0a  ins the actual..
3240: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75        #       bu
3250: 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63  ild output direc
3260: 74 6f 72 79 20 28 65 2e 67 2e 20 70 61 72 65 6e  tory (e.g. paren
3270: 74 20 6f 66 20 22 62 69 6e 22 29 2e 0d 0a 20 20  t of "bin")...
3280: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
3290: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
32a0: 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65 63  build_base_direc
32b0: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
32c0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
32d0: 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f 62 61  ngth $::build_ba 32e0: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 se_directory] > 32f0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 3300: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 3310: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 NOTE: The locati 3320: 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 on of the build 3330: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 68 base directory h 3340: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 as been overridd 3350: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 en;.. # 3360: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 therefore, 3370: 75 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e use it verbatim. 3380: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 3390: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 return$::b
33a0: 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65 63 74  uild_base_direct
33b0: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ory..      } els
33c0: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  eif {[info exist
33d0: 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63  s ::common_direc
33e0: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
33f0: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
3400: 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64  ngth $::common_d 3410: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 3420: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 3430: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 3440: 3a 20 4e 65 78 74 2c 20 66 61 6c 6c 62 61 63 6b : Next, fallback 3450: 20 74 6f 20 74 68 65 20 67 72 61 6e 64 70 61 72 to the grandpar 3460: 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f 66 ent directory of 3470: 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 20 20 the one.. 3480: 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 # contai 3490: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 20 28 ning this file ( 34a0: 69 2e 65 2e 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 i.e. "common.eag 34b0: 6c 65 22 29 2c 20 69 66 20 61 76 61 69 6c 61 62 le"), if availab 34c0: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 34d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 34e0: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 file dirname [fi 34f0: 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 63 6f le dirname$::co
3500: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 5d  mmon_directory]]
3510: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
3520: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
3530: 3a 70 61 74 68 5d 20 26 26 20 5c 0d 0a 20 20 20  :path] && \..
3540: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
3550: 65 6e 67 74 68 20 24 3a 3a 70 61 74 68 5d 20 3e  ength $::path] > 3560: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 3570: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 3580: 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 NOTE: Finally, 3590: 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 fallback to the 35a0: 70 61 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 parent directory 35b0: 20 6f 66 20 74 68 65 20 45 61 67 6c 65 54 65 73 of the EagleTes 35c0: 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 35d0: 20 20 20 70 61 74 68 2e 20 20 54 68 65 20 45 61 path. The Ea 35e0: 67 6c 65 54 65 73 74 20 70 61 63 6b 61 67 65 20 gleTest package 35f0: 67 75 61 72 61 6e 74 65 65 73 20 74 68 61 74 20 guarantees that 3600: 74 68 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 this variable.. 3610: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 3620: 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 74 68 ill be set to th 3630: 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 e directory cont 3640: 61 69 6e 69 6e 67 20 74 68 65 20 66 69 72 73 74 aining the first 3650: 20 66 69 6c 65 20 74 6f 0d 0a 20 20 20 20 20 20 file to.. 3660: 20 20 23 20 20 20 20 20 20 20 65 78 65 63 75 74 # execut 3670: 65 20 74 68 65 20 5b 72 75 6e 54 65 73 74 50 72 e the [runTestPr 3680: 6f 6c 6f 67 75 65 5d 20 73 63 72 69 70 74 20 6c ologue] script l 3690: 69 62 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 ibrary procedure 36a0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 36b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 return [fi 36c0: 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a 70 61 le dirname$::pa
36d0: 74 68 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  th]..      } els
36e0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
36f0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
3700: 4e 6f 20 70 61 74 68 20 69 73 20 61 76 61 69 6c  No path is avail
3710: 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  able, return an
3720: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 20 54  empty string.  T
3730: 68 69 73 20 70 6f 69 6e 74 0d 0a 20 20 20 20 20  his point..
3740: 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c     #       shoul
3750: 64 20 6e 6f 74 20 62 65 20 72 65 61 63 68 65 64  d not be reached
3760: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
3770: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d        return "".
3780: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3790: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
37a0: 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
37b0: 74 68 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  th {} {..      #
37c0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
37d0: 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 64  Figure out the d
37e0: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 61  irectory where a
37f0: 6c 6c 20 74 68 65 20 74 65 73 74 20 64 61 74 61  ll the test data
3800: 20 66 69 6c 65 73 20 73 68 6f 75 6c 64 0d 0a 20   files should..
3810: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
3820: 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20 73  located.  This s
3830: 68 6f 75 6c 64 20 62 65 20 74 68 65 20 22 64 61  hould be the "da
3840: 74 61 22 20 64 69 72 65 63 74 6f 72 79 20 62 65  ta" directory be
3850: 6e 65 61 74 68 20 74 68 65 0d 0a 20 20 20 20 20  neath the..
3860: 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f   #       directo
3870: 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ry containing th
3880: 65 20 61 63 74 75 61 6c 20 74 65 73 74 20 73 63  e actual test sc
3890: 72 69 70 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d  ripts...      #.
38a0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66  .      return [f
38b0: 69 6c 65 20 6a 6f 69 6e 20 24 3a 3a 70 61 74 68  ile join $::path 38c0: 20 64 61 74 61 5d 0d 0a 20 20 20 20 7d 0d 0a 0c data].. }... 38d0: 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 75 6e .. proc isRun 38e0: 6e 69 6e 67 57 6f 57 36 34 20 7b 7d 20 7b 0d 0a ningWoW64 {} {.. 38f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 3900: 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 NOTE: For now, 3910: 6a 75 73 74 20 75 73 65 20 74 68 65 20 65 78 69 just use the exi 3920: 73 74 69 6e 67 20 74 65 73 74 20 63 6f 6e 73 74 sting test const 3930: 72 61 69 6e 74 20 66 6f 72 20 64 65 74 65 63 74 raint for detect 3940: 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ing.. # 3950: 20 20 20 61 20 57 6f 57 36 34 20 70 72 6f 63 65 a WoW64 proce 3960: 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ss... #.. 3970: 20 20 20 20 72 65 74 75 72 6e 20 5b 68 61 76 65 return [have 3980: 43 6f 6e 73 74 72 61 69 6e 74 20 77 6f 77 36 34 Constraint wow64 3990: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 39a0: 20 70 72 6f 63 20 69 73 4d 69 78 65 64 4d 6f 64 proc isMixedMod 39b0: 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 eAssembly { file 39c0: 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 22 22 Name {varName "" 39d0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 39e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi 39f0: 72 73 74 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 rst, make sure t 3a00: 68 65 20 74 65 73 74 20 73 75 69 74 65 20 69 6e he test suite in 3a10: 66 72 61 73 74 72 75 63 74 75 72 65 20 69 73 20 frastructure is 3a20: 61 6c 6c 6f 77 65 64 20 74 6f 0d 0a 20 20 20 20 allowed to.. 3a30: 20 20 23 20 20 20 20 20 20 20 75 73 65 20 74 68 # use th 3a40: 65 20 5b 65 78 65 63 5d 20 63 6f 6d 6d 61 6e 64 e [exec] command 3a50: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 3a60: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 3a70: 73 74 73 20 3a 3a 6e 6f 28 65 78 65 63 29 5d 20 sts ::no(exec)] 3a80: 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 && ![info exists 3a90: 20 3a 3a 6e 6f 28 63 6f 72 46 6c 61 67 73 29 5d ::no(corFlags)] 3aa0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 3ab0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 3ac0: 4f 54 45 3a 20 49 66 20 74 68 65 20 6c 6f 63 61 OTE: If the loca 3ad0: 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73 tion of CorFlags 3ae0: 20 69 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 is present in t 3af0: 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 2c 0d he environment,. 3b00: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 3b10: 20 75 73 65 20 69 74 3b 20 6f 74 68 65 72 77 69 use it; otherwi 3b20: 73 65 20 61 73 73 75 6d 65 20 69 74 20 69 73 20 se assume it is 3b30: 69 6e 20 74 68 65 20 50 41 54 48 2e 0d 0a 20 20 in the PATH... 3b40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 3b50: 20 73 65 74 20 63 6f 72 46 6c 61 67 73 20 5b 65 set corFlags [e 3b60: 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 xpr {.. 3b70: 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a [info exists :: 3b80: 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 5d 20 3f env(CorFlags)] ? 3b90: 20 24 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73$::env(CorFlags
3ba0: 29 20 3a 20 22 43 6f 72 46 6c 61 67 73 22 0d 0a  ) : "CorFlags"..
3bb0: 20 20 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a 20 20          }]....
3bc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
3bd0: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
3be0: 20 74 6f 20 65 78 65 63 75 74 65 20 43 6f 72 46   to execute CorF
3bf0: 6c 61 67 73 20 6f 6e 20 74 68 65 20 73 70 65 63  lags on the spec
3c00: 69 66 69 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20  ified file...
3c10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
3c20: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
3c30: 20 20 20 20 20 20 20 20 65 78 65 63 20 2d 2d 20          exec --
3c40: 24 63 6f 72 46 6c 61 67 73 20 5b 66 69 6c 65 20  $corFlags [file 3c50: 6e 61 74 69 76 65 6e 61 6d 65 20 24 66 69 6c 65 nativename$file
3c60: 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d  Name]..        }
3c70: 20 65 78 65 63 5d 20 3d 3d 20 30 7d 20 74 68 65   exec] == 0} the
3c80: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
3c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
3ca0: 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 65 64  TE: If requested
3cb0: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20   by our caller,
3cc0: 61 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72  attempt to deter
3cd0: 6d 69 6e 65 20 74 68 65 0d 0a 20 20 20 20 20 20  mine the..
3ce0: 20 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74      #       plat
3cf0: 66 6f 72 6d 20 66 6f 72 20 74 68 65 20 73 70 65  form for the spe
3d00: 63 69 66 69 65 64 20 66 69 6c 65 20 61 73 20 77  cified file as w
3d10: 65 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ell...
3d20: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  #..          if
3d30: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
3d40: 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  $varName] > 0} t 3d50: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 3d60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 3d70: 20 20 23 20 4e 4f 54 45 3a 20 53 74 6f 72 65 20 # NOTE: Store 3d80: 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 69 6e 20 the platform in 3d90: 74 68 65 20 6e 61 6d 65 64 20 76 61 72 69 61 62 the named variab 3da0: 6c 65 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 le in the.. 3db0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 3dc0: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 ontext of our ca 3dd0: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 ller... 3de0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 3df0: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
3e00: 6d 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20  me platform....
3e10: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
3e20: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
3e30: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74  : Attempt to ext
3e40: 72 61 63 74 20 74 68 65 20 50 45 20 6c 69 6e 65  ract the PE line
3e50: 20 66 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72   from the captur
3e60: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..
3e70: 23 20 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20  #       output.
3e80: 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 20 69   If this value i
3e90: 73 20 22 50 45 33 32 22 20 6f 72 20 22 50 45 33  s "PE32" or "PE3
3ea0: 32 2b 22 2c 20 74 68 65 0d 0a 20 20 20 20 20 20  2+", the..
3eb0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73        #       as
3ec0: 73 65 6d 62 6c 79 20 66 69 6c 65 20 69 73 20 33  sembly file is 3
3ed0: 32 2d 62 69 74 20 6f 72 20 36 34 2d 62 69 74 2c  2-bit or 64-bit,
3ee0: 20 72 65 73 70 65 63 74 69 76 65 6c 79 3b 0d 0a   respectively;..
3ef0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
3f00: 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 69      otherwise, i
3f10: 74 73 20 74 79 70 65 20 69 73 20 75 6e 6b 6e 6f  ts type is unkno
3f20: 77 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  wn...
3f30: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
3f40: 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e 50 45  set pattern {^PE
3f50: 20 20 20 20 20 20 20 20 3a 20 28 50 45 33 32 7c          : (PE32|
3f60: 50 45 33 32 5c 2b 29 5c 73 2b 24 7d 0d 0a 0d 0a  PE32\+)\s+$}.... 3f70: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 3f80: 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d [regexp -line -- 3f90: 20 24 70 61 74 74 65 72 6e 20 24 65 78 65 63 20$pattern $exec 3fa0: 64 75 6d 6d 79 20 70 65 33 32 5d 7d 20 74 68 65 dummy pe32]} the 3fb0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 3fc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 3fd0: 20 20 20 20 23 20 48 41 43 4b 3a 20 54 68 69 73 # HACK: This 3fe0: 20 5b 73 77 69 74 63 68 5d 20 61 73 73 75 6d 65 [switch] assume 3ff0: 73 20 74 68 61 74 20 33 32 2d 62 69 74 20 65 78 s that 32-bit ex 4000: 65 63 75 74 61 62 6c 65 73 20 61 72 65 0d 0a 20 ecutables are.. 4010: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 4020: 20 20 20 20 20 61 6c 77 61 79 73 20 78 38 36 20 always x86 4030: 61 6e 64 20 74 68 61 74 20 36 34 2d 62 69 74 20 and that 64-bit 4040: 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 65 20 executables are 4050: 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 always.. 4060: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 78 36 # x6 4070: 34 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4... 4080: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 4090: 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 63 74 switch -exact 40a0: 20 2d 2d 20 24 70 65 33 32 20 7b 0d 0a 20 20 20 --$pe32 {..
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 45 33               PE3
40c0: 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2 {..
40d0: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66         set platf
40e0: 6f 72 6d 20 57 69 6e 33 32 0d 0a 20 20 20 20 20  orm Win32..
40f0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 45                PE
4110: 33 32 2b 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  32+ {..
4120: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61           set pla
4130: 74 66 6f 72 6d 20 78 36 34 0d 0a 20 20 20 20 20  tform x64..
4140: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
4160: 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20 20 20  fault {..
4170: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70             set p
4180: 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20 20  latform ""..
4190: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
41c0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
41d0: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d      set platform
41e0: 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ""..
41f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
4200: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
4210: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
4220: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 74  : Attempt to ext
4230: 72 61 63 74 20 74 68 65 20 49 4c 4f 4e 4c 59 20  ract the ILONLY
4240: 6c 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61  line from the ca
4250: 70 74 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20  ptured..
4260: 20 20 23 20 20 20 20 20 20 20 6f 75 74 70 75 74    #       output
4270: 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65  .  If this value
4280: 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 73 70   is zero, the sp
4290: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6d 75 73  ecified file mus
42a0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  t..          #
42b0: 20 20 20 20 20 62 65 20 61 20 6d 69 78 65 64 2d       be a mixed-
42c0: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 3b 20 6f  mode assembly; o
42d0: 74 68 65 72 77 69 73 65 2c 20 69 74 20 63 6f 6e  therwise, it con
42e0: 74 61 69 6e 73 20 6f 6e 6c 79 0d 0a 20 20 20 20  tains only..
42f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61        #       ma
4300: 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73  naged components
4310: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
4320: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 61            set pa
4330: 74 74 65 72 6e 20 7b 5e 49 4c 4f 4e 4c 59 20 20  ttern {^ILONLY
4340: 20 20 3a 20 28 30 7c 31 29 5c 73 2b 24 7d 0d 0a    : (0|1)\s+$}.. 4350: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 4360: 21 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 2d ![regexp -line - 4370: 2d 20 24 70 61 74 74 65 72 6e 20 24 65 78 65 63 -$pattern $exec 4380: 20 64 75 6d 6d 79 20 69 6c 4f 6e 6c 79 5d 7d 20 dummy ilOnly]} 4390: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 43a0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false 43b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 43c0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 43d0: 24 69 6c 4f 6e 6c 79 7d 20 74 68 65 6e 20 7b 0d$ilOnly} then {.
43e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
43f0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
4400: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
4410: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
4420: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
4430: 54 45 3a 20 49 66 20 74 68 65 20 74 65 73 74 20  TE: If the test
4440: 73 75 69 74 65 20 63 61 6e 6e 6f 74 20 75 73 65  suite cannot use
4450: 20 5b 65 78 65 63 5d 20 6f 72 20 65 78 65 63 75   [exec] or execu
4460: 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 67 73  tion of CorFlags
4470: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4480: 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e 20 66  failed, return f
4490: 61 6c 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  alse...      #..
44a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
44b0: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  se..    }.....
44c0: 20 20 70 72 6f 63 20 69 73 42 75 69 6c 64 41 76    proc isBuildAv
44d0: 61 69 6c 61 62 6c 65 20 7b 20 6e 61 74 69 76 65  ailable { native
44e0: 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e   directory {varN
44f0: 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  ame ""} } {..
4500: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
4510: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75  TE: Build the fu
4520: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
4530: 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  le name for the
4540: 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79  primary assembly
4550: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4560: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
4570: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
4580: 65 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e  e managed compon
4590: 65 6e 74 73 2e 20 20 49 74 0d 0a 20 20 20 20 20  ents.  It..
45a0: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
45b0: 62 65 20 6e 6f 74 65 64 20 74 68 61 74 20 74 68  be noted that th
45c0: 69 73 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  is assembly file
45d0: 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69   may also contai
45e0: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  n the..      #
45f0: 20 20 20 20 20 6e 61 74 69 76 65 20 63 6f 6d 70       native comp
4600: 6f 6e 65 6e 74 73 2c 20 69 66 20 61 20 6e 61 74  onents, if a nat
4610: 69 76 65 20 62 75 69 6c 64 20 69 73 20 69 6e 20  ive build is in
4620: 75 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  use...      #..
4630: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
4640: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
4650: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d 4660: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 4670: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 4680: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a a.SQLite.dll]].. 4690: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 .. if {![fi 46a0: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
46b0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
46c0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
46d0: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  se..      }....
46e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
46f0: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
4700: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64   automatically d
4710: 65 74 65 63 74 20 69 66 20 74 68 65 20 70 72 69  etect if the pri
4720: 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20  mary assembly..
4730: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
4740: 74 61 69 6e 73 20 61 6e 79 20 6e 61 74 69 76 65  tains any native
4750: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20   components, if
4760: 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20  necessary...
4770: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
4780: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e  string length $n 4790: 61 74 69 76 65 5d 20 3d 3d 20 30 7d 20 74 68 65 ative] == 0} the 47a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 47b0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 47c0: 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74$varName] > 0} t
47d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
47e0: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 47f0: 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 e$varName..
4800: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
4810: 20 73 65 74 20 6e 61 74 69 76 65 20 5b 69 73 4d   set native [isM
4820: 69 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79  ixedModeAssembly
4830: 20 24 66 69 6c 65 4e 61 6d 65 20 24 76 61 72 4e   $fileName$varN
4840: 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  ame]..      }...
4850: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
4860: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 70  # NOTE: If the p
4870: 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 20  rimary assembly
4880: 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68  also contains th
4890: 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65  e native compone
48a0: 6e 74 73 2c 0d 0a 20 20 20 20 20 20 23 20 20 20  nts,..      #
48b0: 20 20 20 20 77 65 20 68 61 76 65 20 65 76 65 72      we have ever
48c0: 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d  ything we need..
48d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
48e0: 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65  if {$native} the 48f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret 4900: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. 4910: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 4920: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61 74 # NOTE: What 4930: 20 69 73 20 74 68 65 20 70 6c 61 74 66 6f 72 6d is the platform 4940: 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e for this machin 4950: 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e?.. #.. 4960: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 4970: 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f [machineToPlatfo 4980: 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f rm$::tcl_platfo
4990: 72 6d 28 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d 0a  rm(machine)]....
49a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
49b0: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
49c0: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
49d0: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74   file name for t
49e0: 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  he interop assem
49f0: 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  bly..      #
4a00: 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68     containing th
4a10: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
4a20: 4c 69 74 65 20 6e 61 74 69 76 65 20 63 6f 6d 70  Lite native comp
4a30: 6f 6e 65 6e 74 73 2e 20 20 49 66 20 74 68 69 73  onents.  If this
4a40: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4a50: 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 20  file exists, we
4a60: 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 72  should have ever
4a70: 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d  ything we need..
4a80: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
4a90: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
4aa0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
4ab0: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74  ile join $direct 4ac0: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ory \.. 4ad0: 20 24 70 6c 61 74 66 6f 72 6d 20 53 51 4c 69 74$platform SQLit
4ae0: 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d  e.Interop.dll]].
4af0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69  ...      if {[fi
4b00: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN 4b10: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 4b20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 4b30: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 4b40: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 4b50: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 4b60: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 e [file join$di
4b70: 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20  rectory \..
4b80: 20 20 20 20 20 53 51 4c 69 74 65 2e 49 6e 74 65       SQLite.Inte
4b90: 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20  rop.dll]]....
4ba0: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
4bb0: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 4bc0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 4bd0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 4be0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 4bf0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 . # NOTE: B 4c00: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 uild the fully q 4c10: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 ualified file na 4c20: 6d 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 me for the SQLit 4c30: 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 e core.. # 4c40: 20 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20 20 library. 4c50: 49 66 20 74 68 69 73 20 66 69 6c 65 20 65 78 69 If this file exi 4c60: 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 sts, we should h 4c70: 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 ave everything w 4c80: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 4c90: 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d need... #. 4ca0: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e . set fileN 4cb0: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ame [file native 4cc0: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 4cd0: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20$directory \..
4ce0: 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72          $platfor 4cf0: 6d 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d m sqlite3.dll]]. 4d00: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 ... if {[fi 4d10: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
4d20: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
4d30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
4d40: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  e..      }....
4d50: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
4d60: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
4d70: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69  e [file join $di 4d80: 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 rectory \.. 4d90: 20 20 20 20 20 73 71 6c 69 74 65 33 2e 64 6c 6c sqlite3.dll 4da0: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b ]].... if { 4db0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
4dc0: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
4dd0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
4de0: 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
4df0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
4e00: 23 20 4e 4f 54 45 3a 20 4f 6e 65 20 6f 72 20 6d  # NOTE: One or m
4e10: 6f 72 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f  ore native compo
4e20: 6e 65 6e 74 73 20 6e 65 65 64 65 64 20 62 79 20  nents needed by
4e30: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
4e40: 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  te..      #
4e50: 20 20 61 72 65 20 6d 69 73 73 69 6e 67 2e 0d 0a    are missing...
4e60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
4e70: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
4e80: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
4e90: 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62  isReleaseAvailab
4ea0: 6c 65 20 7b 20 64 69 72 65 63 74 6f 72 79 20 7b  le { directory {
4eb0: 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  varName ""} } {.
4ec0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
4ed0: 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61  ng length $varNa 4ee0: 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d me] > 0} then {. 4ef0: 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 . upvar 1 4f00: 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61$varName $varNa 4f10: 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 me.. }.... 4f20: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69 73 42 return [isB 4f30: 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 22 22 uildAvailable "" 4f40: 20 24 64 69 72 65 63 74 6f 72 79 20 24 76 61 72$directory $var 4f50: 4e 61 6d 65 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d Name].. }.... 4f60: 0a 20 20 20 20 70 72 6f 63 20 6a 6f 69 6e 42 75 . proc joinBu 4f70: 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b 20 6e ildDirectory { n 4f80: 61 74 69 76 65 20 70 61 74 68 20 79 65 61 72 20 ative path year 4f90: 70 6c 61 74 66 6f 72 6d 20 63 6f 6e 66 69 67 75 platform configu 4fa0: 72 61 74 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 ration } {.. 4fb0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 4fc0: 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 61 6e E: Figure out an 4fd0: 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74 68 d then return th 4fe0: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 e fully qualifie 4ff0: 64 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75 d path to the bu 5000: 69 6c 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ild.. # 5010: 20 20 20 64 69 72 65 63 74 6f 72 79 20 62 61 73 directory bas 5020: 65 64 20 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72 ed on all the ar 5030: 67 75 6d 65 6e 74 73 20 70 72 6f 76 69 64 65 64 guments provided 5040: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d by our caller.. 5050: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 5060: 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 if {$native} the
5070: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
5080: 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  urn [file join $5090: 70 61 74 68 20 62 69 6e 20 24 79 65 61 72 20 24 path bin$year $50a0: 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 platform$config
50b0: 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20  uration]..
50c0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
50d0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a    return [file j
50e0: 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20 24 79  oin $path bin$y
50f0: 65 61 72 20 24 63 6f 6e 66 69 67 75 72 61 74 69  ear $configurati 5100: 6f 6e 20 62 69 6e 5d 0d 0a 20 20 20 20 20 20 7d on bin].. } 5110: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 5120: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 44 69 72 proc getBuildDir 5130: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 ectory {} {.. 5140: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 5150: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22 TE: See if the " 5160: 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 native" runtime 5170: 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 option has been 5180: 73 65 74 2e 20 20 49 66 20 73 6f 2c 20 75 73 65 set. If so, use 5190: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 51a0: 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 66 6f directory fo 51b0: 72 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 r the mixed-mode 51c0: 20 61 73 73 65 6d 62 6c 79 20 28 61 2e 6b 2e 61 assembly (a.k.a 51d0: 2e 20 74 68 65 20 6e 61 74 69 76 65 20 69 6e 74 . the native int 51e0: 65 72 6f 70 0d 0a 20 20 20 20 20 20 23 20 20 20 erop.. # 51f0: 20 20 20 20 61 73 73 65 6d 62 6c 79 29 2e 20 20 assembly). 5200: 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 20 6f To enable this o 5210: 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 63 6f ption via the co 5220: 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 mmand line, ente 5230: 72 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 r a.. # 5240: 20 20 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c command simil 5250: 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 ar to one of the 5260: 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 following (all 5270: 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 on one line):.. 5280: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 5290: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c EagleShell 52a0: 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c 69 7a 65 .exe -initialize 52b0: 20 2d 72 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 -runtimeOption 52c0: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 23 20 native.. # 52d0: 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c -file .\ 52e0: 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c path\to\all.eagl 52f0: 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 e.. #.. 5300: 20 20 23 20 20 20 20 20 20 20 54 6f 20 65 6e 61 # To ena 5310: 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 ble this option 5320: 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 via the command 5330: 6c 69 6e 65 20 70 72 69 6f 72 20 74 6f 20 74 68 line prior to th 5340: 65 20 22 62 65 74 61 20 31 36 22 0d 0a 20 20 20 e "beta 16".. 5350: 20 20 20 23 20 20 20 20 20 20 20 72 65 6c 65 61 # relea 5360: 73 65 20 6f 66 20 45 61 67 6c 65 2c 20 74 68 65 se of Eagle, the 5370: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 6d 61 following comma 5380: 6e 64 20 6d 75 73 74 20 62 65 20 75 73 65 64 20 nd must be used 5390: 69 6e 73 74 65 61 64 0d 0a 20 20 20 20 20 20 23 instead.. # 53a0: 20 20 20 20 20 20 20 28 61 6c 73 6f 20 61 6c 6c (also all 53b0: 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a on one line):.. 53c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 53d0: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c EagleShel 53e0: 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c 69 7a l.exe -initializ 53f0: 65 20 2d 70 6f 73 74 49 6e 69 74 69 61 6c 69 7a e -postInitializ 5400: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 5410: 20 20 20 22 6f 62 6a 65 63 74 20 69 6e 76 6f 6b "object invok 5420: 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 e Interpreter.Ge 5430: 74 41 63 74 69 76 65 20 41 64 64 52 75 6e 74 69 tActive AddRunti 5440: 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 22 meOption native" 5450: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 5460: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 -file .\path\t 5470: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 o\all.eagle.. 5480: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 5490: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 [info exists ::b 54a0: 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 uild_directory] 54b0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 54c0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
54d0: 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72  ::build_director
54e0: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  y] > 0} then {..
54f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
5500: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c     # NOTE: The l
5510: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62  ocation of the b
5520: 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 68  uild directory h
5530: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64  as been overridd
5540: 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20  en;..        #
5550: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20       therefore,
5560: 75 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e  use it verbatim.
5570: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
5580: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62       return $::b 5590: 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 0d 0a uild_directory.. 55a0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 55b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 55c0: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th 55d0: 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 e "native" runti 55e0: 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 73 65 74 me option is set 55f0: 2c 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 , the mixed-mode 5600: 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 assembly.. 5610: 20 20 20 23 20 20 20 20 20 20 20 69 73 20 62 65 # is be 5620: 69 6e 67 20 74 65 73 74 65 64 2e 20 20 49 6e 20 ing tested. In 5630: 74 68 61 74 20 63 61 73 65 2c 20 74 68 65 20 70 that case, the p 5640: 61 74 68 20 74 6f 20 74 68 65 20 62 75 69 6c 64 ath to the build 5650: 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 directory.. 5660: 20 20 20 20 23 20 20 20 20 20 20 20 77 69 6c 6c # will 5670: 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 70 6c 61 contain the pla 5680: 74 66 6f 72 6d 20 6e 61 6d 65 20 61 6e 64 20 61 tform name and a 5690: 6c 6c 20 74 68 65 20 62 69 6e 61 72 69 65 73 20 ll the binaries 56a0: 75 6e 64 65 72 20 74 65 73 74 0d 0a 20 20 20 20 under test.. 56b0: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 56c0: 6c 64 20 62 65 20 70 72 65 73 65 6e 74 20 69 6e ld be present in 56d0: 20 74 68 61 74 20 64 69 72 65 63 74 6f 72 79 2e that directory. 56e0: 20 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 If the "native 56f0: 22 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 20 20 " runtime.. 5700: 20 20 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f # optio 5710: 6e 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 n is not set, th 5720: 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 e build director 5730: 79 20 77 69 6c 6c 20 62 65 20 63 6f 6e 73 69 64 y will be consid 5740: 65 72 65 64 20 74 6f 20 62 65 0d 0a 20 20 20 20 ered to be.. 5750: 20 20 20 20 23 20 20 20 20 20 20 20 22 70 6c 61 # "pla 5760: 74 66 6f 72 6d 2d 6e 65 75 74 72 61 6c 22 2c 20 tform-neutral", 5770: 77 69 74 68 20 74 68 65 20 6e 6f 74 61 62 6c 65 with the notable 5780: 20 65 78 63 65 70 74 69 6f 6e 20 6f 66 20 61 6e exception of an 5790: 79 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 y native.. 57a0: 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 57b0: 6c 79 20 28 65 2e 67 2e 20 22 53 51 4c 69 74 65 ly (e.g. "SQLite 57c0: 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 22 29 20 63 .Interop.dll") c 57d0: 6f 70 69 65 64 20 74 68 65 72 65 20 64 75 72 69 opied there duri 57e0: 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 ng the.. 57f0: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 70 72 # build pr 5800: 6f 63 65 73 73 20 69 74 73 65 6c 66 2e 20 20 49 ocess itself. I 5810: 66 20 74 68 65 20 62 75 69 6c 64 20 70 72 6f 63 f the build proc 5820: 65 73 73 20 73 6f 6d 65 68 6f 77 20 64 6f 65 73 ess somehow does 5830: 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 not.. # 5840: 20 20 20 20 20 20 63 6f 70 79 20 74 68 65 20 6e copy the n 5850: 61 74 69 76 65 20 61 73 73 65 6d 62 6c 79 20 66 ative assembly f 5860: 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d or this platform 5870: 2c 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 74 65 , most of the te 5880: 73 74 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 sts.. # 5890: 20 20 20 20 20 69 6e 20 74 68 65 20 73 75 69 74 in the suit 58a0: 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 62 65 e will simply be 58b0: 20 73 6b 69 70 70 65 64 2e 20 20 47 65 6e 65 72 skipped. Gener 58c0: 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 2c 20 74 ally speaking, t 58d0: 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 here.. # 58e0: 20 20 20 20 20 20 61 72 65 20 74 77 6f 20 77 61 are two wa 58f0: 79 73 20 74 6f 20 62 75 69 6c 64 20 74 68 65 20 ys to build the 5900: 62 69 6e 61 72 69 65 73 20 77 68 65 6e 20 70 72 binaries when pr 5910: 65 70 61 72 69 6e 67 20 74 6f 20 72 75 6e 20 74 eparing to run t 5920: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 5930: 20 20 20 20 74 65 73 74 20 73 75 69 74 65 3a 0d test suite:. 5940: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 5950: 20 20 20 20 23 20 20 20 20 20 20 20 31 2e 20 42 # 1. B 5960: 75 69 6c 64 20 74 68 65 20 73 65 70 61 72 61 74 uild the separat 5970: 65 20 6d 61 6e 61 67 65 64 20 61 6e 64 20 6e 61 e managed and na 5980: 74 69 76 65 20 61 73 73 65 6d 62 6c 69 65 73 20 tive assemblies 5990: 75 73 69 6e 67 20 73 6f 6d 65 0d 0a 20 20 20 20 using some.. 59a0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 63 # c 59b0: 6f 6d 6d 61 6e 64 73 20 73 69 6d 69 6c 61 72 20 ommands similar 59c0: 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a to:.. #.. 59d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 59e0: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 build.bat${C
59f0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4d 61 6e  onfiguration}Man
5a00: 61 67 65 64 4f 6e 6c 79 20 24 7b 50 6c 61 74 66  agedOnly ${Platf 5a10: 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 20 orm}.. # 5a20: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62 build.b 5a30: 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 at${Configurati
5a40: 6f 6e 7d 4e 61 74 69 76 65 4f 6e 6c 79 20 24 7b  on}NativeOnly ${ 5a50: 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 Platform}.. 5a60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 5a70: 20 20 20 20 20 20 20 20 20 57 68 65 72 65 20 24 Where$
5a80: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20  {Configuration}
5a90: 69 73 20 65 69 74 68 65 72 20 22 44 65 62 75 67  is either "Debug
5aa0: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61  " or "Release" a
5ab0: 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  nd..        #
5ac0: 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72         ${Platfor 5ad0: 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 57 69 m} is either "Wi 5ae0: 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e 0d 0a n32" or "x64"... 5af0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 5b00: 20 20 20 23 20 20 20 20 20 20 20 32 2e 20 42 75 # 2. Bu 5b10: 69 6c 64 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f ild the mixed-mo 5b20: 64 65 20 61 73 73 65 6d 62 6c 79 20 75 73 69 6e de assembly usin 5b30: 67 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 g a command simi 5b40: 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 lar to:.. 5b50: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 #.. # 5b60: 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 build.bat 5b70: 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e${Configuration
5b80: 7d 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20  } ${Platform}.. 5b90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 5ba0: 20 20 23 20 20 20 20 20 20 20 20 20 20 57 68 65 # Whe 5bb0: 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 re${Configurati
5bc0: 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20 22 44  on} is either "D
5bd0: 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73  ebug" or "Releas
5be0: 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20  e" and..
5bf0: 23 20 20 20 20 20 20 20 20 20 20 24 7b 50 6c 61  #          ${Pla 5c00: 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68 65 72 tform} is either 5c10: 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78 36 34 "Win32" or "x64 5c20: 22 2e 20 20 49 66 20 74 68 69 73 20 63 6f 6d 6d ". If this comm 5c30: 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20 and is.. 5c40: 23 20 20 20 20 20 20 20 20 20 20 75 73 65 64 2c # used, 5c50: 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 20 74 various tests t 5c60: 68 61 74 20 72 65 71 75 69 72 65 20 73 75 70 70 hat require supp 5c70: 6c 65 6d 65 6e 74 61 72 79 20 6d 61 6e 61 67 65 lementary manage 5c80: 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 d.. # 5c90: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 69 65 73 assemblies 5ca0: 20 28 65 2e 67 2e 20 4c 49 4e 51 29 20 6d 61 79 (e.g. LINQ) may 5cb0: 20 62 65 20 73 6b 69 70 70 65 64 20 75 6e 6c 65 be skipped unle 5cc0: 73 73 20 74 68 6f 73 65 20 62 69 6e 61 72 69 65 ss those binarie 5cd0: 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 5ce0: 20 20 20 20 20 20 61 72 65 20 73 75 62 73 65 71 are subseq 5cf0: 75 65 6e 74 6c 79 20 63 6f 70 69 65 64 20 69 6e uently copied in 5d00: 74 6f 20 74 68 65 20 63 6f 72 72 65 63 74 20 64 to the correct d 5d10: 69 72 65 63 74 6f 72 79 20 28 69 2e 65 2e 20 62 irectory (i.e. b 5d20: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 5d30: 20 20 20 20 20 20 22 74 65 73 74 5f 61 6c 6c 2e "test_all. 5d40: 62 61 74 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 bat")... 5d50: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 #.. # 5d60: 20 20 20 4e 6f 74 65 20 74 68 61 74 20 61 6c 6c Note that all 5d70: 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 63 6f of the build co 5d80: 6d 6d 61 6e 64 73 20 61 62 6f 76 65 20 77 69 6c mmands above wil 5d90: 6c 20 64 65 66 61 75 6c 74 20 74 6f 20 75 73 69 l default to usi 5da0: 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ng.. # 5db0: 20 20 20 20 74 68 65 20 6c 61 74 65 73 74 20 76 the latest v 5dc0: 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c ersion of MSBuil 5dd0: 64 20 61 76 61 69 6c 61 62 6c 65 20 61 6e 64 20 d available and 5de0: 74 68 65 20 22 74 65 73 74 5f 79 65 61 72 22 20 the "test_year" 5df0: 6d 61 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 may.. # 5e00: 20 20 20 20 20 6e 65 65 64 20 74 6f 20 62 65 20 need to be 5e10: 61 64 6a 75 73 74 65 64 20 61 63 63 6f 72 64 69 adjusted accordi 5e20: 6e 67 6c 79 20 74 6f 20 61 63 74 75 61 6c 6c 79 ngly to actually 5e30: 20 72 75 6e 20 74 68 65 20 74 65 73 74 20 73 75 run the test su 5e40: 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 ite... # 5e50: 20 20 20 20 20 20 52 65 66 65 72 20 74 6f 20 74 Refer to t 5e60: 68 65 20 63 6f 6d 6d 65 6e 74 73 20 69 6e 20 5b he comments in [ 5e70: 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20 66 6f getBuildYear] fo 5e80: 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61 74 69 r more informati 5e90: 6f 6e 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 on on.. # 5ea0: 20 20 20 20 20 20 20 68 6f 77 20 74 6f 20 73 65 how to se 5eb0: 74 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 2e t this variable. 5ec0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 5ed0: 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 20 set native 5ee0: 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f [hasRuntimeOptio 5ef0: 6e 20 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 n native].... 5f00: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6a 6f 69 return [joi 5f10: 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 nBuildDirectory 5f20: 24 6e 61 74 69 76 65 20 5b 67 65 74 42 75 69 6c$native [getBuil
5f30: 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  dBaseDirectory]
5f40: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
5f50: 67 65 74 42 75 69 6c 64 59 65 61 72 5d 20 5b 67  getBuildYear] [g
5f60: 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20  etBuildPlatform
5f70: 24 6e 61 74 69 76 65 5d 20 5b 67 65 74 42 75 69  $native] [getBui 5f80: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d ldConfiguration] 5f90: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 5fa0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 5fb0: 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f 6e etReleaseVersion 5fc0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 5fd0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 # NOTE: Fi 5fe0: 67 75 72 65 20 6f 75 74 20 74 68 65 20 72 65 6c gure out the rel 5ff0: 65 61 73 65 20 76 65 72 73 69 6f 6e 20 66 6f 72 ease version for 6000: 20 75 73 65 20 77 69 74 68 20 74 68 65 20 62 75 use with the bu 6010: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 ild directory.. 6020: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 65 # whe 6030: 6e 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 61 n checking for a 6040: 76 61 69 6c 61 62 6c 65 20 72 65 6c 65 61 73 65 vailable release 6050: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 6060: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 6070: 73 74 73 20 3a 3a 72 65 6c 65 61 73 65 5f 76 65 sts ::release_ve 6080: 72 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 rsion] && \.. 6090: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 60a0: 65 6e 67 74 68 20 24 3a 3a 72 65 6c 65 61 73 65 ength$::release
60b0: 5f 76 65 72 73 69 6f 6e 5d 20 3e 20 30 7d 20 74  _version] > 0} t
60c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
60d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
60e0: 3a 20 54 68 65 20 72 65 6c 65 61 73 65 20 76 65  : The release ve
60f0: 72 73 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 6f  rsion has been o
6100: 76 65 72 72 69 64 64 65 6e 3b 20 74 68 65 72 65  verridden; there
6110: 66 6f 72 65 2c 20 75 73 65 20 69 74 0d 0a 20 20  fore, use it..
6120: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 65        #       ve
6130: 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20  rbatim...
6140: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
6150: 72 6e 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65  rn $::release_ve 6160: 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 rsion.. } e 6170: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 6180: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 6190: 3a 20 4e 6f 20 72 65 6c 65 61 73 65 20 76 65 72 : No release ver 61a0: 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c sion is availabl 61b0: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 e, return an emp 61c0: 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 ty string... 61d0: 20 20 20 20 23 20 20 20 20 20 20 20 49 74 20 69 # It i 61e0: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 s important to r 61f0: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 6200: 74 72 69 6e 67 20 68 65 72 65 20 62 65 63 61 75 tring here becau 6210: 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 se the.. 6220: 23 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f # result o 6230: 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 f this procedure 6240: 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 74 may be used wit 6250: 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a h [file join]... 6260: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 6270: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 6280: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 6290: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 . proc getBui 62a0: 6c 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c ldFileName { fil 62b0: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 eName {platform 62c0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ""} } {.. # 62d0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 62e0: 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 Returns the spec 62f0: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 ified file name 6300: 61 73 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f as if it were lo 6310: 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 cated in the.. 6320: 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c # buil 6330: 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 d directory, dis 6340: 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 carding any dire 6350: 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f ctory informatio 6360: 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 n present.. 6370: 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 # in the 6380: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f file name as pro 6390: 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c vided by our cal 63a0: 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 63b0: 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result 63c0: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 63d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 \.. [f 63e0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 ile join [getBui 63f0: 6c 64 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c ldDirectory]$pl
6400: 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69  atform [file tai
6410: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a  l $fileName]]].. 6420: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6430: 20 23 20 48 41 43 4b 3a 20 57 68 65 6e 20 72 75 # HACK: When ru 6440: 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34 2c 20 nning on WoW64, 6450: 61 73 73 75 6d 65 20 74 68 65 20 74 65 73 74 20 assume the test 6460: 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 65 20 executables are 6470: 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 present.. # 6480: 20 20 20 20 20 20 20 77 69 74 68 20 74 68 65 20 with the 6490: 22 33 32 22 20 73 75 66 66 69 78 20 6f 6e 20 74 "32" suffix on t 64a0: 68 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 hem... #.. 64b0: 20 20 20 20 20 69 66 20 7b 5b 69 73 52 75 6e 6e if {[isRunn 64c0: 69 6e 67 57 6f 57 36 34 5d 20 26 26 20 5b 66 69 ingWoW64] && [fi 64d0: 6c 65 20 65 78 74 65 6e 73 69 6f 6e 20 24 72 65 le extension$re
64e0: 73 75 6c 74 5d 20 65 71 20 22 2e 65 78 65 22 7d  sult] eq ".exe"}
64f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
6500: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 61 70 70   set result [app
6510: 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 72 6f  endArgs [file ro
6520: 6f 74 6e 61 6d 65 20 24 72 65 73 75 6c 74 5d 20  otname $result] 6530: 33 32 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 7d 32.exe].. } 6540: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 6550: 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d$result..    }.
6560: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
6570: 45 78 74 65 72 6e 61 6c 44 69 72 65 63 74 6f 72  ExternalDirector
6580: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  y {} {..      #.
6590: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
65a0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65  his procedure re
65b0: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74  turns the direct
65c0: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 65 78  ory where the ex
65d0: 74 65 72 6e 61 6c 20 62 69 6e 61 72 79 0d 0a 20  ternal binary..
65e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
65f0: 65 73 20 61 72 65 20 6c 6f 63 61 74 65 64 2e 0d  es are located..
6600: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
6610: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74  return [file nat
6620: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69  ivename [file di
6630: 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e  rname [file dirn
6640: 61 6d 65 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79  ame [info binary
6650: 5d 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  ]]]]..    }.....
6660: 20 20 20 20 70 72 6f 63 20 67 65 74 42 69 6e 61      proc getBina
6670: 72 79 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b  ryDirectory {} {
6680: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
6690: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72   # NOTE: This pr
66a0: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20  ocedure returns
66b0: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68  the directory wh
66c0: 65 72 65 20 74 68 65 20 74 65 73 74 20 61 70 70  ere the test app
66d0: 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20  lication..
66e0: 23 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 28  #       itself (
66f0: 69 2e 65 2e 20 74 68 65 20 45 61 67 6c 65 20 73  i.e. the Eagle s
6700: 68 65 6c 6c 29 20 69 73 20 6c 6f 63 61 74 65 64  hell) is located
6710: 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 65 20  .  This will be
6720: 75 73 65 64 20 61 73 0d 0a 20 20 20 20 20 20 23  used as..      #
6730: 20 20 20 20 20 20 20 74 68 65 20 64 65 73 74 69         the desti
6740: 6e 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 63  nation for the c
6750: 6f 70 69 65 64 20 53 79 73 74 65 6d 2e 44 61 74  opied System.Dat
6760: 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20  a.SQLite native
6770: 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  and..      #
6780: 20 20 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d     managed assem
6790: 62 6c 69 65 73 20 28 69 2e 65 2e 20 62 65 63 61  blies (i.e. beca
67a0: 75 73 65 20 74 68 69 73 20 69 73 20 6f 6e 65 20  use this is one
67b0: 6f 66 20 74 68 65 20 66 65 77 20 70 6c 61 63 65  of the few place
67c0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
67d0: 20 77 68 65 72 65 20 74 68 65 20 43 4c 52 20 77   where the CLR w
67e0: 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 66 69 6e  ill actually fin
67f0: 64 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 6d 20  d and load them
6800: 70 72 6f 70 65 72 6c 79 29 2e 0d 0a 20 20 20 20  properly)...
6810: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
6820: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 69  info exists ::bi
6830: 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20  nary_directory]
6840: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
6850: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $6860: 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f ::binary_directo 6870: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ry] > 0} then {. 6880: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6890: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 68a0: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 location of the 68b0: 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 binary directory 68c0: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 68d0: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 dden;.. # 68e0: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 therefore 68f0: 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69 , use it verbati 6900: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 m... #.. 6910: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
6920: 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72  :binary_director
6930: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  y..      } else
6940: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
6950: 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d  n [info binary].
6960: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
6970: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
6980: 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65  ExternalFileName
6990: 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d   { fileName } {.
69a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
69b0: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20  # NOTE: Returns
69c0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69  the specified fi
69d0: 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69 74  le name as if it
69e0: 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69 6e   were located in
69f0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
6a00: 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f      directory co
6a10: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78 74  ntaining the ext
6a20: 65 72 6e 61 6c 20 62 69 6e 61 72 69 65 73 2e 0d  ernal binaries..
6a30: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
6a40: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74  return [file nat
6a50: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
6a60: 69 6e 20 5b 67 65 74 45 78 74 65 72 6e 61 6c 44  in [getExternalD
6a70: 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 4e  irectory] $fileN 6a80: 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d ame]].. }.... 6a90: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 69 6e . proc getBin 6aa0: 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 aryFileName { fi 6ab0: 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d leName {platform 6ac0: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ""} } {.. 6ad0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 6ae0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 Returns the spe 6af0: 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 cified file name 6b00: 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20 6c as if it were l 6b10: 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 ocated in the.. 6b20: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 69 6e # bin 6b30: 61 72 79 20 64 69 72 65 63 74 6f 72 79 2c 20 64 ary directory, d 6b40: 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69 iscarding any di 6b50: 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74 rectory informat 6b60: 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20 ion present.. 6b70: 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68 # in th 6b80: 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70 e file name as p 6b90: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 rovided by our c 6ba0: 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d aller... #. 6bb0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 . return [f 6bc0: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c ile nativename \ 6bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c .. [fil 6be0: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 e join [getBinar 6bf0: 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 yDirectory]$pla
6c00: 74 66 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c  tform [file tail
6c10: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20   $fileName]]].. 6c20: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 6c30: 63 20 67 65 74 43 6f 72 65 42 69 6e 61 72 79 46 c getCoreBinaryF 6c40: 69 6c 65 4e 61 6d 65 20 7b 20 7b 70 6c 61 74 66 ileName { {platf 6c50: 6f 72 6d 20 22 22 7d 20 7b 73 74 61 6e 64 61 72 orm ""} {standar 6c60: 64 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 d false} } {.. 6c70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 6c80: 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 OTE: Returns the 6c90: 20 66 75 6c 6c 20 70 61 74 68 20 66 6f 72 20 74 full path for t 6ca0: 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 he file containi 6cb0: 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f ng the SQLite co 6cc0: 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 re.. # 6cd0: 20 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 native library 6ce0: 20 63 6f 64 65 20 66 6f 72 20 74 68 69 73 20 70 code for this p 6cf0: 6c 61 74 66 6f 72 6d 2e 20 20 46 69 72 73 74 2c latform. First, 6d00: 20 63 68 65 63 6b 20 61 6e 64 20 73 65 65 20 69 check and see i 6d10: 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 f.. # 6d20: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 the SQLite core 6d30: 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 native library 6d40: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e has already been 6d50: 20 6c 6f 61 64 65 64 2e 20 20 4e 65 78 74 2c 0d loaded. Next,. 6d60: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 . # f 6d70: 61 6c 6c 62 61 63 6b 20 74 6f 20 77 68 61 74 20 allback to what 6d80: 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 73 68 the full path sh 6d90: 6f 75 6c 64 20 62 65 2c 20 62 61 73 65 64 20 6f ould be, based o 6da0: 6e 20 77 68 65 74 68 65 72 20 74 68 65 0d 0a 20 n whether the.. 6db0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 # mix 6dc0: 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 6dd0: 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 20 61 is being used a 6de0: 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 nd the name of t 6df0: 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 he current.. 6e00: 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f # platfo 6e10: 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 rm... #.. 6e20: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 6e30: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 .. object 6e40: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 6e50: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 6e60: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 6e70: 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa 6e80: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods 6e90: 5f 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 _SQLiteNativeMod 6ea0: 75 6c 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 uleFileName.. 6eb0: 20 20 20 7d 20 66 69 6c 65 4e 61 6d 65 5d 20 3d } fileName] = 6ec0: 3d 20 30 20 26 26 20 5b 73 74 72 69 6e 67 20 6c = 0 && [string l 6ed0: 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d ength$fileName]
6ee0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
6ef0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
6f00: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 53 51 4c   # NOTE: The SQL
6f10: 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65 20  ite core native
6f20: 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65  library has alre
6f30: 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 20  ady been loaded
6f40: 76 69 61 0d 0a 20 20 20 20 20 20 20 20 23 20 20  via..        #
6f50: 20 20 20 20 20 74 68 65 20 6e 61 74 69 76 65 20       the native
6f60: 6c 69 62 72 61 72 79 20 70 72 65 2d 6c 6f 61 64  library pre-load
6f70: 65 72 2e 20 20 52 65 74 75 72 6e 20 74 68 61 74  er.  Return that
6f80: 20 66 69 6c 65 20 6e 61 6d 65 20 6e 6f 77 2e 0d   file name now..
6f90: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
6fa0: 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65      return $file 6fb0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d Name.. }... 6fc0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 . if {[hasR 6fd0: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 untimeOption nat 6fe0: 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ive]} then {.. 6ff0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 7000: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 # NOTE: Return 7010: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 the mixed-mode a 7020: 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d ssembly file nam 7030: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 7040: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 return [f 7050: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c ile nativename \ 7060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 7070: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e ile join [getBin 7080: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 aryDirectory]$p
7090: 6c 61 74 66 6f 72 6d 20 53 79 73 74 65 6d 2e 44  latform System.D
70a0: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d  ata.SQLite.dll]]
70b0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
70c0: 20 7b 24 73 74 61 6e 64 61 72 64 7d 20 74 68 65   {$standard} the 70d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 70e0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 70f0: 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74 69 76 Return the nativ 7100: 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61 72 64 20 e-only standard 7110: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 66 SQLite library f 7120: 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 ile name... 7130: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 7140: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 turn [file nativ 7150: 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 ename \.. 7160: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 [file join 7170: 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 [getBinaryDirect 7180: 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 73 ory]$platform s
7190: 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a 20 20  qlite3.dll]]..
71a0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
71b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
71c0: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20   # NOTE: Return
71d0: 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20  the native-only
71e0: 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
71f0: 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20   file name...
7200: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7210: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74  return [file nat
7220: 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ivename \..
7230: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
7240: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
7250: 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d  ctory] $platform 7260: 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e SQLite.Interop. 7270: 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a dll]].. }.. 7280: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7290: 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 oc getCommonDire 72a0: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 ctory {} {.. 72b0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 72c0: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 72d0: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 e returns the di 72e0: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 rectory where th 72f0: 65 20 74 65 73 74 20 73 63 72 69 70 74 73 0d 0a e test scripts.. 7300: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 # sh 7310: 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e ould be located. 7320: 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 By default, th 7330: 69 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73 20 is just returns 7340: 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 the Eagle.. 7350: 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 # binary 7360: 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 directory... 7370: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 7380: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f info exists ::co 7390: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 mmon_directory] 73a0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 73b0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
73c0: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
73d0: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
73e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
73f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
7400: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
7410: 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 79  common directory
7420: 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a   has been set;..
7430: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
7440: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
7450: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
7460: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 7470: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 :common_director 7480: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 y.. } elsei 7490: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 74a0: 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f ::vendor_directo 74b0: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 74c0: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 74d0: 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 th$::vendor_dir
74e0: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
74f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
7500: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
7510: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
7520: 74 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 63  the vendor direc
7530: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 65  tory has been se
7540: 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  t;..        #
7550: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
7560: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  se it...
7570: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
7580: 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65  n $::vendor_dire 7590: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 75a0: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 lseif {[info exi 75b0: 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 sts ::tcl_librar 75c0: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 y] && \.. 75d0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 75e0: 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 h$::tcl_library
75f0: 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20  ] > 0 && \..
7600: 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 69        [file isdi
7610: 72 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c  rectory $::tcl_l 7620: 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b 0d ibrary]} then {. 7630: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 7640: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 7650: 76 61 72 69 61 62 6c 65 20 77 69 74 68 20 74 68 variable with th 7660: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 7670: 65 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 e script library 7680: 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 is.. # 7690: 20 20 20 20 20 73 65 74 20 61 6e 64 20 61 70 70 set and app 76a0: 65 61 72 73 20 74 6f 20 62 65 20 61 20 72 65 61 ears to be a rea 76b0: 6c 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 l directory (i.e 76c0: 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d 0a . not embedded.. 76d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 76e0: 77 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b 20 within a file); 76f0: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 therefore, use i 7700: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 7710: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
7720: 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 20  :tcl_library..
7730: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
7740: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
7750: 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63   # NOTE: Fallbac
7760: 6b 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 6f  k to the directo
7770: 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ry containing th
7780: 65 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a 20  e executable...
7790: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
77a0: 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62    return [info b
77b0: 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d  inary]..      }.
77c0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
77d0: 72 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 44  roc getDatabaseD
77e0: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20  irectory {} {..
77f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
7800: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65  NOTE: This proce
7810: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65  dure returns the
7820: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65   directory where
7830: 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61   the test databa
7840: 73 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ses..      #
7850: 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63     should be loc
7860: 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c  ated.  By defaul
7870: 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65  t, this just use
7880: 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d  s the temporary.
7890: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
78a0: 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75  irectory configu
78b0: 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73  red for this sys
78c0: 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  tem...      #..
78d0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
78e0: 78 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 65  xists ::database
78f0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c  _directory] && \
7900: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
7910: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 61  ing length $::da 7920: 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 tabase_directory 7930: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 7940: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 7950: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f # NOTE: The lo 7960: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 61 cation of the da 7970: 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 tabase directory 7980: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 7990: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 dden;.. # 79a0: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 therefore 79b0: 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 , use it... 79c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 79d0: 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73 65 turn$::database
79e0: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  _directory..
79f0: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66    } elseif {[inf
7a00: 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 74  o exists ::scrat
7a10: 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26  ch_directory] &&
7a20: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
7a30: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 7a40: 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 scratch_director 7a50: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a y] > 0} then {.. 7a60: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 7a70: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c # NOTE: The l 7a80: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 ocation of the s 7a90: 63 72 61 74 63 68 20 64 69 72 65 63 74 6f 72 79 cratch directory 7aa0: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 7ab0: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 dden;.. # 7ac0: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 therefore 7ad0: 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 , use it... 7ae0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 7af0: 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f turn$::scratch_
7b00: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
7b10: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
7b20: 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 65     return [getTe
7b30: 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 20  mporaryPath]..
7b40: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
7b50: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 6d  .    proc getTem
7b60: 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 20  poraryDirectory
7b70: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
7b80: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
7b90: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75  s procedure retu
7ba0: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72  rns the director
7bb0: 79 20 77 68 65 72 65 20 74 68 65 20 74 65 6d 70  y where the temp
7bc0: 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 20  orary files..
7bd0: 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c     #       shoul
7be0: 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42  d be located.  B
7bf0: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20  y default, this
7c00: 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 65  just uses the te
7c10: 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23  mporary..      #
7c20: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79         directory
7c30: 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20   configured for
7c40: 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20  this system...
7c50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
7c60: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
7c70: 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74  temporary_direct
7c80: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
7c90: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
7ca0: 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79  gth $::temporary 7cb0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 7cc0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 7cd0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7ce0: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e TE: The location 7cf0: 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72 of the temporar 7d00: 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 y directory has 7d10: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b been overridden; 7d20: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 7d30: 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 therefore, use 7d40: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d it... #. 7d50: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 7d60: 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72$::temporary_dir
7d70: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20  ectory..      }
7d80: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
7d90: 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64  ists ::scratch_d
7da0: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
7db0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
7dc0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61  g length $::scra 7dd0: 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e tch_directory] > 7de0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 7df0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 7e00: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 NOTE: The locat 7e10: 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 ion of the scrat 7e20: 63 68 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 ch directory has 7e30: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e been overridden 7e40: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 7e50: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 7e60: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 e it... # 7e70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 7e80: 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65$::scratch_dire
7e90: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65  ctory..      } e
7ea0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  lse {..        r
7eb0: 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72  eturn [getTempor
7ec0: 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20  aryPath]..
7ed0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
7ee0: 20 70 72 6f 63 20 67 65 74 45 78 65 63 75 74 65   proc getExecute
7ef0: 4f 6e 53 65 74 75 70 20 7b 7d 20 7b 0d 0a 20 20  OnSetup {} {..
7f00: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
7f10: 69 73 74 73 20 3a 3a 65 78 65 63 75 74 65 5f 6f  ists ::execute_o
7f20: 6e 5f 73 65 74 75 70 5d 20 26 26 20 5c 0d 0a 20  n_setup] && \..
7f30: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
7f40: 20 6c 65 6e 67 74 68 20 24 3a 3a 65 78 65 63 75   length $::execu 7f50: 74 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e 20 30 te_on_setup] > 0 7f60: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 7f70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 7f80: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 OTE: Return the 7f90: 63 6f 6e 66 69 67 75 72 65 64 20 53 51 4c 20 74 configured SQL t 7fa0: 6f 20 65 78 65 63 75 74 65 20 64 75 72 69 6e 67 o execute during 7fb0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d the connection. 7fc0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 7fd0: 20 73 65 74 75 70 20 70 72 6f 63 65 64 75 72 65 setup procedure 7fe0: 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 65 72 79 (i.e. for every 7ff0: 20 74 65 73 74 20 64 61 74 61 62 61 73 65 20 63 test database c 8000: 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 onnection)... 8010: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8020: 72 65 74 75 72 6e 20 24 3a 3a 65 78 65 63 75 74 return$::execut
8030: 65 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 20 20  e_on_setup..
8040: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
8050: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
8060: 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c   NOTE: By defaul
8070: 74 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 53  t, there is no S
8080: 51 4c 20 74 6f 20 65 78 65 63 75 74 65 20 64 75  QL to execute du
8090: 72 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  ring the connect
80a0: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ion..        #
80b0: 20 20 20 20 20 73 65 74 75 70 20 70 72 6f 63 65       setup proce
80c0: 64 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 65  dure (i.e. for e
80d0: 76 65 72 79 20 74 65 73 74 20 64 61 74 61 62 61  very test databa
80e0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d  se connection)..
80f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
8100: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
8110: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
8120: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65  ..    proc getTe
8130: 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d  stOverridesPream
8140: 62 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 72 4e  ble { {extraVarN
8150: 61 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 20  ames ""} } {..
8160: 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 73      set varNames
8170: 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20   [list]....
8180: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
8190: 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20  : If available,
81a0: 73 74 61 72 74 20 77 69 74 68 20 74 68 65 20 6d  start with the m
81b0: 61 73 74 65 72 20 6c 69 73 74 20 6f 66 20 74 65  aster list of te
81c0: 73 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 20  st override..
81d0: 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61     #       varia
81e0: 62 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  bles...      #..
81f0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
8200: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6f 76  exists ::test_ov
8210: 65 72 72 69 64 65 73 5d 20 26 26 20 5c 0d 0a 20  errides] && \..
8220: 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74           [llengt
8230: 68 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69  h $::test_overri 8240: 64 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b des] > 0} then { 8250: 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c .. eval l 8260: 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 append varNames 8270: 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65$::test_override
8280: 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  s..      }....
8290: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
82a0: 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 65  OTE: If requeste
82b0: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c  d by our caller,
82c0: 20 61 64 64 20 61 6e 79 20 61 64 64 69 74 69 6f   add any additio
82d0: 6e 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20  nal variable..
82e0: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65      #       name
82f0: 73 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a  s to copy now...
8300: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
8310: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 78 74  f {[llength $ext 8320: 72 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20 30 7d raVarNames] > 0} 8330: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 8340: 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 eval lappend va 8350: 72 4e 61 6d 65 73 20 24 65 78 74 72 61 56 61 72 rNames$extraVar
8360: 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a  Names..      }..
8370: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8380: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74   # NOTE: Build t
8390: 68 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65  he script fragme
83a0: 6e 74 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65  nt to be returne
83b0: 64 20 62 79 20 70 72 6f 63 65 73 73 69 6e 67 20  d by processing
83c0: 65 61 63 68 0d 0a 20 20 20 20 20 20 23 20 20 20  each..      #
83d0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d      variable nam
83e0: 65 20 61 6e 64 20 61 64 64 69 6e 67 20 74 68 65  e and adding the
83f0: 20 6e 65 63 65 63 65 73 73 61 72 79 20 73 63 72   nececessary scr
8400: 69 70 74 20 66 72 61 67 6d 65 6e 74 73 20 66 6f  ipt fragments fo
8410: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
8420: 20 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 20   each one...
8430: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72    #..      set r
8440: 65 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 20  esult ""....
8450: 20 20 66 6f 72 65 61 63 68 20 76 61 72 4e 61 6d    foreach varNam
8460: 65 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20  e $varNames {.. 8470: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8480: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 # NOTE: Build 8490: 74 68 65 20 71 75 61 6c 69 66 69 65 64 20 67 6c the qualified gl 84a0: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 6e 61 obal variable na 84b0: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a me... #.. 84c0: 20 20 20 20 20 20 20 20 73 65 74 20 66 75 6c 6c set full 84d0: 56 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 VarName [appendA 84e0: 72 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d 65 5d rgs ::$varName]
84f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
8500: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44         # NOTE: D
8510: 6f 65 73 20 74 68 65 20 76 61 72 69 61 62 6c 65  oes the variable
8520: 20 65 78 69 73 74 20 69 6e 20 74 68 69 73 20 69   exist in this i
8530: 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65  nterpreter conte
8540: 78 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  xt?..        #..
8550: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
8560: 6f 20 65 78 69 73 74 73 20 24 66 75 6c 6c 56 61  o exists $fullVa 8570: 72 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a rName]} then {.. 8580: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 8590: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A 85a0: 70 70 65 6e 64 20 61 20 73 63 72 69 70 74 20 66 ppend a script f 85b0: 72 61 67 6d 65 6e 74 20 74 6f 20 74 68 65 20 72 ragment to the r 85c0: 65 73 75 6c 74 20 74 68 61 74 20 77 69 6c 6c 20 esult that will 85d0: 63 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20 20 20 correctly.. 85e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 # cop 85f0: 79 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65 64 20 y any contained 8600: 76 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68 65 72 value to another 8610: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e interpreter con 8620: 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 text... 8630: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 70 #.. ap 8640: 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 20 22 pend result \n " 8650: 73 65 74 20 22 20 24 66 75 6c 6c 56 61 72 4e 61 set "$fullVarNa
8660: 6d 65 20 22 20 5c 7b 22 20 5b 73 65 74 20 24 66  me " \{" [set $f 8670: 75 6c 6c 56 61 72 4e 61 6d 65 5d 20 5c 7d 0d 0a ullVarName] \}.. 8680: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 8690: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 86a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 86b0: 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74 61 the result conta 86c0: 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 ins one or more 86d0: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 script fragments 86e0: 2c 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20 20 , append a.. 86f0: 20 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69 6e # newlin 8700: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 8710: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 8720: 65 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20 3e ength$result] >
8730: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
8740: 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c      append resul
8750: 74 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  t \n..      }...
8760: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72  .      return $r 8770: 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d esult.. }.... 8780: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 41 70 70 . proc getApp 8790: 44 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20 7b DomainPreamble { 87a0: 20 7b 70 72 65 66 69 78 20 22 22 7d 20 7b 73 75 {prefix ""} {su 87b0: 66 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 ffix ""} } {.. 87c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 87d0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced 87e0: 75 72 65 20 72 65 74 75 72 6e 73 20 61 20 74 65 ure returns a te 87f0: 73 74 20 73 65 74 75 70 20 73 63 72 69 70 74 20 st setup script 8800: 66 72 61 67 6d 65 6e 74 20 73 75 69 74 61 62 6c fragment suitabl 8810: 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 e for.. # 8820: 20 20 20 20 20 65 76 61 6c 75 61 74 69 6f 6e 20 evaluation 8830: 62 79 20 61 6e 20 69 6e 74 65 72 70 72 65 74 65 by an interprete 8840: 72 20 63 72 65 61 74 65 64 20 69 6e 20 61 6e 20 r created in an 8850: 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 isolated applica 8860: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 tion.. # 8870: 20 20 20 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65 domain. The 8880: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 script fragment 8890: 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 being returned 88a0: 77 69 6c 6c 20 62 65 20 73 75 72 72 6f 75 6e 64 will be surround 88b0: 65 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 ed by.. # 88c0: 20 20 20 20 20 74 68 65 20 70 72 65 66 69 78 20 the prefix 88d0: 61 6e 64 20 73 75 66 66 69 78 20 22 73 63 72 69 and suffix "scri 88e0: 70 74 20 66 72 61 67 6d 65 6e 74 73 22 20 73 70 pt fragments" sp 88f0: 65 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 ecified by our c 8900: 61 6c 6c 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 aller,.. # 8910: 20 20 20 20 20 20 69 66 20 61 6e 79 2e 20 20 54 if any. T 8920: 68 65 20 65 6e 74 69 72 65 20 73 63 72 69 70 74 he entire script 8930: 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 being returned 8940: 77 69 6c 6c 20 62 65 20 73 75 62 73 74 69 74 75 will be substitu 8950: 74 65 64 20 76 69 61 0d 0a 20 20 20 20 20 20 23 ted via.. # 8960: 20 20 20 20 20 20 20 5b 73 75 62 73 74 5d 2c 20 [subst], 8970: 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f in the context o 8980: 66 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 62 65 f our caller, be 8990: 66 6f 72 65 20 62 65 69 6e 67 20 72 65 74 75 72 fore being retur 89a0: 6e 65 64 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 ned... # 89b0: 20 20 20 20 54 68 69 73 20 73 74 65 70 20 69 73 This step is 89c0: 20 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74 68 necessary so th 89d0: 61 74 20 73 6f 6d 65 20 6c 69 6d 69 74 65 64 20 at some limited 89e0: 63 6f 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61 74 context informat 89f0: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 ion,.. # 8a00: 20 20 20 20 70 72 69 6d 61 72 69 6c 79 20 72 65 primarily re 8a10: 6c 61 74 65 64 20 74 6f 20 74 68 65 20 74 65 73 lated to the tes 8a20: 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73 ting directories 8a30: 2c 20 63 61 6e 20 62 65 20 74 72 61 6e 73 66 65 , can be transfe 8a40: 72 72 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 rred.. # 8a50: 20 20 20 20 74 6f 20 74 68 65 20 69 6e 74 65 72 to the inter 8a60: 70 72 65 74 65 72 20 69 6e 20 74 68 65 20 69 73 preter in the is 8a70: 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 olated applicati 8a80: 6f 6e 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e on domain, makin 8a90: 67 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 g it.. # 8aa0: 20 20 20 20 61 62 6c 65 20 74 6f 20 73 75 63 63 able to succ 8ab0: 65 73 73 66 75 6c 6c 79 20 72 75 6e 20 74 65 73 essfully run tes 8ac0: 74 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 ts that require 8ad0: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 one or more of t 8ae0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 8af0: 20 20 66 69 6c 65 73 20 69 6e 20 6f 6e 65 20 6f files in one o 8b00: 66 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 f the testing di 8b10: 72 65 63 74 6f 72 69 65 73 2e 20 20 43 61 6c 6c rectories. Call 8b20: 65 72 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 ers should keep 8b30: 69 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 in.. # 8b40: 20 20 6d 69 6e 64 20 74 68 61 74 20 74 68 65 20 mind that the 8b50: 74 65 73 74 20 73 63 72 69 70 74 20 66 72 61 67 test script frag 8b60: 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72 ment being retur 8b70: 6e 65 64 20 63 61 6e 6e 6f 74 20 72 65 6c 79 20 ned cannot rely 8b80: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 on.. # 8b90: 20 20 61 6e 79 20 73 63 72 69 70 74 20 6c 69 62 any script lib 8ba0: 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 73 20 rary procedures 8bb0: 74 68 61 74 20 61 72 65 20 6e 6f 74 20 70 72 6f that are not pro 8bc0: 76 69 64 65 64 20 62 79 20 74 68 65 20 45 61 67 vided by the Eag 8bd0: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 le.. # 8be0: 20 20 6c 69 62 72 61 72 79 20 70 61 63 6b 61 67 library packag 8bf0: 65 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61 e (i.e. "init.ea 8c00: 67 6c 65 22 29 2c 20 69 6e 63 6c 75 64 69 6e 67 gle"), including 8c10: 20 74 68 6f 73 65 20 70 72 6f 76 69 64 65 64 20 those provided 8c20: 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 by.. # 8c30: 20 20 74 68 65 20 45 61 67 6c 65 20 74 65 73 74 the Eagle test 8c40: 20 70 61 63 6b 61 67 65 2c 20 75 6e 6c 65 73 73 package, unless 8c50: 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 the file contai 8c60: 6e 69 6e 67 20 74 68 65 6d 20 69 73 20 6c 6f 61 ning them is loa 8c70: 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ded.. # 8c80: 20 20 20 6d 61 6e 75 61 6c 6c 79 20 76 69 61 20 manually via 8c90: 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 63 68 61 some other mecha 8ca0: 6e 69 73 6d 20 28 65 2e 67 2e 20 62 79 20 69 6e nism (e.g. by in 8cb0: 63 6c 75 64 69 6e 67 20 61 70 70 72 6f 70 72 69 cluding appropri 8cc0: 61 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ate.. # 8cd0: 20 20 20 5b 70 61 63 6b 61 67 65 20 72 65 71 75 [package requ 8ce0: 69 72 65 5d 20 6f 72 20 5b 73 6f 75 72 63 65 5d ire] or [source] 8cf0: 20 63 6f 6d 6d 61 6e 64 73 20 69 6e 20 74 68 65 commands in the 8d00: 20 70 72 65 66 69 78 20 6f 72 20 73 75 66 66 69 prefix or suffi 8d10: 78 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 x.. # 8d20: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 script fragment 8d30: 73 29 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20 76 s). Also, all v 8d40: 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 ariable referenc 8d50: 65 73 20 61 6e 64 20 61 6c 6c 20 6e 65 73 74 65 es and all neste 8d60: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 8d70: 20 63 6f 6d 6d 61 6e 64 73 20 28 69 2e 65 2e 20 commands (i.e. 8d80: 74 68 6f 73 65 20 69 6e 20 73 71 75 61 72 65 20 those in square 8d90: 62 72 61 63 6b 65 74 73 29 20 63 6f 6e 74 61 69 brackets) contai 8da0: 6e 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c ned in the final 8db0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8dc0: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 script fragment 8dd0: 77 69 6c 6c 20 65 6e 64 20 75 70 20 62 65 69 6e will end up bein 8de0: 67 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 g evaluated in t 8df0: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 he context of th 8e00: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 8e10: 20 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70 72 calling interpr 8e20: 65 74 65 72 20 61 6e 64 20 6e 6f 74 20 74 68 65 eter and not the 8e30: 20 74 61 72 67 65 74 20 69 6e 74 65 72 70 72 65 target interpre 8e40: 74 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 74 ter created in t 8e50: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 8e60: 20 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 isolated appli 8e70: 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 20 75 6e cation domain un 8e80: 6c 65 73 73 20 74 68 65 20 64 6f 6c 6c 61 72 20 less the dollar 8e90: 73 69 67 6e 73 20 61 6e 64 2f 6f 72 20 73 71 75 signs and/or squ 8ea0: 61 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 are.. # 8eb0: 20 20 20 62 72 61 63 6b 65 74 73 20 61 72 65 20 brackets are 8ec0: 73 70 65 63 69 61 6c 6c 79 20 71 75 6f 74 65 64 specially quoted 8ed0: 20 77 69 74 68 20 62 61 63 6b 73 6c 61 73 68 65 with backslashe 8ee0: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 8ef0: 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 return [uplev 8f00: 65 6c 20 31 20 5b 6c 69 73 74 20 73 75 62 73 74 el 1 [list subst 8f10: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 72 [appendArgs$pr
8f20: 65 66 69 78 20 7b 0d 0a 20 20 20 20 20 20 20 20  efix {..
8f30: 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f  if {[hasRuntimeO
8f40: 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74  ption native]} t
8f50: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
8f60: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
8f70: 4e 4f 54 45 3a 20 54 68 65 20 5c 5b 6f 62 6a 65  NOTE: The $obje 8f80: 63 74 5c 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 ct$ command may
8f90: 20 62 65 20 6d 69 73 73 69 6e 67 20 69 6e 20 73   be missing in s
8fa0: 6f 6d 65 20 45 61 67 6c 65 20 63 6f 72 65 0d 0a  ome Eagle core..
8fb0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
8fc0: 20 20 6c 69 62 72 61 72 79 20 63 6f 6e 66 69 67    library config
8fd0: 75 72 61 74 69 6f 6e 73 2e 20 20 49 6e 20 74 68  urations.  In th
8fe0: 61 74 20 63 61 73 65 2c 20 77 65 20 63 61 6e 6e  at case, we cann
8ff0: 6f 74 20 63 6f 70 79 20 74 68 65 0d 0a 20 20 20  ot copy the..
9000: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22         #       "
9010: 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20  native" runtime
9020: 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  option...
9030: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
9040: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
9050: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
9060: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47  ke Interpreter.G
9070: 65 74 41 63 74 69 76 65 20 41 64 64 52 75 6e 74  etActive AddRunt
9080: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65  imeOption native
9090: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
90a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
90b0: 7d 20 5b 67 65 74 54 65 73 74 4f 76 65 72 72 69  } [getTestOverri
90c0: 64 65 73 50 72 65 61 6d 62 6c 65 20 5b 6c 69 73  desPreamble [lis
90d0: 74 20 70 61 74 68 20 74 65 73 74 5f 63 68 61 6e  t path test_chan
90e0: 6e 65 6c 5d 5d 20 24 73 75 66 66 69 78 5d 5d 5d  nel]] $suffix]]] 90f0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 9100: 70 72 6f 63 20 74 72 79 43 6f 70 79 45 78 74 65 proc tryCopyExte 9110: 72 6e 61 6c 46 69 6c 65 20 7b 0d 0a 20 20 20 20 rnalFile {.. 9120: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName 9130: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b {platform ""} { 9140: 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20 newFileName ""} 9150: 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 {verbose false} 9160: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 } {.. set s 9170: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 ourceFileName [g 9180: 65 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 etExternalFileNa 9190: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d me$fileName]...
91a0: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c  .      if {![fil
91b0: 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 65  e exists $source 91c0: 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 FileName]} then 91d0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 {.. if {$
91e0: 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d  verbose} then {.
91f0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
9200: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 9210: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 9220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 9230: 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 --- skipped copy 9240: 69 6e 67 20 65 78 74 65 72 6e 61 6c 20 66 69 6c ing external fil 9250: 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c e \""$sourceFil
9260: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
9270: 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64         "\", it d
9280: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22  oes not exist\n"
9290: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
92a0: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20        return..
92b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
92c0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
92d0: 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20  h $newFileName] 92e0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 92f0: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 set targetF 9300: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 ileName [getBina 9310: 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 ryFileName$newF
9320: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72  ileName $platfor 9330: 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 m].. } else 9340: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 9350: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b targetFileName [ 9360: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 9370: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 e$fileName $pla 9380: 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d tform].. }. 9390: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 ... set tar 93a0: 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 getDirectory [fi 93b0: 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 le dirname$targ
93c0: 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20  etFileName]....
93d0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
93e0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  {..        if {!
93f0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 61  [file exists $ta 9400: 72 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 rgetDirectory]} 9410: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 9420: 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 file mkdir$ta
9430: 72 67 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20  rgetDirectory..
9440: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
9450: 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72    file copy -for
9460: 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  ce $sourceFileNa 9470: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 me$targetFileNa
9480: 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20  me..      }] ==
9490: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
94a0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 94b0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 94c0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 94d0: 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 "---- copied 94e0: 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 external file f 94f0: 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 rom \""$sourceF
9500: 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c  ileName "\" to \
9510: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
9520: 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d    $targetFileNam 9530: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d e \"\n].. } 9540: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 9550: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
9560: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
9570: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
9580: 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74    "---- failed t
9590: 6f 20 63 6f 70 79 20 65 78 74 65 72 6e 61 6c 20  o copy external
95a0: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73  file from \"" $s 95b0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d ourceFileName \. 95c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 . "\" 95d0: 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 to \""$targetF
95e0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
95f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
9600: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f  ..    proc tryCo
9610: 70 79 42 69 6e 61 72 79 46 69 6c 65 20 7b 0d 0a  pyBinaryFile {..
9620: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
9630: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
9640: 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20  "} {newFileName
9650: 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c  ""} {verbose fal
9660: 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  se} } {..      s
9670: 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  et sourceFileNam
9680: 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  e [getBinaryFile
9690: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  Name $fileName$
96a0: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20  platform]....
96b0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
96c0: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65  ists $sourceFile 96d0: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 96e0: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 if {$verb
96f0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ose} then {..
9700: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 9710: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 9720: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 9730: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 9740: 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 skipped copying 9750: 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 binary file \"" 9760: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20$sourceFileName
9770: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
9780: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f   "\", it does no
9790: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20  t exist\n"]..
97a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
97b0: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d  return..      }.
97c0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  ...      if {[st
97d0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77  ring length $new 97e0: 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 FileName] > 0} t 97f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 hen {.. s 9800: 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d et targetFileNam 9810: 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e e [getBuildFileN 9820: 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 ame$newFileName
9830: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20   $platform].. 9840: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 9850: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 set targetF 9860: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c ileName [getBuil 9870: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e dFileName$fileN
9880: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a  ame $platform].. 9890: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 98a0: 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63 set targetDirec 98b0: 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 tory [file dirna 98c0: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 me$targetFileNa
98d0: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  me]....      if
98e0: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
98f0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
9900: 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65  ists $targetDire 9910: 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a ctory]} then {.. 9920: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d file m 9930: 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72 65 kdir$targetDire
9940: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d  ctory..        }
9950: 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63  ..        file c
9960: 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72  opy -force $sour 9970: 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 ceFileName$targ
9980: 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  etFileName..
9990: 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20    }] == 0} then
99a0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
99b0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 99c0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 99d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 99e0: 2d 20 63 6f 70 69 65 64 20 62 69 6e 61 72 79 20 - copied binary 99f0: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 file from \""$s
9a00: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c  ourceFileName "\
9a10: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20  " to \"" \..
9a20: 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46          $targetF 9a30: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 ileName \"\n].. 9a40: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 9a50: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
9a60: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
9a70: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
9a80: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61          "---- fa
9a90: 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 69 6e  iled to copy bin
9aa0: 61 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22  ary file from \"
9ab0: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam 9ac0: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 9ad0: 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 "\" to \""$tar
9ae0: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  getFileName \"\n
9af0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
9b00: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
9b10: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
9b20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
9b30: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
9b40: 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61  m ""} {newFileNa
9b50: 6d 65 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20  me ""} {verbose
9b60: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
9b70: 20 20 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65    set sourceFile
9b80: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69  Name [getBuildFi
9b90: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 9ba0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20$platform]....
9bb0: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20       if {![file
9bc0: 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69  exists $sourceFi 9bd0: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 9be0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 . if {$ve
9bf0: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
9c00: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $9c10: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 9c20: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 9c30: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 9c40: 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e - skipped copyin 9c50: 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 g build file \"" 9c60: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
9c70: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
9c80: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
9c90: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
9ca0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
9cb0: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d   return..      }
9cc0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73  ....      if {[s
9cd0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65  tring length $ne 9ce0: 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 wFileName] > 0} 9cf0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 9d00: 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 set targetFileNa 9d10: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c me [getBinaryFil 9d20: 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 eName$newFileNa
9d30: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20  me $platform].. 9d40: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 9d50: 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 set targe 9d60: 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 tFileName [getBi 9d70: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
9d80: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d  leName $platform 9d90: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... 9da0: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 44 69 set targetDi 9db0: 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 rectory [file di 9dc0: 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c rname$targetFil
9dd0: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
9de0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
9df0: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
9e00: 20 65 78 69 73 74 73 20 24 74 61 72 67 65 74 44   exists $targetD 9e10: 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 irectory]} then 9e20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c {.. fil 9e30: 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 e mkdir$targetD
9e40: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
9e50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6c    }..        fil
9e60: 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73  e copy -force $s 9e70: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 ourceFileName$t
9e80: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20  argetFileName..
9e90: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68       }] == 0} th
9ea0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
9eb0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 9ec0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 9ed0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 9ee0: 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 75 69 6c ---- copied buil 9ef0: 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 d file from \"" 9f00: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20$sourceFileName
9f10: 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20  "\" to \"" \..
9f20: 20 20 20 20 20 20 20 20 20 20 24 74 61 72 67 65            $targe 9f30: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d tFileName \"\n]. 9f40: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 9f50: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
9f60: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
9f70: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
9f80: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
9f90: 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62  failed to copy b
9fa0: 75 69 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c  uild file from \
9fb0: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  "" $sourceFileNa 9fc0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 9fd0: 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 "\" to \""$ta
9fe0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c  rgetFileName \"\
9ff0: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n]..      }..
a000: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
a010: 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46  tryDeleteBinaryF
a020: 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  ile { fileName {
a030: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65  platform ""} {ve
a040: 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b  rbose false} } {
a050: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
a060: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46  Name [getBinaryF
a070: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam a080: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a e$platform]....
a090: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
a0a0: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam a0b0: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. a0c0: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
a0d0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
a0e0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes a0f0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen a100: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. a110: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski a120: 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 62 69 pped deleting bi a130: 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 nary file \""$f
a140: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ileName \..
a150: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74           "\", it
a160: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
a170: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n"]..        }..
a180: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a          return..
a190: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
a1a0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c   if {[catch {fil
a1b0: 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61  e delete $fileNa a1c0: 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 me}] == 0} then a1d0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs a1e0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
a1f0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
a200: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
a210: 2d 20 64 65 6c 65 74 65 64 20 62 69 6e 61 72 79  - deleted binary
a220: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN a230: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. a240: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. a250: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
a260: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
a270: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
a280: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64      "---- failed
a290: 20 74 6f 20 64 65 6c 65 74 65 20 62 69 6e 61 72   to delete binar
a2a0: 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  y file \"" $file a2b0: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 Name \"\n].. a2c0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... a2d0: 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 proc tryDelet a2e0: 65 42 75 69 6c 64 46 69 6c 65 20 7b 20 66 69 6c eBuildFile { fil a2f0: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 eName {platform a300: 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c ""} {verbose fal a310: 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 se} } {.. s a320: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 et fileName [get a330: 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 BuildFileName$f
a340: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72  ileName $platfor a350: 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b m].... if { a360: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 ![file exists$f
a370: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
a380: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76  ..        if {$v a390: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a erbose} then {.. a3a0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs a3b0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
a3c0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
a3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
a3e0: 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74  -- skipped delet
a3f0: 69 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c  ing build file \
a400: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a  "" $fileName \.. a410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ a420: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 ", it does not e a430: 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 xist\n"].. a440: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 }.. ret a450: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a urn.. }.... a460: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch a470: 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 {file delete$f
a480: 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20  ileName}] == 0}
a490: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a4a0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch a4b0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg a4c0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. a4d0: 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 "---- deleted b a4e0: 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 uild file \""$f
a4f0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
a500: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
a510: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: a520: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap a530: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. a540: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 "---- fa a550: 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 iled to delete b a560: 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 uild file \""$f
a570: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
a580: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
a590: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f  ..    proc tryCo
a5a0: 70 79 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20  pyAssembly {..
a5b0: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
a5c0: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
a5d0: 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72   {pdb true} {ver
a5e0: 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  bose false} } {.
a5f0: 0a 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75  .      tryCopyBu
a600: 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  ildFile $fileNam a610: 65 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 e$platform "" $a620: 76 65 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 verbose.... a630: 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 if {$pdb} then
a640: 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 43 6f  {..        tryCo
a650: 70 79 42 75 69 6c 64 46 69 6c 65 20 5b 61 70 70  pyBuildFile [app
a660: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
a670: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f         [file roo
a680: 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d  tname $fileName] a690: 20 2e 70 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d .pdb]$platform
a6a0: 20 22 22 20 24 76 65 72 62 6f 73 65 0d 0a 20 20   "" $verbose.. a6b0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... a6c0: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c . proc tryDel a6d0: 65 74 65 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 eteAssembly {.. a6e0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e fileN a6f0: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 ame {platform "" a700: 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76 65 } {pdb true} {ve a710: 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b rbose false} } { a720: 0d 0a 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 .. tryDelet a730: 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c eBinaryFile$fil
a740: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 20  eName $platform a750: 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20$verbose....
a760: 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e    if {$pdb} then a770: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44 {.. tryD a780: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile a790: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. a7a0: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file a7b0: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e rootname$fileN
a7c0: 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74  ame] .pdb] $plat a7d0: 66 6f 72 6d 20 24 76 65 72 62 6f 73 65 0d 0a 20 form$verbose..
a7e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
a7f0: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 4c 6f  ..    proc tryLo
a800: 61 64 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c  adAssembly { fil
a810: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20  eName {platform
a820: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  ""} } {..      s
a830: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74  et fileName [get
a840: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $a850: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
a860: 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  rm]....      if
a870: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
a880: 20 20 20 73 65 74 20 61 73 73 65 6d 62 6c 79 20     set assembly
a890: 5b 6f 62 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f  [object load -lo
a8a0: 61 64 74 79 70 65 20 46 69 6c 65 20 2d 61 6c 69  adtype File -ali
a8b0: 61 73 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20  as $fileName].. a8c0: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 }] == 0} th a8d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. a8e0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: a8f0: 20 4e 6f 77 2c 20 61 64 64 20 74 68 65 20 6e 65 Now, add the ne a900: 63 65 73 73 61 72 79 20 74 65 73 74 20 63 6f 6e cessary test con a910: 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 straint... a920: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 #.. add a930: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 66 69 6c 65 Constraint [file a940: 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 rootname [file a950: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d tail$fileName]]
a960: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
a970: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47         # NOTE: G
a980: 72 61 62 20 74 68 65 20 69 6d 61 67 65 20 72 75  rab the image ru
a990: 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 66 72  ntime version fr
a9a0: 6f 6d 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20  om the assembly
a9b0: 62 65 63 61 75 73 65 0d 0a 20 20 20 20 20 20 20  because..
a9c0: 20 23 20 20 20 20 20 20 20 73 65 76 65 72 61 6c   #       several
a9d0: 20 74 65 73 74 73 20 72 65 6c 79 20 6f 6e 20 69   tests rely on i
a9e0: 74 20 68 61 76 69 6e 67 20 61 20 63 65 72 74 61  t having a certa
a9f0: 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20  in value...
aa00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64     #..        ad
aa10: 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
aa20: 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 74 61  endArgs [file ta
aa30: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5f 20  il $fileName] _ aa40: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ aa50: 24 61 73 73 65 6d 62 6c 79 20 49 6d 61 67 65 52$assembly ImageR
aa60: 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d  untimeVersion]].
aa70: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
aa80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
aa90: 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 61  turn the full pa
aaa0: 74 68 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 64  th of the loaded
aab0: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...
aac0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
aad0: 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  n $fileName.. aae0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re aaf0: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a turn "".. }.. ab00: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 53 51 ... proc isSQ ab10: 4c 69 74 65 52 65 61 64 79 20 7b 7d 20 7b 0d 0a LiteReady {} {.. ab20: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # ab30: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 NOTE: This proc ab40: 65 64 75 72 65 20 6d 75 73 74 20 72 65 74 75 72 edure must retur ab50: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 n non-zero only ab60: 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 if the SQLite na ab70: 74 69 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 tive.. # ab80: 20 20 20 20 6c 69 62 72 61 72 79 20 61 6e 64 20 library and ab90: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e the System.Data. aba0: 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 SQLite managed a abb0: 73 73 65 6d 62 6c 79 20 61 72 65 20 6c 6f 61 64 ssembly are load abc0: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # abd0: 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 and ready for abe0: 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 use by the test abf0: 73 75 69 74 65 2e 20 20 43 75 72 72 65 6e 74 6c suite. Currentl ac00: 79 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 y, this procedur ac10: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # ac20: 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 should be calle ac30: 64 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65 d only after the ac40: 20 5b 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c [tryLoadAssembl ac50: 79 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 y] procedure has ac60: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # ac70: 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 been called to p ac80: 72 6f 62 65 20 66 6f 72 20 74 68 65 20 53 79 73 robe for the Sys ac90: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite aca0: 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 managed assembly acb0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # acc0: 61 6e 64 20 74 68 65 20 5b 63 68 65 63 6b 46 6f and the [checkFo acd0: 72 53 51 4c 69 74 65 5d 20 70 72 6f 63 65 64 75 rSQLite] procedu ace0: 72 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c re has been call acf0: 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 0d ed to probe for. ad00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t ad10: 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 he SQLite native ad20: 20 6c 69 62 72 61 72 79 3b 20 6f 74 68 65 72 77 library; otherw ad30: 69 73 65 2c 20 74 68 69 73 20 70 72 6f 63 65 64 ise, this proced ad40: 75 72 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 0d ure will simply. ad50: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a ad60: 6c 77 61 79 73 20 72 65 74 75 72 6e 20 7a 65 72 lways return zer ad70: 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 o... #.. ad80: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 return [expr ad90: 7b 0d 0a 20 20 20 20 20 20 20 20 5b 68 61 76 65 {.. [have ada0: 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 Constraint Syste adb0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5d 20 26 m.Data.SQLite] & adc0: 26 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e & [haveConstrain add0: 74 20 53 51 4c 69 74 65 5d 0d 0a 20 20 20 20 20 t SQLite].. ade0: 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }].. }..... adf0: 20 20 20 70 72 6f 63 20 6d 61 74 63 68 4d 61 63 proc matchMac ae00: 68 69 6e 65 20 7b 20 70 6c 61 74 66 6f 72 6d 20 hine { platform ae10: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. ae20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20 65 # NOTE: An e ae30: 6d 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 mpty string for ae40: 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65 61 the platform mea ae50: 6e 73 20 74 68 61 74 20 74 68 65 20 62 75 69 6c ns that the buil ae60: 64 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 d is not.. ae70: 23 20 20 20 20 20 20 20 5b 70 72 69 6d 61 72 69 # [primari ae80: 6c 79 5d 20 61 20 6e 61 74 69 76 65 20 62 75 69 ly] a native bui ae90: 6c 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 ld; therefore, i aea0: 74 20 61 6c 77 61 79 73 20 6d 61 74 63 68 65 73 t always matches aeb0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. aec0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le aed0: 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 ngth$platform]
aee0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
aef0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
af00: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  e..      }....
af10: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
af20: 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 73 70  OTE: Does the sp
af30: 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d  ecified platform
af40: 20 6d 61 74 63 68 20 75 70 20 74 6f 20 74 68 65   match up to the
af50: 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
af60: 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ?..      #..
af70: 20 20 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d 20    if {$platform af80: 65 71 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 eq [machineToPla af90: 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 tform$::tcl_pla
afa0: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d  tform(machine)]}
afb0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
afc0: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
afd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
afe0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
aff0: 54 68 65 20 73 70 65 63 69 66 69 65 64 20 70 6c  The specified pl
b000: 61 74 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 20  atform does not
b010: 6d 61 74 63 68 20 75 70 20 77 69 74 68 20 74 68  match up with th
b020: 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20  e platform..
b030: 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68    #       for th
b040: 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
b050: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
b060: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d     return false.
b070: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
b080: 72 6f 63 20 68 61 76 65 53 51 4c 69 74 65 4f 62  roc haveSQLiteOb
b090: 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 7b 7d 20 7b  jectCommand {} {
b0a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
b0b0: 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20   # NOTE: Is the
b0c0: 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64  [object] command
b0d0: 20 63 75 72 72 65 6e 74 6c 79 20 61 76 61 69 6c   currently avail
b0e0: 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a  able?..      #..
b0f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78        return [ex
b100: 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e  pr {[llength [in
b110: 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65  fo commands obje
b120: 63 74 5d 5d 20 3e 20 30 7d 5d 0d 0a 20 20 20 20  ct]] > 0}]..
b130: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
b140: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4f 62 6a  heckForSQLiteObj
b150: 65 63 74 43 6f 6d 6d 61 6e 64 20 7b 20 63 68 61  ectCommand { cha
b160: 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20  nnel } {..
b170: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel " b180: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo b190: 72 20 5c 22 6f 62 6a 65 63 74 5c 22 20 63 6f 6d r \"object\" com b1a0: 6d 61 6e 64 20 75 73 61 67 65 2e 2e 2e 20 22 0d mand usage... ". b1b0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 ... if {![i b1c0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( b1d0: 73 71 6c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d sqliteObjectComm b1e0: 61 6e 64 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 and)] && \.. b1f0: 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 [haveSQLit b200: 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d eObjectCommand]} b210: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. b220: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
b230: 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65  yes\n..      } e
b240: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
b250: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
b260: 3a 20 55 6e 6c 65 73 73 20 77 65 20 61 72 65 20  : Unless we are
b270: 66 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d 20 64  forbidden from d
b280: 6f 69 6e 67 20 73 6f 2c 20 61 64 64 20 73 6f 6d  oing so, add som
b290: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 0d 0a 20  e constraints..
b2a0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
b2b0: 68 61 74 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 6d  hat will allow m
b2c0: 6f 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 20  ost of the test
b2d0: 73 75 69 74 65 20 74 6f 20 72 75 6e 20 28 69 2e  suite to run (i.
b2e0: 65 2e 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20  e. those..
b2f0: 20 20 23 20 20 20 20 20 20 20 74 65 73 74 73 20    #       tests
b300: 74 68 61 74 20 64 6f 20 6e 6f 74 20 64 69 72 65  that do not dire
b310: 63 74 6c 79 20 72 65 6c 79 20 75 70 6f 6e 20 74  ctly rely upon t
b320: 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d  he [object] comm
b330: 61 6e 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 23  and)...        #
b340: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
b350: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
b360: 28 73 68 69 6d 53 51 4c 69 74 65 41 73 73 65 6d  (shimSQLiteAssem
b370: 62 6c 79 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d  blyConstraints)]
b380: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
b390: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
b3a0: 74 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20  t SQLite..
b3b0: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
b3c0: 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 0d  t SQLiteInterop.
b3d0: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f  .          addCo
b3e0: 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e  nstraint System.
b3f0: 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20  Data.SQLite..
b400: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
b410: 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61  aint System.Data
b420: 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69  .SQLite.Encrypti
b430: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64  on..          ad
b440: 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74  dConstraint Syst
b450: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c  em.Data.SQLite.L
b460: 69 6e 71 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  inq....
b470: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b   addConstraint [
b480: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
b490: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
b4a0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
b4b0: 6c 6c 5f 76 20 5b 67 65 74 42 75 69 6c 64 43 6c  ll_v [getBuildCl
b4c0: 72 56 65 72 73 69 6f 6e 5d 5d 0d 0a 20 20 20 20  rVersion]]..
b4d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
b4e0: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
b4f0: 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69  ts ::no(shimSQLi
b500: 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  teDefineConstant
b510: 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74  Constraints)]} t
b520: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
b530: 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43   foreach defineC
b540: 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d  onstant [list \.
b550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49  .              I
b560: 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e  NTEROP_EXTENSION
b570: 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 52  _FUNCTIONS INTER
b580: 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f  OP_TEST_EXTENSIO
b590: 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  N \..
b5a0: 20 20 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55     INTEROP_VIRTU
b5b0: 41 4c 5f 54 41 42 4c 45 20 55 53 45 5f 49 4e 54  AL_TABLE USE_INT
b5c0: 45 52 4f 50 5f 44 4c 4c 5d 20 7b 0d 0a 20 20 20  EROP_DLL] {..
b5d0: 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73           addCons
b5e0: 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
b5f0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
b600: 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73        defineCons
b610: 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
b620: 2e 53 51 4c 69 74 65 2e 20 24 64 65 66 69 6e 65  .SQLite. $define b630: 43 6f 6e 73 74 61 6e 74 5d 0d 0a 20 20 20 20 20 Constant].. b640: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. b650: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if b660: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : b670: 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 56 69 :no(shimSQLiteVi b680: 73 75 61 6c 53 74 75 64 69 6f 43 6f 6e 73 74 72 sualStudioConstr b690: 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d aints)]} then {. b6a0: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f . addCo b6b0: 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append b6c0: 41 72 67 73 20 76 69 73 75 61 6c 53 74 75 64 69 Args visualStudi b6d0: 6f 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d o [getBuildYear] b6e0: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a ].. }.... b6f0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
b700: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20  hannel no\n..
b710: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
b720: 20 20 20 20 70 72 6f 63 20 63 68 61 6e 67 65 4e      proc changeN
b730: 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69  ativeRuntimeOpti
b740: 6f 6e 20 7b 20 6e 61 74 69 76 65 20 7d 20 7b 0d  on { native } {.
b750: 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e  .      if {[llen
b760: 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e  gth [info comman
b770: 64 73 20 64 65 62 75 67 5d 5d 20 3e 20 30 20 26  ds debug]] > 0 &
b780: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
b790: 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 73 75  llength [info su
b7a0: 62 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 20  bcommands debug
b7b0: 72 75 6e 74 69 6d 65 6f 70 74 69 6f 6e 5d 5d 20  runtimeoption]]
b7c0: 3e 20 30 20 26 26 20 5b 63 61 74 63 68 20 7b 0d  > 0 && [catch {.
b7d0: 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 72  .        debug r
b7e0: 75 6e 74 69 6d 65 6f 70 74 69 6f 6e 20 5b 65 78  untimeoption [ex
b7f0: 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 61  pr {$native ? "a b800: 64 64 22 20 3a 20 22 72 65 6d 6f 76 65 22 7d 5d dd" : "remove"}] b810: 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 7d native.. } b820: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. b830: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t b840: 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rue.. }.... b850: 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 if {[haveS b860: 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 QLiteObjectComma b870: 6e 64 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d nd] && [catch {. b880: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 . object b890: 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 invoke Interpret b8a0: 65 72 2e 47 65 74 41 63 74 69 76 65 20 5b 65 78 er.GetActive [ex b8b0: 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 5c 0d pr {$native ? \.
b8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 41 64  .            "Ad
b8d0: 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20  dRuntimeOption"
b8e0: 3a 20 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65  : "RemoveRuntime
b8f0: 4f 70 74 69 6f 6e 22 7d 5d 20 6e 61 74 69 76 65  Option"}] native
b900: 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d  ..      }] == 0}
b910: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b920: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
b930: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
b940: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
b950: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
b960: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75  checkForSQLiteBu
b970: 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  ilds { channel {
b980: 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20  select false} }
b990: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
b9a0: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
b9b0: 66 6f 72 20 65 76 65 72 79 20 70 6f 73 73 69 62  for every possib
b9c0: 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e 61  le valid combina
b9d0: 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 75  tion of values u
b9e0: 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20 20  sed when..
b9f0: 23 20 20 20 20 20 20 20 6c 6f 63 61 74 69 6e 67  #       locating
ba00: 20 6f 75 74 20 74 68 65 20 62 75 69 6c 64 20 6f   out the build o
ba10: 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c  utput directory,
ba20: 20 73 68 6f 77 69 6e 67 20 65 61 63 68 20 61 76   showing each av
ba30: 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 23  ailable..      #
ba40: 20 20 20 20 20 20 20 62 75 69 6c 64 20 76 61 72         build var
ba50: 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65  iation along the
ba60: 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a   way...      #..
ba70: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61        foreach na
ba80: 74 69 76 65 20 5b 6c 69 73 74 20 66 61 6c 73 65  tive [list false
ba90: 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20 20   true] {..
baa0: 20 20 66 6f 72 65 61 63 68 20 79 65 61 72 20 5b    foreach year [
bab0: 67 65 74 42 75 69 6c 64 59 65 61 72 73 5d 20 7b  getBuildYears] {
bac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
bad0: 61 63 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ach configuratio
bae0: 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69  n [getBuildConfi
baf0: 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20  gurations] {..
bb00: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
bb10: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
bb20: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20   Figure out the
bb30: 65 66 66 65 63 74 69 76 65 20 62 75 69 6c 64 20  effective build
bb40: 70 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69 73 20  platform.  This
bb50: 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..
bb60: 23 20 20 20 20 20 20 20 62 61 73 65 64 20 6f 6e  #       based on
bb70: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not
bb80: 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 61  a [primarily] na
bb90: 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 20 20 20  tive build..
bba0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
bbb0: 69 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  is being used.
bbc0: 46 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20  For [primarily]
bbd0: 6e 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c 64  non-native build
bbe0: 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..
bbf0: 23 20 20 20 20 20 20 20 74 68 69 73 20 77 69 6c  #       this wil
bc00: 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 20 73 74  l be an empty st
bc10: 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  ring...
bc20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
bc30: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b    set platform [
bc40: 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d  getBuildPlatform
bc50: 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20   $native].... bc60: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
bc70: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
bc80: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
bc90: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
bca0: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d  cking for System
bcb0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69  .Data.SQLite bui
bcc0: 6c 64 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a  ld \"" [expr \..
bcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bce0: 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69  {$native ? "nati bcf0: 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 78 70 ve/" : ""}] [exp bd00: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 r {[string lengt bd10: 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h \.. bd20: 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20$platform]
bd30: 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67  > 0 ? [appendArg
bd40: 73 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a  s $platform /] : bd50: 20 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d 0a 20 ""}]$year \..
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bd70: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   $configuration bd80: 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 "\"... "].... bd90: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. bda0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: bdb0: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 Build the fully bdc0: 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 qualified direct bdd0: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 ory where the ne bde0: 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 cessary.. bdf0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d # com be00: 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 ponents for Syst be10: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 em.Data.SQLite s be20: 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d hould be found.. be30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. be40: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 set be50: 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 directory [joinB be60: 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e uildDirectory$n
be70: 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 20  ative \..
be80: 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69           [getBui
be90: 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d  ldBaseDirectory]
bea0: 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d   $year$platform
beb0: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d   $configuration] bec0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... bed0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # bee0: 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e 65 NOTE: Do the ne bef0: 63 65 73 73 61 72 79 20 66 69 6c 65 73 20 65 78 cessary files ex bf00: 69 73 74 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c ist? Currently, bf10: 20 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 73 0d no other steps. bf20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # bf30: 20 20 20 20 20 61 72 65 20 74 61 6b 65 6e 20 74 are taken t bf40: 6f 20 76 65 72 69 66 79 20 74 68 69 73 20 62 75 o verify this bu bf50: 69 6c 64 20 69 73 20 61 63 74 75 61 6c 6c 79 20 ild is actually bf60: 76 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 viable... bf70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. bf80: 20 20 20 20 69 66 20 7b 5b 69 73 42 75 69 6c 64 if {[isBuild bf90: 41 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 69 76 Available$nativ
bfa0: 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74  e $directory]} t bfb0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. bfc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. bfd0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 # NOTE: Wh bfe0: 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 20 6d en in "select" m bff0: 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c ode, automatical c000: 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 ly select the fi c010: 72 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rst.. c020: 20 20 20 23 20 20 20 20 20 20 20 61 76 61 69 6c # avail c030: 61 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 53 79 able build of Sy c040: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite c050: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e and then return c060: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c070: 23 20 20 20 20 20 20 20 69 6d 6d 65 64 69 61 74 # immediat c080: 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ely... c090: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. c0a0: 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 if {$select
c0b0: 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e   && [matchMachin
c0c0: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68  e $platform]} th c0d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. c0e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. c0f0: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: c100: 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 Manually overri c110: 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 de all the build c120: 20 64 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63 directory selec c130: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 tion.. c140: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re c150: 6c 61 74 65 64 20 74 65 73 74 20 73 65 74 74 69 lated test setti c160: 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 ngs in order to c170: 66 6f 72 63 65 20 74 68 69 73 20 62 75 69 6c 64 force this build c180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c190: 20 20 23 20 20 20 20 20 20 20 6f 66 20 53 79 73 # of Sys c1a0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite c1b0: 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 to be used... c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 c1e0: 69 66 20 7b 21 5b 63 68 61 6e 67 65 4e 61 74 69 if {![changeNati c1f0: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 veRuntimeOption c200: 24 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b$native]} then {
c210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
c220: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann c230: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ c240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c250: 20 20 20 20 20 20 20 20 22 6e 6f 2c 20 66 61 69 "no, fai c260: 6c 65 64 20 74 6f 20 22 20 5b 65 78 70 72 20 7b led to " [expr { c270: 24 6e 61 74 69 76 65 20 3f 20 22 61 64 64 22 20$native ? "add"
c280: 3a 20 22 72 65 6d 6f 76 65 22 7d 5d 20 5c 0d 0a  : "remove"}] \..
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c2a0: 20 20 20 20 20 20 22 20 74 68 65 20 5c 22 6e 61        " the \"na
c2b0: 74 69 76 65 5c 22 20 72 75 6e 74 69 6d 65 20 6f  tive\" runtime o
c2c0: 70 74 69 6f 6e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20  ption\n"]....
c2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
c2e0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
c300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
c310: 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 79 65 61    set ::test_yea
c320: 72 20 24 79 65 61 72 0d 0a 20 20 20 20 20 20 20  r $year.. c330: 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 set ::t c340: 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24 70 6c est_platform$pl
c350: 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20  atform..
c360: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65          set ::te
c370: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
c380: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d   $configuration. c390: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... c3a0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
c3b0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
c3c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
c3d0: 20 20 20 20 20 22 79 65 73 2c 20 73 65 6c 65 63       "yes, selec
c3e0: 74 65 64 20 28 22 20 5b 65 78 70 72 20 7b 24 6e  ted (" [expr {$n c3f0: 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f ative ? "native/ c400: 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 " : ""}] \.. c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 c420: 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c [expr {[string l c430: 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d ength$platform]
c440: 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72   > 0 ? [appendAr
c450: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
c460: 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66            $platf c470: 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 orm /] : ""}]$y
c480: 65 61 72 20 2f 20 24 63 6f 6e 66 69 67 75 72 61  ear / $configura c490: 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 tion ")\n"].... c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r c4b0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. c4c0: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else c4d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. c4e0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
c4f0: 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20  el yes\n..
c500: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
c510: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
c520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
c530: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no c540: 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \n.. c550: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. c560: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. c570: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu c580: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. c590: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 .... proc che c5a0: 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 ckForSQLiteRelea c5b0: 73 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 ses { channel {s c5c0: 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b elect false} } { c5d0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. c5e0: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 # NOTE: Check f c5f0: 6f 72 20 70 61 73 74 20 72 65 6c 65 61 73 65 73 or past releases c600: 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e of System.Data. c610: 53 51 4c 69 74 65 20 69 6e 20 74 68 65 20 64 69 SQLite in the di c620: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 rectory.. # c630: 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 contained c640: 20 69 6e 20 74 68 65 20 22 53 79 73 74 65 6d 2e in the "System. c650: 44 61 74 61 2e 53 51 4c 69 74 65 22 20 65 6e 76 Data.SQLite" env c660: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c ironment variabl c670: 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20 e, if.. # c680: 20 20 20 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20 present... c690: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if c6a0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : c6b0: 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 :env(System.Data c6c0: 2e 53 51 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a .SQLite)] && \.. c6d0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin c6e0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28 g length$::env(
c6f0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
c700: 74 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  te)] > 0} then {
c710: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
c720: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
c730: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61  ld the fully qua
c740: 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 79  lified directory
c750: 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 73   where the neces
c760: 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20  sary..        #
c770: 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73        components
c780: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61   for System.Data
c790: 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62  .SQLite should b
c7a0: 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20  e found...
c7b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
c7c0: 20 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65   directory [file
c7d0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
c7e0: 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
c7f0: 20 20 20 20 20 20 24 3a 3a 65 6e 76 28 53 79 73        $::env(Sys c800: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 tem.Data.SQLite) c810: 20 5b 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 [getReleaseVers c820: 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 ion]]].... c830: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
c840: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
c850: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
c860: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
c870: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
c880: 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d  e release \"" \.
c890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 64 69  .            $di c8a0: 72 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 rectory "\"... " c8b0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ].... if c8c0: 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c {[isReleaseAvail c8d0: 61 62 6c 65 20 24 64 69 72 65 63 74 6f 72 79 20 able$directory
c8e0: 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20  platform]} then
c8f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
c900: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
c910: 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d  $platform] == 0} c920: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. c930: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor c940: 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 m unknown.. c950: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... c960: 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 if {$select
c970: 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65  && [matchMachine
c980: 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65   $platform]} the c990: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. c9a0: 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 set ::build_dir c9b0: 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 ectory$director
c9c0: 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y....
c9d0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel c9e0: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 [appendArgs "yes c9f0: 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 , selected ("$p
ca00: 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a  latform ")\n"]..
ca10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
ca20: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
ca30: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
ca40: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
ca50: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen ca60: 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70 dArgs "yes ("$p
ca70: 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a  latform ")\n"]..
ca80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
ca90: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
caa0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $cab0: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a channel no\n.... cac0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac cad0: 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d 64 h path [lsort -d cae0: 65 63 72 65 61 73 69 6e 67 20 5b 66 69 6c 65 20 ecreasing [file caf0: 6c 69 73 74 20 24 64 69 72 65 63 74 6f 72 79 20 list$directory
cb00: 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  *]] {..
cb10: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
cb20: 73 74 73 20 24 70 61 74 68 5d 20 26 26 20 5b 66  sts $path] && [f cb30: 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 ile isdirectory cb40: 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a$path]} then {..
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
cb60: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap cb70: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. cb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- cb90: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for cba0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL cbb0: 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 ite release \"" cbc0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. cbd0: 20 20 20 20 20 24 70 61 74 68 20 22 5c 22 2e 2e$path "\"..
cbe0: 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  . "]....
cbf0: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65 6c        if {[isRel
cc00: 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24 70  easeAvailable $p cc10: 61 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 ath platform]} t cc20: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. cc30: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri cc40: 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
cc50: 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  orm] == 0} then
cc60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
cc70: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72       set platfor
cc80: 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20  m unknown..
cc90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ccb0: 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b  if {$select && [ ccc0: 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70 6c matchMachine$pl
ccd0: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d  atform]} then {.
cce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
ccf0: 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64     set ::build_d
cd00: 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 0d 0a  irectory $path.. cd10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. cd20: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
cd30: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
cd40: 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22  yes, selected ("
cd50: 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22   $platform ")\n" cd60: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... cd70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr cd80: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ue.. cd90: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. cda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 cdb0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
cdc0: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20  appendArgs "yes
cdd0: 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c  (" $platform ")\ cde0: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n"].. cdf0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. ce00: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ce20: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e tputs$channel n
ce30: 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  o\n..
ce40: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
ce50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
ce60: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
ce70: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
ce80: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan ce90: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs cea0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " ceb0: 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 ---- environment cec0: 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73 74 variable \"Syst ced0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 em.Data.SQLite\" cee0: 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 20 is not " \.. cef0: 20 20 20 20 20 20 20 20 20 22 73 65 74 2c 20 73 "set, s cf00: 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 6f kipping check fo cf10: 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 r releases...\n" cf20: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... cf30: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false cf40: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... cf50: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c proc checkForSQL cf60: 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 68 61 iteLibrary { cha cf70: 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 nnel } {.. cf80: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
cf90: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
cfa0: 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  r SQLite core li
cfb0: 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  brary... "....
cfc0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
cfd0: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
cfe0: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
cff0: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
d000: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
d010: 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
d020: 74 65 33 20 53 51 4c 69 74 65 56 65 72 73 69 6f  te3 SQLiteVersio
d030: 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69  n..      } versi
d040: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
d050: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
d060: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
d070: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e  ck if the return
d080: 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e  ed version was n
d090: 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b  ull.  If so, mak
d0a0: 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20  e it easy..
d0b0: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70     #       to sp
d0c0: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ot...        #..
d0d0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
d0e0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73  ing length $vers d0f0: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ion] == 0} then d100: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set d110: 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 version null.. d120: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... d130: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # d140: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t d150: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 o query the Foss d160: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 il source identi d170: 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c fier for the SQL d180: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ite.. # d190: 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 core librar d1a0: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 y... #.. d1b0: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc d1c0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o d1d0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl d1e0: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ d1f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. d200: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi d210: 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 te.SQLite3 SQLit d220: 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 eSourceId.. d230: 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 } sourceId]} d240: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. d250: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # d260: 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 NOTE: We failed d270: 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo d280: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden d290: 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 tifier... d2a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. d2b0: 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b set sourceId unk d2c0: 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d nown.. }. d2d0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. d2e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch d2f0: 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 eck if the retur d300: 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 ned Fossil sourc d310: 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 e identifier was d320: 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 null. If.. d330: 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 # so, d340: 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 make it easy to d350: 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 spot... # d360: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s d370: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f tring length$so
d380: 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68  urceId] == 0} th
d390: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
d3a0: 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c  set sourceId nul
d3b0: 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  l..        }....
d3c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
d3d0: 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20     # NOTE: Yes,
d3e0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
d3f0: 6c 69 62 72 61 72 79 20 61 70 70 65 61 72 73 20  library appears
d400: 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e  to be available.
d410: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
d420: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
d430: 6e 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 20  nt SQLite....
d440: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan d450: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs d460: 22 79 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e "yes ("$version
d470: 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22   " " $sourceId " d480: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 )\n"].. } e d490: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t d4a0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f puts$channel no
d4b0: 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  \n..      }..
d4c0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
d4d0: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e  checkForSQLiteIn
d4e0: 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c 20  terop { channel
d4f0: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73  } {..      tputs
d500: 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- d510: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c checking for SQL d520: 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 ite interop asse d530: 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 mbly... ".... d540: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. d550: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 . object d560: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N d570: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. d580: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D d590: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit d5a0: 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f e3 InteropVersio d5b0: 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69 n.. } versi d5c0: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b on] == 0} then { d5d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. d5e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che d5f0: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e ck if the return d600: 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e ed version was n d610: 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b ull. If so, mak d620: 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 e it easy.. d630: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 # to sp d640: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ot... #.. d650: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str d660: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 ing length$vers
d670: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ion] == 0} then
d680: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
d690: 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20   version null..
d6a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
d6b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
d6c0: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
d6d0: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73  o query the Foss
d6e0: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69  il source identi
d6f0: 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c  fier for the SQL
d700: 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ite..        #
d710: 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72       core librar
d720: 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
d730: 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
d740: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
d750: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
d760: 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
d770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
d780: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
d790: 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72  te.SQLite3 Inter
d7a0: 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20  opSourceId..
d7b0: 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d      } sourceId]}
d7c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
d7d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
d7e0: 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65  # NOTE: We faile
d7f0: 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46  d to query the F
d800: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65  ossil source ide
d810: 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20  ntifier...
d820: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
d830: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e   set sourceId un
d840: 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d  known..        }
d850: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
d860: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
d870: 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75  heck if the retu
d880: 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72  rned Fossil sour
d890: 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 77 61  ce identifier wa
d8a0: 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20  s null.  If..
d8b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c       #       so,
d8c0: 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f   make it easy to
d8d0: 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20   spot...
d8e0: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
d8f0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73  string length $s d900: 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 ourceId] == 0} t d910: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. d920: 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 set sourceId nu d930: 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ll.. }... d940: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. d950: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 65 66 6f # NOTE: Befo d960: 72 65 20 61 63 74 75 61 6c 6c 79 20 61 64 64 69 re actually addi d970: 6e 67 20 74 68 65 20 74 65 73 74 20 63 6f 6e 73 ng the test cons d980: 74 72 61 69 6e 74 2c 20 6d 61 6b 65 20 73 75 72 traint, make sur d990: 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 e the.. # d9a0: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 69 version i d9b0: 73 20 76 61 6c 69 64 20 28 69 2e 65 2e 20 6e 6f s valid (i.e. no d9c0: 74 20 6a 75 73 74 20 74 68 61 74 20 77 65 20 63 t just that we c d9d0: 6f 75 6c 64 20 71 75 65 72 79 20 69 74 29 2e 0d ould query it).. d9e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. d9f0: 20 20 20 20 69 66 20 7b 24 76 65 72 73 69 6f 6e if {$version
da00: 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e   ne "null"} then
da10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
da20: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
da30: 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69  E: Yes, the SQLi
da40: 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  te interop assem
da50: 62 6c 79 20 61 70 70 65 61 72 73 20 74 6f 20 62  bly appears to b
da60: 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20  e available...
da70: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
da80: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
da90: 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70  nt SQLiteInterop
daa0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  ....          se
dab0: 74 20 61 6e 73 77 65 72 20 79 65 73 0d 0a 20 20  t answer yes..
dac0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
dad0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 61 6e            set an
dae0: 73 77 65 72 20 6e 6f 0d 0a 20 20 20 20 20 20 20  swer no..
daf0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70   }....        tp
db00: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap db10: 70 65 6e 64 41 72 67 73 20 24 61 6e 73 77 65 72 pendArgs$answer
db20: 20 22 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22   " (" $version " db30: 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c "$sourceId ")\
db40: 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  n"]..      } els
db50: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
db60: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n db70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } db80: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 ..... proc ch db90: 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 eckForSQLiteDefi dba0: 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 68 61 neConstant { cha dbb0: 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 nnel name } {.. dbc0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
dbd0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
dbe0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d  \..          "--
dbf0: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for
dc00: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
dc10: 74 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61  te define consta
dc20: 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c 0d 0a  nt \"" $name \.. dc30: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e "\"... dc40: 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 "].... if dc50: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. dc60: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke dc70: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl dc80: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. dc90: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ dca0: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 Lite.SQLite3 Def dcb0: 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 ineConstants.. dcc0: 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 } defineCons dcd0: 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 tants] == 0} the dce0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if dcf0: 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 {[lsearch -exact dd00: 20 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 6e 65 -nocase$define
dd10: 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d 65 5d  Constants $name] dd20: 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a != -1} then {.. dd30: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. dd40: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 # NOTE: Y dd50: 65 73 2c 20 74 68 69 73 20 64 65 66 69 6e 65 20 es, this define dd60: 63 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 6e 61 constant was ena dd70: 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20 6d 61 bled when the ma dd80: 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 naged.. dd90: 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c # assembl dda0: 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d y was compiled.. ddb0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. ddc0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst ddd0: 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg dde0: 73 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 s defineConstant ddf0: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c .System.Data.SQL de00: 69 74 65 2e 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 ite.$name]....
de10: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $de20: 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 channel yes\n.. de30: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. de40: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs de50: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a$channel no\n..
de60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
de70: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
de80: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe de90: 6c 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 l error\n.. dea0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... deb0: 20 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 69 proc getDateTi dec0: 6d 65 46 6f 72 6d 61 74 20 7b 7d 20 7b 0d 0a 20 meFormat {} {.. ded0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # dee0: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce def0: 64 75 72 65 20 73 69 6d 70 6c 79 20 72 65 74 75 dure simply retu df00: 72 6e 73 20 74 68 65 20 22 64 65 66 61 75 6c 74 rns the "default df10: 22 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 " DateTime forma df20: 74 20 75 73 65 64 0d 0a 20 20 20 20 20 20 23 20 t used.. # df30: 20 20 20 20 20 20 62 79 20 74 68 65 20 74 65 73 by the tes df40: 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... df50: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in df60: 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 65 fo exists ::date df70: 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 26 26 20 time_format] && df80: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st df90: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 ring length$::d
dfa0: 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20  atetime_format]
dfb0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
dfc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
dfd0: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  # NOTE: Return t
dfe0: 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72  he manually over
dff0: 72 69 64 64 65 6e 20 76 61 6c 75 65 20 66 6f 72  ridden value for
e000: 20 74 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f   the DateTime fo
e010: 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  rmat...        #
e020: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
e030: 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72   $::datetime_for e040: 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 mat.. } els e050: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. e060: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: e070: 52 65 74 75 72 6e 20 61 6e 20 49 53 4f 38 36 30 Return an ISO860 e080: 31 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 1 DateTime forma e090: 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 t compatible wit e0a0: 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20 20 20 20 h SQLite,.. e0b0: 20 20 20 23 20 20 20 20 20 20 20 53 79 73 74 65 # Syste e0c0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2c 20 61 m.Data.SQLite, a e0d0: 6e 64 20 73 75 69 74 61 62 6c 65 20 66 6f 72 20 nd suitable for e0e0: 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e 67 20 77 round-tripping w e0f0: 69 74 68 20 74 68 65 0d 0a 20 20 20 20 20 20 20 ith the.. e100: 20 23 20 20 20 20 20 20 20 44 61 74 65 54 69 6d # DateTim e110: 65 20 63 6c 61 73 73 20 6f 66 20 74 68 65 20 66 e class of the f e120: 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66 20 74 68 ramework. If th e130: 69 73 20 76 61 6c 75 65 20 69 73 20 63 68 61 6e is value is chan e140: 67 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 ged,.. # e150: 20 20 20 20 20 20 76 61 72 69 6f 75 73 20 74 65 various te e160: 73 74 73 20 6d 61 79 20 66 61 69 6c 2e 0d 0a 20 sts may fail... e170: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. e180: 20 20 72 65 74 75 72 6e 20 22 79 79 79 79 2d 4d return "yyyy-M e190: 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 M-dd HH:mm:ss.FF e1a0: 46 46 46 46 46 4b 22 0d 0a 20 20 20 20 20 20 7d FFFFFK".. } e1b0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... e1c0: 70 72 6f 63 20 65 6e 75 6d 65 72 61 62 6c 65 54 proc enumerableT e1d0: 6f 4c 69 73 74 20 7b 20 65 6e 75 6d 65 72 61 62 oList { enumerab e1e0: 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 le } {.. se e1f0: 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d t result [list]. e200: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st e210: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 6e 75 ring length$enu
e220: 6d 65 72 61 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c  merable] == 0 ||
e230: 20 24 65 6e 75 6d 65 72 61 62 6c 65 20 65 71 20   $enumerable eq e240: 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a "null"} then {.. e250: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
e260: 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d  result..      }.
e270: 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20  ...      object
e280: 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 69  foreach -alias i
e290: 74 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c 65 20  tem $enumerable e2a0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ e2b0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 69 string length$i
e2c0: 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  tem] > 0} then {
e2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70  ..          lapp
e2e0: 65 6e 64 20 72 65 73 75 6c 74 20 5b 24 69 74 65  end result [$ite e2f0: 6d 20 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20 m ToString].. e300: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. e310: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return e320: 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a$result..    }..
e330: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63  ...    proc catc
e340: 68 41 6e 64 52 65 74 75 72 6e 20 7b 20 73 63 72  hAndReturn { scr
e350: 69 70 74 20 7b 73 74 61 63 6b 54 72 61 63 65 20  ipt {stackTrace
e360: 66 61 6c 73 65 7d 20 7b 73 74 72 69 63 74 20 74  false} {strict t
e370: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
e380: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
e390: 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 73 63   Evaluate the sc
e3a0: 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79  ript provided by
e3b0: 20 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 74   our caller in t
e3c0: 68 65 69 72 20 63 6f 6e 74 65 78 74 2c 0d 0a 20  heir context,..
e3d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 70       #       cap
e3e0: 74 75 72 69 6e 67 20 62 6f 74 68 20 74 68 65 20  turing both the
e3f0: 72 65 73 75 6c 74 20 61 6e 64 20 74 68 65 20 72  result and the r
e400: 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...
e410: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
e420: 63 6f 64 65 20 5b 63 61 74 63 68 20 7b 75 70 6c  code [catch {upl
e430: 65 76 65 6c 20 31 20 24 73 63 72 69 70 74 7d 20  evel 1 $script} e440: 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 result].... e450: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE e460: 3a 20 44 69 64 20 74 68 65 20 73 63 72 69 70 74 : Did the script e470: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 provided by our e480: 20 63 61 6c 6c 65 72 20 4e 4f 54 20 72 61 69 73 caller NOT rais e490: 65 20 61 6e 20 65 72 72 6f 72 3f 0d 0a 20 20 20 e an error?.. e4a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { e4b0: 24 73 74 72 69 63 74 20 26 26 20 24 63 6f 64 65$strict && $code e4c0: 20 3d 3d 20 30 20 7c 7c 20 21 24 73 74 72 69 63 == 0 || !$stric
e4d0: 74 20 26 26 20 24 63 6f 64 65 20 21 3d 20 31 7d  t && $code != 1} e4e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. e4f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO e500: 54 45 3a 20 53 75 63 63 65 73 73 2e 20 20 52 65 TE: Success. Re e510: 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 turn a list with e520: 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 the return code e530: 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 2e and the result. e540: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. e550: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis e560: 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d t$code $result] e570: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif e580: 20 7b 24 73 74 61 63 6b 54 72 61 63 65 7d 20 74 {$stackTrace} t
e590: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
e5a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
e5b0: 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20  : Failure.  Our
e5c0: 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 61 20 66  caller wants a f
e5d0: 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20  ull stack trace
e5e0: 28 69 66 20 61 70 70 6c 69 63 61 62 6c 65 29 2c  (if applicable),
e5f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
e600: 20 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20    return a list
e610: 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20  with the return
e620: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73  code and the res
e630: 75 6c 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20  ult verbatim...
e640: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
e650: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24    return [list $e660: 63 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 code$result]..
e670: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
e680: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
e690: 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72    # NOTE: Failur
e6a0: 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 64  e.  Our caller d
e6b0: 6f 65 73 20 6e 6f 74 20 77 61 6e 74 20 61 20 66  oes not want a f
e6c0: 75 6c 6c 20 73 74 61 63 6b 20 74 72 61 63 65 20  ull stack trace
e6d0: 28 69 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20  (if..        #
e6e0: 20 20 20 20 20 61 70 70 6c 69 63 61 62 6c 65 29       applicable)
e6f0: 2c 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20  , return a list
e700: 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20  with the return
e710: 63 6f 64 65 2c 20 74 68 65 20 65 72 72 6f 72 0d  code, the error.
e720: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
e730: 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20 69 6e   code for the in
e740: 74 65 72 70 72 65 74 65 72 2c 20 61 6e 64 20 74  terpreter, and t
e750: 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  he error message
e760: 20 75 70 20 74 6f 20 74 68 65 0d 0a 20 20 20 20   up to the..
e770: 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 69 6e      #       poin
e780: 74 20 77 68 65 72 65 20 74 68 65 20 73 74 61 63  t where the stac
e790: 6b 20 74 72 61 63 65 20 73 68 6f 75 6c 64 20 73  k trace should s
e7a0: 74 61 72 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  tart...        #
e7b0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 69 6e  ..        set in
e7c0: 64 65 78 20 5b 73 74 72 69 6e 67 20 66 69 72 73  dex [string firs
e7d0: 74 20 22 20 20 20 61 74 20 22 20 24 72 65 73 75  t "   at " $resu e7e0: 6c 74 5d 3b 20 23 20 48 41 43 4b 3a 20 52 65 6c lt]; # HACK: Rel e7f0: 69 61 62 6c 65 3f 0d 0a 0d 0a 20 20 20 20 20 20 iable?.... e800: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 return [list$
e810: 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f 64  code $::errorCod e820: 65 20 5b 65 78 70 72 20 7b 24 69 6e 64 65 78 20 e [expr {$index
e830: 21 3d 20 2d 31 20 3f 20 5c 0d 0a 20 20 20 20 20  != -1 ? \..
e840: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 74         [string t
e850: 72 69 6d 20 5b 73 74 72 69 6e 67 20 72 61 6e 67  rim [string rang
e860: 65 20 24 72 65 73 75 6c 74 20 30 20 24 69 6e 64  e $result 0$ind
e870: 65 78 5d 5d 20 3a 20 24 72 65 73 75 6c 74 7d 5d  ex]] : $result}] e880: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. e890: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c e8a0: 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74 68 ompileCSharpWith e8b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. e8c0: 74 65 78 74 20 6d 65 6d 6f 72 79 20 73 79 6d 62 text memory symb e8d0: 6f 6c 73 20 73 74 72 69 63 74 20 72 65 73 75 6c ols strict resul e8e0: 74 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 tsVarName errors e8f0: 56 61 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 VarName fileName e900: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 s.. a e910: 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 rgs } {.. # e920: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: e930: 53 69 6e 63 65 20 77 65 20 61 72 65 20 67 6f 69 Since we are goi e940: 6e 67 20 74 6f 20 75 73 65 20 74 68 69 73 20 6d ng to use this m e950: 65 74 68 6f 64 20 6e 61 6d 65 20 61 20 6c 6f 74 ethod name a lot e960: 2c 20 61 73 73 69 67 6e 20 69 74 20 74 6f 20 61 , assign it to a e970: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # e980: 76 61 72 69 61 62 6c 65 20 66 69 72 73 74 2e 0d variable first.. e990: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. e9a0: 73 65 74 20 61 64 64 20 52 65 66 65 72 65 6e 63 set add Referenc e9b0: 65 64 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 edAssemblies.Add e9c0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. e9d0: 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 # NOTE: Creat e9e0: 65 20 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 e the base comma e9f0: 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 nd to evaluate a ea00: 6e 64 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 nd add the prope ea10: 72 74 79 20 73 65 74 74 69 6e 67 73 0d 0a 20 20 rty settings.. ea20: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 # that ea30: 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 are almost alwa ea40: 79 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72 ys needed by our ea50: 20 75 6e 69 74 20 74 65 73 74 73 20 28 69 2e 65 unit tests (i.e ea60: 2e 20 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 20 . the System.. ea70: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and ea80: 53 79 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 System.Data asse ea90: 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 mbly references) eaa0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. eab0: 20 20 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c set command [l eac0: 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. ead0: 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24 compileCSharp$
eae0: 74 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79  text $memory$sy
eaf0: 6d 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65  mbols $strict re eb00: 73 75 6c 74 73 20 65 72 72 6f 72 73 20 5c 0d 0a sults errors \.. eb10: 20 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53$add S
eb20: 79 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20 53  ystem.dll $add S eb30: 79 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20 24 ystem.Data.dll$
eb40: 61 64 64 20 53 79 73 74 65 6d 2e 54 72 61 6e 73  add System.Trans
eb50: 61 63 74 69 6f 6e 73 2e 64 6c 6c 20 5c 0d 0a 20  actions.dll \..
eb60: 20 20 20 20 20 20 20 20 20 24 61 64 64 20 53 79           $add Sy eb70: 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d stem.Xml.dll]... eb80: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. eb90: 23 20 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 # NOTE: Add all eba0: 74 68 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c the provided fil ebb0: 65 20 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d e names as assem ebc0: 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d bly references.. ebd0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. ebe0: 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName ebf0: 20 24 66 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20$fileNames {..
ec00: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63         lappend c
ec10: 6f 6d 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74  ommand $add [get ec20: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
ec30: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
ec40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
ec50: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64       # NOTE: Add
ec60: 20 74 68 65 20 65 78 74 72 61 20 61 72 67 75 6d   the extra argum
ec70: 65 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f  ents, if any, to
ec80: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20   the command to
ec90: 65 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20  evaluate...
eca0: 20 23 0d 0a 20 20 20 20 20 20 65 76 61 6c 20 6c   #..      eval l
ecb0: 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24  append command $ecc0: 61 72 67 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d args.... #. ecd0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A ece0: 6c 69 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 lias the compile ecf0: 72 20 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 r local results ed00: 61 6e 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 and errors varia ed10: 62 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 bles to the.. ed20: 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 # varia ed30: 62 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76 69 64 ble names provid ed40: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller ed50: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. ed60: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le ed70: 6e 67 74 68 20 24 72 65 73 75 6c 74 73 56 61 72 ngth$resultsVar
ed80: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
ed90: 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72  {..        upvar
eda0: 20 31 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61   1 $resultsVarNa edb0: 6d 65 20 72 65 73 75 6c 74 73 0d 0a 20 20 20 20 me results.. edc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if edd0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length ede0: 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 5d 20$errorsVarName]
edf0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
ee00: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 65 72       upvar 1 $er ee10: 72 6f 72 73 56 61 72 4e 61 6d 65 20 65 72 72 6f rorsVarName erro ee20: 72 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 rs.. }.... ee30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # ee40: 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 NOTE: Evaluate t ee50: 68 65 20 63 6f 6e 73 74 72 75 63 74 65 64 20 5b he constructed [ ee60: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 5d 20 63 compileCSharp] c ee70: 6f 6d 6d 61 6e 64 20 61 6e 64 20 72 65 74 75 72 ommand and retur ee80: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 n the.. # ee90: 20 20 20 20 20 72 65 73 75 6c 74 2e 0d 0a 20 20 result... eea0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 65 76 61 #.. eva eeb0: 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 l$command..
eec0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69  }.....    proc i
eed0: 73 4d 65 6d 6f 72 79 44 62 20 7b 20 66 69 6c 65  sMemoryDb { file
eee0: 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  Name } {..
eef0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
ef00: 20 49 73 20 74 68 65 20 73 70 65 63 69 66 69 65   Is the specifie
ef10: 64 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  d database file
ef20: 6e 61 6d 65 20 72 65 61 6c 6c 79 20 61 6e 20 69  name really an i
ef30: 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
ef40: 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e?..      #..
ef50: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20     return [expr
ef60: 7b 24 66 69 6c 65 4e 61 6d 65 20 65 71 20 22 3a  {$fileName eq ": ef70: 6d 65 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 memory:" || \.. ef80: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string ef90: 20 72 61 6e 67 65 20 24 66 69 6c 65 4e 61 6d 65 range$fileName
efa0: 20 30 20 31 32 5d 20 65 71 20 22 66 69 6c 65 3a   0 12] eq "file:
efb0: 3a 6d 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20  :memory:"}]..
efc0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
efd0: 69 73 54 61 62 6c 65 49 6e 44 62 20 7b 20 6e 61  isTableInDb { na
efe0: 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20  me {varName db}
eff0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
f000: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
f010: 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
f020: 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
f030: 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
f040: 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
f050: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
f060: 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e  ler.  It contain
f070: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  s the database c
f080: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
f090: 20 74 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20   that will be..
f0a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65       #       use
f0b0: 64 20 74 6f 20 65 78 65 63 75 74 65 20 74 68 65  d to execute the
f0c0: 20 71 75 65 72 79 20 75 73 65 64 20 74 6f 20 64   query used to d
f0d0: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the
f0e0: 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a  named table is..
f0f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
f100: 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20 64 61  esent in that da
f110: 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23  tabase...      #
f120: 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
f130: 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20  $varName db.... f140: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # f150: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 71 NOTE: Use the sq f160: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c lite_master tabl f170: 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 e to determine i f180: 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c f the named tabl f190: 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 e is.. # f1a0: 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e 20 74 present in t f1b0: 68 65 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 he database... f1c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set f1d0: 20 73 71 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 sql {.. f1e0: 53 45 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 SELECT COUNT(*) f1f0: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 FROM sqlite_mast f200: 65 72 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 er WHERE type = f210: 27 74 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 'table' AND name f220: 20 3d 20 3f 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a = ?;.. }.. f230: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. f240: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 # NOTE: Return f250: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 non-zero if the f260: 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 20 70 named table is p f270: 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23 resent... # f280: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b .. return [ f290: 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 expr {.. f2a0: 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 [sql execute -ex f2b0: 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 ecute scalar$db
f2c0: 20 24 73 71 6c 20 5b 6c 69 73 74 20 70 61 72 61   $sql [list para f2d0: 6d 31 20 53 74 72 69 6e 67 20 24 6e 61 6d 65 5d m1 String$name]
f2e0: 5d 20 3e 20 30 0d 0a 20 20 20 20 20 20 7d 5d 0d  ] > 0..      }].
f2f0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
f300: 72 6f 63 20 74 72 69 6d 53 71 6c 20 7b 20 73 71  roc trimSql { sq
f310: 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74  l } {..      ret
f320: 75 72 6e 20 5b 72 65 67 73 75 62 20 2d 61 6c 6c  urn [regsub -all
f330: 20 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e   -- {\s+} [strin
f340: 67 20 74 72 69 6d 20 24 73 71 6c 5d 20 22 20 22  g trim $sql] " " f350: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... f360: 20 70 72 6f 63 20 65 78 65 63 75 74 65 53 71 6c proc executeSql f370: 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 74 65 20 { sql {execute f380: 6e 6f 6e 65 7d 20 7b 66 6f 72 6d 61 74 20 6e 6f none} {format no f390: 6e 65 7d 20 7b 66 69 6c 65 4e 61 6d 65 20 22 22 ne} {fileName "" f3a0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 } } {.. if f3b0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length f3c0: 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 7d$fileName] == 0}
f3d0: 20 74 68 65 6e 20 7b 73 65 74 20 66 69 6c 65 4e   then {set fileN
f3e0: 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a 20  ame :memory:}..
f3f0: 20 20 20 20 20 73 65 74 75 70 44 62 20 24 66 69       setupDb $fi f400: 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20 leName "" "" "" f410: 22 22 20 22 22 20 66 61 6c 73 65 20 66 61 6c 73 "" "" false fals f420: 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20 64 62 e false false db f430: 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 74 true.... t f440: 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 ry {.. re f450: 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20 turn [uplevel 1 f460: 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 [list \.. f470: 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 sql execute f480: 20 2d 65 78 65 63 75 74 65 20 24 65 78 65 63 75 -execute$execu
f490: 74 65 20 2d 66 6f 72 6d 61 74 20 24 66 6f 72 6d  te -format $form f4a0: 61 74 20 24 64 62 20 24 73 71 6c 5d 5d 0d 0a 20 at$db $sql]].. f4b0: 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b } finally { f4c0: 0d 0a 20 20 20 20 20 20 20 20 63 6c 65 61 6e 75 .. cleanu f4d0: 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 pDb$fileName db
f4e0: 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c   false false fal
f4f0: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  se..      }..
f500: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
f510: 68 61 73 4e 6f 46 6c 61 67 73 20 7b 20 76 61 72  hasNoFlags { var
f520: 4e 61 6d 65 20 6e 6f 6e 65 20 7d 20 7b 0d 0a 20  Name none } {..
f530: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va f540: 72 4e 61 6d 65 20 66 6c 61 67 73 0d 0a 0d 0a 20 rName flags.... f550: 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info f560: 65 78 69 73 74 73 20 66 6c 61 67 73 5d 7d 20 74 exists flags]} t f570: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r f580: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. f590: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if f5a0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length f5b0: 24 66 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68$flags] == 0} th
f5c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
f5d0: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
f5e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
f5f0: 24 6e 6f 6e 65 20 26 26 20 24 66 6c 61 67 73 20  $none &&$flags
f600: 65 71 20 22 4e 6f 6e 65 22 7d 20 74 68 65 6e 20  eq "None"} then
f610: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
f620: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d  n true..      }.
f630: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
f640: 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  false..    }....
f650: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6e  .    proc getCon
f660: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 7b 20 66  nectionFlags { f
f670: 69 6c 65 4e 61 6d 65 20 66 6c 61 67 73 20 7b 71  ileName flags {q
f680: 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
f690: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
f6a0: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  # NOTE: Figure o
f6b0: 75 74 20 77 68 69 63 68 20 64 61 74 61 62 61 73  ut which databas
f6c0: 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 20 63  e file name or c
f6d0: 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
f6e0: 20 74 68 65 73 65 0d 0a 20 20 20 20 20 20 23 20   these..      #
f6f0: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
f700: 20 66 6c 61 67 73 20 77 69 6c 6c 20 61 63 74 75   flags will actu
f710: 61 6c 6c 79 20 61 70 70 6c 79 20 74 6f 2e 20 20  ally apply to.
f720: 54 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 63 65  This is not nece
f730: 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20  ssary..      #
f740: 20 20 20 20 20 69 6e 20 71 75 69 65 74 20 6d 6f       in quiet mo
f750: 64 65 20 62 65 63 61 75 73 65 20 74 68 69 73 20  de because this
f760: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6f  information is o
f770: 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 6f 67  nly used for log
f780: 67 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20  ging..      #
f790: 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 69 6e      and reportin
f7a0: 67 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20 20  g purposes...
f7b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
f7c0: 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. f7d0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st f7e0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c ring length$fil
f7f0: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e  eName] > 0} then
f800: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
f810: 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 65  t database [appe
f820: 6e 64 41 72 67 73 20 22 66 69 6c 65 20 6e 61 6d  ndArgs "file nam
f830: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName f840: 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 \"].. } e f850: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 lseif {[info exi f860: 73 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 sts ::dataSource f870: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. f880: 20 20 20 20 21 5b 61 72 72 61 79 20 65 78 69 73 ![array exis f890: 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d ts ::dataSource] f8a0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. f8b0: 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73 65 set database f8c0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 64 61 [appendArgs "da f8d0: 74 61 20 73 6f 75 72 63 65 20 5c 22 22 20 24 3a ta source \""$:
f8e0: 3a 64 61 74 61 53 6f 75 72 63 65 20 5c 22 5d 0d  :dataSource \"].
f8f0: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
f900: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
f910: 20 64 61 74 61 62 61 73 65 20 3c 75 6e 6b 6e 6f   database <unkno
f920: 77 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  wn>..        }..
f930: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
f940: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
f950: 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29  : Show (and log)
f960: 20 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65   the local conne
f970: 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20  ction flags and
f980: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  the associated..
f990: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61        #       da
f9a0: 74 61 20 73 6f 75 72 63 65 20 6f 72 20 66 69 6c  ta source or fil
f9b0: 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23  e name...      #
f9c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu f9d0: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. f9e0: 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info f9f0: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 exists ::no(emit fa00: 4c 6f 63 61 6c 46 6c 61 67 73 29 5d 20 26 26 20 LocalFlags)] && fa10: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 \.. ( fa20: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: fa30: 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 67 no(emitLocalFlag fa40: 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a sIfNone)] || \.. fa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 ![h fa60: 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 asNoFlags flags fa70: 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d false])} then {. fa80: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs fa90: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
faa0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
fab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
fac0: 2d 2d 2d 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63  --- local connec
fad0: 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22  tion flags for "
fae0: 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20   $database \.. faf0: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72 " ar fb00: 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 e: " [expr {![ha fb10: 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20 66 sNoFlags flags f fb20: 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 alse] ? \.. fb30: 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 [append fb40: 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20 5c Args \"$flags \
fb50: 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20  "] : "<none>"}]
fb60: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
fb70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
fb80: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
fb90: 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29  : Show (and log)
fba0: 20 74 68 65 20 73 68 61 72 65 64 20 63 6f 6e 6e   the shared conn
fbb0: 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20  ection flags...
fbc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
fbd0: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then fbe0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ fbf0: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. fc00: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke fc10: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL fc20: 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ite.SQLiteConnec fc30: 74 69 6f 6e 20 53 68 61 72 65 64 46 6c 61 67 73 tion SharedFlags fc40: 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 68 61 72 .. } shar fc50: 65 64 46 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 edFlags] == 0} t fc60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. fc70: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis fc80: 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72 ts ::no(emitShar fc90: 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a edFlags)] && \.. fca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 21 (! fcb0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n fcc0: 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 o(emitSharedFlag fcd0: 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a sIfNone)] || \.. fce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 ! fcf0: 5b 68 61 73 4e 6f 46 6c 61 67 73 20 73 68 61 72 [hasNoFlags shar fd00: 65 64 46 6c 61 67 73 20 74 72 75 65 5d 29 7d 20 edFlags true])} fd10: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. fd20: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
fd30: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
fd40: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
fd50: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
fd60: 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  hared connection
fd70: 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61   flags for " $da fd80: 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 tabase \.. fd90: 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65 3a " are: fda0: 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e " [expr {![hasN fdb0: 6f 46 6c 61 67 73 20 73 68 61 72 65 64 46 6c 61 oFlags sharedFla fdc0: 67 73 20 74 72 75 65 5d 20 3f 20 5c 0d 0a 20 20 gs true] ? \.. fdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 [a fde0: 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 73 68 ppendArgs \"$sh
fdf0: 61 72 65 64 46 6c 61 67 73 20 5c 22 5d 20 3a 20  aredFlags \"] :
fe00: 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a  "<none>"}] \n]..
fe10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
fe20: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
fe30: 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
fe40: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
fe50: 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 29  emitSharedFlags)
fe60: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
fe70: 20 20 20 20 20 20 21 5b 69 6e 66 6f 20 65 78 69        ![info exi
fe80: 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61  sts ::no(emitSha
fe90: 72 65 64 46 6c 61 67 73 49 66 55 6e 61 76 61 69  redFlagsIfUnavai
fea0: 6c 61 62 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  lable)]} then {.
feb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
fec0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann fed0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ fee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. fef0: 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 "---- shared c ff00: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 onnection flags ff10: 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65 20 for "$database
ff20: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
ff30: 20 20 20 22 20 61 72 65 3a 20 3c 75 6e 61 76 61     " are: <unava
ff40: 69 6c 61 62 6c 65 3e 5c 6e 22 5d 0d 0a 20 20 20  ilable>\n"]..
ff50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
ff60: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
ff70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
ff80: 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64   NOTE: Show (and
ff90: 20 6c 6f 67 29 20 74 68 65 20 64 65 74 65 63 74   log) the detect
ffa0: 65 64 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63  ed global connec
ffb0: 74 69 6f 6e 20 66 6c 61 67 73 2c 20 69 66 20 61  tion flags, if a
ffc0: 6e 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ny...      #..
ffd0: 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} ffe0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. fff0: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 10000 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 ts ::no(emitGlob 10010 61 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a alFlags)] && \.. 10020 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 (![i 10030 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 10040 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73 49 emitGlobalFlagsI 10050 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 fNone)] || \.. 10060 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 ![has 10070 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65 63 NoFlags ::connec 10080 74 69 6f 6e 5f 66 6c 61 67 73 20 66 61 6c 73 65 tion_flags false 10090 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ])} then {.. 100a0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
100b0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
100c0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
100d0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 67           "---- g
100e0 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e  lobal connection
100f0 20 66 6c 61 67 73 20 61 72 65 3a 20 22 20 5c 0d   flags are: " \.
10100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
10110 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61  expr {![hasNoFla
10120 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f  gs ::connection_
10130 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 5c  flags false] ? \
10140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
10150 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24  [appendArgs \" $10160 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 ::connection_fla 10170 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e gs \"] : "<none> 10180 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 "}] \n].. 10190 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 101a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 101b0 4e 4f 54 45 3a 20 49 66 20 74 68 65 72 65 20 61 NOTE: If there a 101c0 72 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28 70 re any global (p 101d0 65 72 20 74 65 73 74 20 72 75 6e 29 20 63 6f 6e er test run) con 101e0 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 75 nection flags cu 101f0 72 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20 23 rrently.. # 10200 20 20 20 20 20 20 20 73 65 74 2c 20 75 73 65 20 set, use 10210 74 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20 62 them now (i.e. b 10220 79 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65 6d y combining them 10230 20 77 69 74 68 20 74 68 65 20 6f 6e 65 73 20 66 with the ones f 10240 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 or this.. # 10250 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f connectio 10260 6e 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 n)... #.. 10270 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 10280 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f ists ::connectio 10290 6e 5f 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b n_flags]} then { 102a0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 102b0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6d # NOTE: Com 102c0 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65 70 6c bine and/or repl 102d0 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 ace the connecti 102e0 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68 65 on flags and the 102f0 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 20 20 20 n show the.. 10300 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 20 # new 10310 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 value... 10320 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 #.. set f 10330 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 lags [combineFla 10340 67 73 20 24 66 6c 61 67 73 20 24 3a 3a 63 6f 6e gs$flags $::con 10350 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d 0a nection_flags].. 10360 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10370 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho 10380 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 w (and log) the 10390 6e 65 77 20 65 66 66 65 63 74 69 76 65 20 63 6f new effective co 103a0 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d nnection flags.. 103b0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 103c0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
103d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
103e0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
103f0 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f  ists ::no(emitCo
10400 6d 62 69 6e 65 64 46 6c 61 67 73 29 5d 20 26 26  mbinedFlags)] &&
10410 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10420 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73    (![info exists
10430 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e   ::no(emitCombin
10440 65 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20  edFlagsIfNone)]
10450 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  || \..
10460 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67       ![hasNoFlag
10470 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d  s flags false])}
10480 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
10490 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 104a0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 104b0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 104c0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 104d0 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63 74 combined connect 104e0 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 ion flags for " 104f0 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20$database \..
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61               " a
10510 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68  re: " [expr {![h
10520 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20  asNoFlags flags
10530 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20  false] ? \..
10540 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70              [app
10550 65 6e 64 41 72 67 73 20 5c 22 20 24 66 6c 61 67  endArgs \" $flag 10560 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 s \"] : "<none>" 10570 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 }] \n].. 10580 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 10590 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 105a0 20 72 65 74 75 72 6e 20 24 66 6c 61 67 73 0d 0a return$flags..
105b0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
105c0 6f 63 20 67 65 74 46 6c 61 67 73 50 72 6f 70 65  oc getFlagsPrope
105d0 72 74 79 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d  rty { {flags ""}
105e0 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d   {quiet false} }
105f0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
10600 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72     # NOTE: Deter
10610 6d 69 6e 65 20 77 68 61 74 20 74 68 65 20 63 6f  mine what the co
10620 6d 62 69 6e 65 64 20 28 67 6c 6f 62 61 6c 20 61  mbined (global a
10630 6e 64 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 63  nd local) connec
10640 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
10650 20 20 20 20 66 6c 61 67 73 20 73 68 6f 75 6c 64      flags should
10660 20 62 65 2c 20 70 6f 73 73 69 62 6c 79 20 71 75   be, possibly qu
10670 69 65 74 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d  ietly...      #.
10680 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73  .      set flags
10690 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46   [getConnectionF
106a0 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 20 24  lags "" $flags$
106b0 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20  quiet]....
106c0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
106d0 20 49 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f 72   If no global or
106e0 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f   local connectio
106f0 6e 20 66 6c 61 67 73 20 77 65 72 65 20 73 70 65  n flags were spe
10700 63 69 66 69 65 64 2c 20 74 68 65 0d 0a 20 20 20  cified, the..
10710 20 20 20 23 20 20 20 20 20 20 20 64 65 66 61 75     #       defau
10720 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  lt connection fl
10730 61 67 73 20 73 68 6f 75 6c 64 20 62 65 20 75 73  ags should be us
10740 65 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 72  ed; therefore, r
10750 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 23 20 20  eturn..      #
10760 20 20 20 20 20 61 6e 20 65 6d 70 74 79 20 73 74       an empty st
10770 72 69 6e 67 20 69 6e 20 74 68 61 74 20 63 61 73  ring in that cas
10780 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
10790 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
107a0 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3d 3d  ength $flags] == 107b0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 107c0 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 return "".. 107d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 107e0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 107f0 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 63 68 65 In order to che 10800 63 6b 20 69 66 20 74 68 65 20 64 65 66 61 75 6c ck if the defaul 10810 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 t connection fla 10820 67 73 20 61 72 65 20 62 65 69 6e 67 20 75 73 65 gs are being use 10830 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 10840 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79 it is necessary 10850 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20 63 6f to attempt a co 10860 6e 76 65 72 73 69 6f 6e 20 74 6f 20 74 68 65 20 nversion to the 10870 61 63 74 75 61 6c 20 65 6e 75 6d 65 72 61 74 65 actual enumerate 10880 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 10890 20 74 79 70 65 2e 20 20 46 61 69 6c 69 6e 67 20 type. Failing 108a0 74 68 61 74 2c 20 74 68 65 20 63 68 65 63 6b 20 that, the check 108b0 61 67 61 69 6e 73 74 20 74 68 65 20 64 65 66 61 against the defa 108c0 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 ult value will b 108d0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 108e0 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 skipped... 108f0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 #.. if {[c 10900 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 10910 73 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b 20 set error null; 10920 23 20 49 47 4e 4f 52 45 44 0d 0a 0d 0a 20 20 20 # IGNORED.... 10930 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 10940 6b 65 20 55 74 69 6c 69 74 79 20 54 72 79 50 61 ke Utility TryPa 10950 72 73 65 46 6c 61 67 73 45 6e 75 6d 20 22 22 20 rseFlagsEnum "" 10960 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 \.. S 10970 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 10980 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 e.SQLiteConnecti 10990 6f 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 onFlags ""$flag
109a0 73 20 6e 75 6c 6c 20 74 72 75 65 20 5c 0d 0a 20  s null true \..
109b0 20 20 20 20 20 20 20 20 20 20 20 74 72 75 65 20             true
109c0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 7d 20 76  error..      } v
109d0 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  alue]} then {..
109e0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
109f0 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
10a00 74 69 6e 67 20 74 6f 20 70 61 72 73 65 20 74 68  ting to parse th
10a10 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  e connection fla
10a20 67 73 20 63 61 75 73 65 64 20 61 20 73 63 72 69  gs caused a scri
10a30 70 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  pt..        #
10a40 20 20 20 20 65 72 72 6f 72 2e 20 20 45 6d 69 74      error.  Emit
10a50 20 61 20 77 61 72 6e 69 6e 67 20 74 6f 20 74 68   a warning to th
10a60 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 20  e test log file
10a70 61 6e 64 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20  and continue..
10a80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73        #       us
10a90 69 6e 67 20 61 6e 20 65 6d 74 70 79 20 73 74 72  ing an emtpy str
10aa0 69 6e 67 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20  ing instead...
10ab0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10ac0 20 74 6c 6f 67 20 5b 61 70 70 65 6e 64 41 72 67   tlog [appendArg
10ad0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
10ae0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
10af0 66 61 69 6c 65 64 20 74 6f 20 70 61 72 73 65 20  failed to parse
10b00 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
10b10 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20  , error: " \..
10b20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24            \n\t $10b30 76 61 6c 75 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 value \n].... 10b40 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 22 set value " 10b50 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ".. }.... 10b60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 10b70 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 62 OTE: If the comb 10b80 69 6e 65 64 20 66 6c 61 67 73 20 73 74 72 69 6e ined flags strin 10b90 67 20 63 6f 75 6c 64 20 6e 6f 74 20 61 63 74 75 g could not actu 10ba0 61 6c 6c 79 20 62 65 20 63 6f 6e 76 65 72 74 65 ally be converte 10bb0 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 10bc0 20 74 6f 20 74 68 65 20 65 6e 75 6d 65 72 61 74 to the enumerat 10bd0 65 64 20 74 79 70 65 20 69 74 20 69 73 20 74 68 ed type it is th 10be0 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c e default value, 10bf0 20 74 68 65 6e 20 6a 75 73 74 20 75 73 65 0d 0a then just use.. 10c00 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 # it 10c10 20 76 65 72 62 61 74 69 6d 3b 20 6f 74 68 65 72 verbatim; other 10c20 77 69 73 65 2c 20 6a 75 73 74 20 72 65 74 75 72 wise, just retur 10c30 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e n an empty strin 10c40 67 2e 20 20 49 6e 20 74 68 61 74 0d 0a 20 20 20 g. In that.. 10c50 20 20 20 23 20 20 20 20 20 20 20 63 61 73 65 2c # case, 10c60 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e the default con 10c70 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 nection flags wi 10c80 6c 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 ll be used... 10c90 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 10ca0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
10cb0 76 61 6c 75 65 5d 20 3d 3d 20 30 20 7c 7c 20 24  value] == 0 || $10cc0 76 61 6c 75 65 20 6e 65 20 22 44 65 66 61 75 6c value ne "Defaul 10cd0 74 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 t"} then {.. 10ce0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 10cf0 20 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 72 WARNING: This r 10d00 65 74 75 72 6e 73 20 74 68 65 20 73 74 72 69 6e eturns the strin 10d10 67 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 g value of the c 10d20 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73 2c 20 6e ombined flags, n 10d30 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ot.. # 10d40 20 20 20 20 20 20 20 74 68 65 20 65 6e 75 6d 65 the enume 10d50 72 61 74 65 64 20 76 61 6c 75 65 2e 20 20 54 68 rated value. Th 10d60 69 73 20 69 73 20 62 79 20 64 65 73 69 67 6e 20 is is by design 10d70 61 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a and should not.. 10d80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 10d90 20 20 20 62 65 20 63 68 61 6e 67 65 64 20 77 69 be changed wi 10da0 74 68 6f 75 74 20 63 61 72 65 66 75 6c 20 63 6f thout careful co 10db0 6e 73 69 64 65 72 61 74 69 6f 6e 20 28 65 2e 67 nsideration (e.g 10dc0 2e 20 69 74 20 77 6f 75 6c 64 0d 0a 20 20 20 20 . it would.. 10dd0 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 70 # p 10de0 72 65 76 65 6e 74 20 74 68 65 20 53 51 4c 69 74 revent the SQLit 10df0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6c 61 73 eConnection clas 10e00 73 20 66 72 6f 6d 20 61 6c 6c 6f 77 69 6e 67 20 s from allowing 10e10 69 6e 76 61 6c 69 64 0d 0a 20 20 20 20 20 20 20 invalid.. 10e20 20 23 20 20 20 20 20 20 20 20 20 20 5b 22 6d 61 # ["ma 10e30 67 69 63 61 6c 22 5d 20 6d 65 74 61 2d 66 6c 61 gical"] meta-fla 10e40 67 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d gs)... #. 10e50 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 10e60 5b 61 70 70 65 6e 64 41 72 67 73 20 22 46 6c 61 [appendArgs "Fla 10e70 67 73 3d 22 20 24 66 6c 61 67 73 20 5c 3b 5d 0d gs="$flags \;].
10e80 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
10e90 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
10ea0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
10eb0 65 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 68  enableSharedCach
10ec0 65 20 7b 20 63 68 61 6e 6e 65 6c 20 65 6e 61 62  e { channel enab
10ed0 6c 65 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d  le {quiet false}
10ee0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b   } {..      if {
10ef0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
10f00 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
10f10 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
10f20 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
10f30 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
10f40 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65  ite.UnsafeNative
10f50 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20  Methods \..
10f60 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 65         sqlite3_e
10f70 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63  nable_shared_cac
10f80 68 65 20 5b 65 78 70 72 20 69 6e 74 28 24 65 6e  he [expr int($en 10f90 61 62 6c 65 29 5d 0d 0a 20 20 20 20 20 20 7d 20 able)].. } 10fa0 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 10fb0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 10fc0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
10fd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
10fe0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 10ff0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 11000 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 11010 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 all sqlite3_enab 11020 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28 le_shared_cache( 11030 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 "$enable \..
11040 20 20 20 20 20 20 20 20 20 20 20 22 29 2e 2e 2e             ")...
11050 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c   ok: " $result \ 11060 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 n].. }.. 11070 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 11080 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
11090 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
110a0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 110b0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 110c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 110d0 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c "---- call sql 110e0 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 ite3_enable_shar 110f0 65 64 5f 63 61 63 68 65 28 22 20 24 65 6e 61 62 ed_cache("$enab
11100 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
11110 20 20 20 20 22 29 2e 2e 2e 20 65 72 72 6f 72 3a      ")... error:
11120 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20   " \n\t $result 11130 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. 11140 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 11150 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 ... proc setu 11160 70 44 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 pDb {.. 11170 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 fileName {mod 11180 65 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 e ""} {dateTimeF 11190 6f 72 6d 61 74 20 22 22 7d 20 7b 64 61 74 65 54 ormat ""} {dateT 111a0 69 6d 65 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 imeKind ""} {fla 111b0 67 73 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 gs ""}.. 111c0 20 20 20 20 7b 65 78 74 72 61 20 22 22 7d 20 7b {extra ""} { 111d0 71 75 61 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 qualify true} {d 111e0 65 6c 65 74 65 20 74 72 75 65 7d 20 7b 75 72 69 elete true} {uri 111f0 20 66 61 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 false}.. 11200 20 20 20 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 {temporary 11210 74 72 75 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 true} {varName d 11220 62 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d b} {quiet false} 11230 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 11240 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 # NOTE: Fir 11250 73 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63 st, see if our c 11260 61 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73 aller has reques 11270 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 ted an in-memory 11280 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 database... 11290 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69 #.. set i 112a0 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 sMemory [isMemor 112b0 79 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a yDb$fileName]..
112c0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
112d0 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77   # NOTE: For now
112e0 2c 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61 62  , all test datab
112f0 61 73 65 73 20 75 73 65 64 20 62 79 20 74 68 65  ases used by the
11300 20 74 65 73 74 20 73 75 69 74 65 20 61 72 65 20   test suite are
11310 70 6c 61 63 65 64 0d 0a 20 20 20 20 20 20 23 20  placed..      #
11320 20 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 64        into the d
11330 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72  atabase director
11340 79 2e 20 20 45 61 63 68 20 64 61 74 61 62 61 73  y.  Each databas
11350 65 20 61 6e 64 20 72 65 6c 61 74 65 64 20 66 69  e and related fi
11360 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20  les..      #
11370 20 20 20 75 73 65 64 20 62 79 20 61 20 74 65 73     used by a tes
11380 74 20 73 68 6f 75 6c 64 20 62 65 20 63 6c 65 61  t should be clea
11390 6e 65 64 20 75 70 20 62 79 20 74 68 61 74 20 74  ned up by that t
113a0 65 73 74 20 75 73 69 6e 67 20 74 68 65 0d 0a 20  est using the..
113b0 20 20 20 20 20 23 20 20 20 20 20 20 20 22 63 6c       #       "cl
113c0 65 61 6e 75 70 44 62 22 20 70 72 6f 63 65 64 75  eanupDb" procedu
113d0 72 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 20  re, below...
113e0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
113f0 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75  $isMemory &&$qu
11400 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20  alify} then {..
11410 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
11420 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  ame [file join [
11430 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
11440 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c  tory] [file tail
11450 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20   $fileName]].. 11460 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 11470 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 11480 42 79 20 64 65 66 61 75 6c 74 2c 20 64 65 6c 65 By default, dele 11490 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 te any pre-exist 114a0 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74 ing database wit 114b0 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d h the same file. 114c0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e . # n 114d0 61 6d 65 20 69 66 20 69 74 20 63 75 72 72 65 6e ame if it curren 114e0 74 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 tly exists... 114f0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 11500 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 !$isMemory && $d 11510 65 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 elete && [file e 11520 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
11530 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
11540 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
11550 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
11560 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65  delete any pre-e
11570 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
11580 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 66   with the same f
11590 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ile..        #
115a0 20 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20       name...
115b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
115c0 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20  f {[catch {file
115d0 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65  delete $fileName 115e0 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b } error]} then { 115f0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 11600 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 11610 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c We somehow fail 11620 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 ed to delete the 11630 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 file, report wh 11640 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d y... #. 11650 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 11660 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
11670 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
11680 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 11690 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 116a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 116b0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 116c0 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete 116d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c database file \ 116e0 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a ""$fileName \..
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11700 22 5c 22 20 64 75 72 69 6e 67 20 73 65 74 75 70  "\" during setup
11710 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
11720 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 11730 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 11740 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 11750 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 11760 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 11770 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 11780 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" 11790 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context 117a0 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # 117b0 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 caller. 117c0 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 The handle to th 117d0 65 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 e opened databas 117e0 65 20 77 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 e will be stored 117f0 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 there... # 11800 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 11810 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20$varName db....
11820 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
11830 4e 4f 54 45 3a 20 53 74 61 72 74 20 62 75 69 6c  NOTE: Start buil
11840 64 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74  ding the connect
11850 69 6f 6e 20 73 74 72 69 6e 67 2e 20 20 54 68 65  ion string.  The
11860 20 6f 6e 6c 79 20 72 65 71 75 69 72 65 64 20 70   only required p
11870 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20  ortion..      #
11880 20 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e        of the con
11890 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69  nection string i
118a0 73 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63  s the data sourc
118b0 65 2c 20 77 68 69 63 68 20 63 6f 6e 74 61 69 6e  e, which contain
118c0 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  s the..      #
118d0 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69       database fi
118e0 6c 65 20 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20  le name itself.
118f0 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 77   If our caller w
11900 61 6e 74 73 20 74 6f 20 75 73 65 20 61 20 55 52  ants to use a UR
11910 49 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20  I as..      #
11920 20 20 20 20 74 68 65 20 64 61 74 61 20 73 6f 75      the data sou
11930 72 63 65 2c 20 75 73 65 20 74 68 65 20 46 75 6c  rce, use the Ful
11940 6c 55 72 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  lUri connection
11950 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20  string property
11960 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  to..      #
11970 20 20 70 72 65 76 65 6e 74 20 74 68 65 20 64 61    prevent the da
11980 74 61 20 73 6f 75 72 63 65 20 73 74 72 69 6e 67  ta source string
11990 20 66 72 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67   from being mang
119a0 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  led...      #..
119b0 20 20 20 20 20 69 66 20 7b 24 75 72 69 7d 20 74       if {$uri} t 119c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 hen {.. s 119d0 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 et connection {F 119e0 75 6c 6c 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d ullUri=${fileNam
119f0 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  e}}..      } els
11a00 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  e {..        set
11a10 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74   connection {Dat
11a20 61 20 53 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e  a Source=${fileN 11a30 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a ame}}.. }.. 11a40 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 11a50 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 # NOTE: Since t 11a60 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 68 61 his procedure ha 11a70 73 20 6e 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f s no special kno 11a80 77 6c 65 64 67 65 20 6f 66 20 77 68 61 74 20 74 wledge of what t 11a90 68 65 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 he default.. 11aa0 20 20 23 20 20 20 20 20 20 20 73 65 74 74 69 6e # settin 11ab0 67 20 69 73 20 66 6f 72 20 74 68 65 20 54 6f 46 g is for the ToF 11ac0 75 6c 6c 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 ullPath connecti 11ad0 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65 72 on string proper 11ae0 79 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 y, always.. 11af0 20 23 20 20 20 20 20 20 20 61 64 64 20 74 68 65 # add the 11b00 20 76 61 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 value we know a 11b10 62 6f 75 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e bout to the conn 11b20 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a ection string... 11b30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61 #.. a 11b40 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e ppend connection 11b50 20 7b 3b 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b {;ToFullPath=${
11b60 71 75 61 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20  qualify}}....
11b70 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
11b80 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65  TE: If our calle
11b90 72 20 73 70 65 63 69 66 69 65 64 20 61 20 6a 6f  r specified a jo
11ba0 75 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20  urnal mode, add
11bb0 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f  the necessary po
11bc0 72 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20  rtion..      #
11bd0 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e       of the conn
11be0 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f  ection string no
11bf0 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
11c00 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
11c10 65 6e 67 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30  ength $mode] > 0 11c20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 11c30 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect 11c40 69 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f ion {;Journal Mo 11c50 64 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 de=${mode}}..
11c60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
11c70 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
11c80 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65  f our caller spe
11c90 63 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d  cified a DateTim
11ca0 65 20 66 6f 72 6d 61 74 2c 20 61 64 64 20 74 68  e format, add th
11cb0 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20  e necessary..
11cc0 20 20 20 23 20 20 20 20 20 20 20 70 6f 72 74 69     #       porti
11cd0 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63  on of the connec
11ce0 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e  tion string now.
11cf0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
11d00 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
11d10 67 74 68 20 24 64 61 74 65 54 69 6d 65 46 6f 72  gth $dateTimeFor 11d20 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b mat] > 0} then { 11d30 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append 11d40 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 connection {;Da 11d50 74 65 54 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 teTimeFormat=${d
11d60 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d  ateTimeFormat}}.
11d70 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
11d80 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
11d90 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72  E: If our caller
11da0 20 73 70 65 63 69 66 69 65 64 20 61 20 44 61 74   specified a Dat
11db0 65 54 69 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74  eTimeKind, add t
11dc0 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72  he necessary por
11dd0 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
11de0 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65      of the conne
11df0 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77  ction string now
11e00 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
11e10 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
11e20 6e 67 74 68 20 24 64 61 74 65 54 69 6d 65 4b 69  ngth $dateTimeKi 11e30 6e 64 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d nd] > 0} then {. 11e40 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 . append 11e50 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 connection {;Dat 11e60 65 54 69 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 eTimeKind=${date
11e70 54 69 6d 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20  TimeKind}}..
11e80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
11e90 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69        # NOTE: Fi
11ea0 67 75 72 65 20 6f 75 74 20 77 68 61 74 20 74 68  gure out what th
11eb0 65 20 66 69 6e 61 6c 20 66 6c 61 67 73 20 66 6f  e final flags fo
11ec0 72 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  r this connectio
11ed0 6e 20 6e 65 65 64 20 74 6f 20 62 65 2e 0d 0a 20  n need to be...
11ee0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
11ef0 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e  t flags [getConn
11f00 65 63 74 69 6f 6e 46 6c 61 67 73 20 24 66 69 6c  ectionFlags $fil 11f10 65 4e 61 6d 65 20 24 66 6c 61 67 73 20 24 71 75 eName$flags $qu 11f20 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d iet].... #. 11f30 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 11f40 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 f our caller spe 11f50 63 69 66 69 65 64 20 73 6f 6d 65 20 53 51 4c 69 cified some SQLi 11f60 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 teConnectionFlag 11f70 73 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 20 20 s, add the.. 11f80 20 20 23 20 20 20 20 20 20 20 6e 65 63 65 73 73 # necess 11f90 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 ary portion of t 11fa0 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st 11fb0 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 ring now... 11fc0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 11fd0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c tring length$fl
11fe0 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ags] > 0} then {
11ff0 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  ..        append
12000 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c   connection {;Fl
12010 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20  ags=${flags}}.. 12020 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 12030 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 12040 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 If our caller s 12050 70 65 63 69 66 69 65 64 20 61 6e 20 65 78 74 72 pecified an extr 12060 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 68 65 a payload to the 12070 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 connection.. 12080 20 20 20 23 20 20 20 20 20 20 20 73 74 72 69 6e # strin 12090 67 2c 20 61 70 70 65 6e 64 20 69 74 20 6e 6f 77 g, append it now 120a0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 120b0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 120c0 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e 20 30 ngth$extra] > 0
120d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
120e0 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74    append connect
120f0 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d 0a 20  ion \; $extra.. 12100 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 12110 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 12120 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 Open the databa 12130 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f se connection no 12140 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 20 6f w, placing the o 12150 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76 61 6c paque handle val 12160 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ue.. # 12170 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72 69 61 into the varia 12180 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 62 79 ble specified by 12190 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 our caller... 121a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 121b0 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 db [sql open -t 121c0 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75 62 73 ype SQLite [subs 121d0 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d t$connection]].
121e0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
121f0 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 69 67    # NOTE: Config
12200 75 72 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72  ure the temporar
12210 79 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20  y directory for
12220 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64  the newly opened
12230 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..
12240 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74   #       connect
12250 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f  ion now unless o
12260 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 69 64  ur caller forbid
12270 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  s it...      #..
12280 20 20 20 20 20 20 69 66 20 7b 24 74 65 6d 70 6f        if {$tempo 12290 72 61 72 79 20 26 26 20 21 5b 69 6e 66 6f 20 65 rary && ![info e 122a0 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 54 65 xists ::no(setTe 122b0 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 mporaryDirectory 122c0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 122d0 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 sql execute 122e0 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20$db [appendArgs
122f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
12300 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
12310 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 5c 22  e_directory = \"
12320 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 44  " [getTemporaryD
12330 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b 5d 0d  irectory] \"\;].
12340 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
12350 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
12360 45 3a 20 50 65 72 66 6f 72 6d 20 61 6e 79 20 65  E: Perform any e
12370 78 74 72 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74  xtra per-connect
12380 69 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 74 68  ion setup for th
12390 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 0d 0a  e newly opened..
123a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61        #       da
123b0 74 61 62 61 73 65 20 6e 6f 77 20 75 6e 6c 65 73  tabase now unles
123c0 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72  s our caller for
123d0 62 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20  bids it...
123e0 23 0d 0a 20 20 20 20 20 20 73 65 74 20 65 78 65  #..      set exe
123f0 63 75 74 65 4f 6e 53 65 74 75 70 20 5b 67 65 74  cuteOnSetup [get
12400 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d  ExecuteOnSetup].
12410 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  ...      if {[st
12420 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 65  ring length $exe 12430 63 75 74 65 4f 6e 53 65 74 75 70 5d 20 3e 20 30 cuteOnSetup] > 0 12440 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 12450 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a ![info exists : 12460 3a 6e 6f 28 65 78 65 63 75 74 65 4f 6e 53 65 74 :no(executeOnSet 12470 75 70 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 up)]} then {.. 12480 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 12490 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 6f # NOTE: This co 124a0 6d 6d 61 6e 64 20 6d 61 79 20 72 61 69 73 65 20 mmand may raise 124b0 61 6e 20 65 72 72 6f 72 3b 20 69 66 20 73 6f 2c an error; if so, 124c0 20 74 68 61 74 20 69 73 20 66 69 6e 65 2c 20 61 that is fine, a 124d0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 124e0 20 20 20 74 68 65 20 65 6e 63 6c 6f 73 69 6e 67 the enclosing 124f0 20 74 65 73 74 20 77 69 6c 6c 20 74 68 65 6e 20 test will then 12500 66 61 69 6c 2e 20 20 54 68 65 20 5b 73 75 62 73 fail. The [subs 12510 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 t] command is.. 12520 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 # u 12530 73 65 64 20 6f 6e 20 74 68 65 20 53 51 4c 20 69 sed on the SQL i 12540 6e 20 63 61 73 65 20 69 74 20 6e 65 65 64 73 20 n case it needs 12550 74 6f 20 72 65 66 65 72 20 74 6f 20 73 74 61 74 to refer to stat 12560 65 20 69 6e 20 6f 75 72 0d 0a 20 20 20 20 20 20 e in our.. 12570 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 # contex 12580 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 12590 20 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 sql execu 125a0 74 65 20 24 64 62 20 5b 73 75 62 73 74 20 24 65 te$db [subst $e 125b0 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a xecuteOnSetup].. 125c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 125d0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 125e0 3a 20 41 6c 77 61 79 73 20 72 65 74 75 72 6e 20 : Always return 125f0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 the connection h 12600 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75 63 63 65 andle upon succe 12610 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ss... #.. 12620 20 20 20 20 72 65 74 75 72 6e 20 24 64 62 0d 0a return$db..
12630 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
12640 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 63 74 69  oc getDbConnecti
12650 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 64 62  on { {varName db
12660 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
12670 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
12680 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69  fer to the speci
12690 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65  fied variable (e
126a0 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65  .g. "db") in the
126b0 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d   context of our.
126c0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
126d0 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64  aller.  The hand
126e0 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  le to the databa
126f0 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  se previously op
12700 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20  ened via the..
12710 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 74      #       [set
12720 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20  upDb] procedure
12730 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64  should be stored
12740 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23   there...      #
12750 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
12760 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20  $varName db.... 12770 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 12780 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 74 75 72 NOTE: This retur 12790 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45 54 20 49 ns the ADO.NET I 127a0 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a DbConnection obj 127b0 65 63 74 20 69 6e 73 74 61 6e 63 65 20 66 6f 72 ect instance for 127c0 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 127d0 20 20 20 20 73 70 65 63 69 66 69 65 64 20 64 61 specified da 127e0 74 61 62 73 65 20 68 61 6e 64 6c 65 2e 20 20 53 tabse handle. S 127f0 69 6e 63 65 20 67 65 74 74 69 6e 67 20 74 68 69 ince getting thi 12800 73 20 6f 62 6a 65 63 74 20 72 65 6c 69 65 73 20 s object relies 12810 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 upon.. # 12820 20 20 20 20 45 61 67 6c 65 20 69 6e 74 65 72 6e Eagle intern 12830 61 6c 73 2c 20 67 72 65 61 74 20 63 61 72 65 20 als, great care 12840 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e 20 should be taken 12850 74 6f 20 61 76 6f 69 64 20 64 69 73 70 6f 73 69 to avoid disposi 12860 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 ng of.. # 12870 20 20 20 20 20 74 68 69 73 20 6f 62 6a 65 63 74 this object 12880 20 6f 72 20 6f 74 68 65 72 77 69 73 65 20 70 75 or otherwise pu 12890 74 74 69 6e 67 20 69 74 20 69 6e 74 6f 20 61 6e tting it into an 128a0 20 69 6e 76 61 6c 69 64 20 73 74 61 74 65 2e 0d invalid state.. 128b0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 128c0 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 128d0 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 db]} then {.. 128e0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 128f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 12900 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 12910 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f gs +NonPublic -o 12920 62 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 bjectflags +NoDi 12930 73 70 6f 73 65 20 2d 61 6c 69 61 73 20 5c 0d 0a spose -alias \.. 12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e In 12950 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 terpreter.GetAct 12960 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 ive.connections 12970 49 74 65 6d 20 24 64 62 0d 0a 20 20 20 20 20 20 Item$db..
12980 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30    } result] == 0
12990 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
129a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
129b0 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73   # NOTE: Success
129c0 2c 20 72 65 74 75 72 6e 20 74 68 65 20 6f 70 61  , return the opa
129d0 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c  que object handl
129e0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  e...          #.
129f0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
12a00 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20  n $result.. 12a10 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 12a20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 12a30 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c # NOTE: Fail 12a40 75 72 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e ure, report why. 12a50 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 12a60 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
12a70 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
12a80 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
12a90 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
12aa0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
12ab0 64 20 74 6f 20 67 65 74 20 63 6f 6e 6e 65 63 74  d to get connect
12ac0 69 6f 6e 20 68 61 6e 64 6c 65 20 66 6f 72 20 64  ion handle for d
12ad0 61 74 61 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20  atabase \"" \..
12ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62               $db 12af0 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c "\", error: " \ 12b00 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
12b10 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
12b20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
12b30 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61        # NOTE: Fa
12b40 69 6c 75 72 65 2c 20 72 65 74 75 72 6e 20 61 6e  ilure, return an
12b50 20 6f 62 76 69 6f 75 73 6c 79 20 69 6e 76 61 6c   obviously inval
12b60 69 64 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74  id opaque object
12b70 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20   handle...
12b80 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
12b90 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ""..    }.....
12ba0 20 20 70 72 6f 63 20 66 72 65 65 44 62 43 6f 6e    proc freeDbCon
12bb0 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61  nection { {varNa
12bc0 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d  me connection} }
12bd0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
12be0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72     # NOTE: Refer
12bf0 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
12c00 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e  d variable (e.g.
12c10 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69   "connection") i
12c20 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  n the..      #
12c30 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20       context of
12c40 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65  our caller.  The
12c50 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68   opaque object h
12c60 61 6e 64 6c 65 20 66 6f 72 20 61 6e 20 41 44 4f  andle for an ADO
12c70 2e 4e 45 54 0d 0a 20 20 20 20 20 20 23 20 20 20  .NET..      #
12c80 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70      connection p
12c90 72 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e  reviously return
12ca0 65 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e  ed by [getDbConn
12cb0 65 63 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 62  ection] should b
12cc0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
12cd0 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a   stored there...
12ce0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
12cf0 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 12d00 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 connection.... 12d10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 12d20 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 12d30 72 65 6d 6f 76 65 20 74 68 65 20 6f 70 61 71 75 remove the opaqu 12d40 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 e object handle 12d50 66 72 6f 6d 20 74 68 65 20 69 6e 74 65 72 70 72 from the interpr 12d60 65 74 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 eter.. # 12d70 20 20 20 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b now. This [ 12d80 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 5d 20 object dispose] 12d90 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 call will not ac 12da0 74 75 61 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f tually dispose o 12db0 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 f the.. # 12dc0 20 20 20 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 underlying 12dd0 6f 62 6a 65 63 74 20 62 65 63 61 75 73 65 20 74 object because t 12de0 68 65 20 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c he +NoDispose fl 12df0 61 67 20 77 61 73 20 73 65 74 20 6f 6e 20 69 74 ag was set on it 12e00 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 12e10 64 75 72 69 6e 67 20 63 72 65 61 74 69 6f 6e 20 during creation 12e20 6f 66 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 of the opaque ob 12e30 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 ject handle... 12e40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 12e50 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f {[info exists co 12e60 6e 6e 65 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a nnection] && \.. 12e70 20 20 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 [catch 12e80 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 {object dispose 12e90 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72$connection} er
12ea0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
12eb0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12ec0 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65   # NOTE: We some
12ed0 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 72 65  how failed to re
12ee0 6d 6f 76 65 20 74 68 65 20 68 61 6e 64 6c 65 2c  move the handle,
12ef0 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20   report why...
12f00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12f10 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 12f20 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 12f30 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 12f40 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 12f50 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 failed to remov 12f60 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e e connection han 12f70 64 6c 65 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 dle \""$connect
12f80 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
12f90 20 20 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22     "\", error: "
12fa0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 12fb0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 12fc0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 61 64 ..... proc ad 12fd0 64 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 dDbConnection { 12fe0 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 72 4e connection {varN 12ff0 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 ame db} } {.. 13000 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 13010 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 TE: Refer to the 13020 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 specified varia 13030 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 ble (e.g. "db") 13040 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f in the context o 13050 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 f our.. # 13060 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 caller... 13070 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 #.. upv 13080 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 ar 1$varName db
13090 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
130a0 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74     # NOTE: Creat
130b0 65 20 61 20 63 6f 72 72 65 63 74 6c 79 20 66 6f  e a correctly fo
130c0 72 6d 61 74 74 65 64 20 6e 61 6d 65 20 66 6f 72  rmatted name for
130d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
130e0 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 20  nnection to..
130f0 20 20 20 23 20 20 20 20 20 20 20 62 65 20 61 64     #       be ad
13100 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20  ded to the list
13110 6d 61 6e 61 67 65 64 20 62 79 20 74 68 65 20 45  managed by the E
13120 61 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72  agle interpreter
13130 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
13140 20 20 73 65 74 20 64 62 20 5b 6f 62 6a 65 63 74    set db [object
13150 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
13160 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
13170 20 20 20 20 20 20 20 45 61 67 6c 65 2e 5f 43 6f         Eagle._Co
13180 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 76 61 74 65  mponents.Private
13190 2e 46 6f 72 6d 61 74 4f 70 73 20 44 61 74 61 62  .FormatOps Datab
131a0 61 73 65 4f 62 6a 65 63 74 4e 61 6d 65 20 24 63  aseObjectName $c 131b0 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 onnection \.. 131c0 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e SQLiteCon 131d0 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 nection [object 131e0 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 invoke Interpret 131f0 65 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 er.GetActive Nex 13200 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 tId]].... # 13210 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 13220 41 64 64 20 74 68 65 20 64 61 74 61 62 61 73 65 Add the database 13230 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 76 connection prov 13240 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c ided by our call 13250 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0d 0a er to the list.. 13260 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 # of 13270 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 those known to 13280 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 the Eagle interp 13290 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d reter... #. 132a0 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e . object in 132b0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 132c0 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 Public Interpret 132d0 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e er.GetActive.con 132e0 6e 65 63 74 69 6f 6e 73 20 41 64 64 20 5c 0d 0a nections Add \.. 132f0 20 20 20 20 20 20 20 20 20 20 24 64 62 20 24 63$db $c 13300 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 7d onnection.. } 13310 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 13320 74 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 61 62 tRowsFromDataTab 13330 6c 65 20 7b 20 64 61 74 61 54 61 62 6c 65 20 7d le { dataTable } 13340 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 6f {.. set ro 13350 77 73 20 5b 6c 69 73 74 5d 0d 0a 20 20 20 20 20 ws [list].. 13360 20 73 65 74 20 63 6f 75 6e 74 20 5b 24 64 61 74 set count [$dat
13370 61 54 61 62 6c 65 20 43 6f 6c 75 6d 6e 73 2e 43  aTable Columns.C
13380 6f 75 6e 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66  ount]....      f
13390 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d  or {set index 0}
133a0 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e   {$index <$coun
133b0 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20  t} {incr index}
133c0 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 64  {..        set d
133d0 61 74 61 43 6f 6c 75 6d 6e 20 5b 24 64 61 74 61  ataColumn [$data 133e0 54 61 62 6c 65 20 2d 61 6c 69 61 73 20 43 6f 6c Table -alias Col 133f0 75 6d 6e 73 2e 67 65 74 5f 49 74 65 6d 20 24 69 umns.get_Item$i
13400 6e 64 65 78 5d 0d 0a 20 20 20 20 20 20 20 20 73  ndex]..        s
13410 65 74 20 6e 61 6d 65 73 28 24 69 6e 64 65 78 29  et names($index) 13420 20 5b 24 64 61 74 61 43 6f 6c 75 6d 6e 20 43 6f [$dataColumn Co
13430 6c 75 6d 6e 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  lumnName]..
13440 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65   }....      obje
13450 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
13460 73 20 64 61 74 61 52 6f 77 20 5b 73 65 74 20 64  s dataRow [set d
13470 61 74 61 52 6f 77 73 20 5b 24 64 61 74 61 54 61  ataRows [$dataTa 13480 62 6c 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a 20 20 ble Rows]] {.. 13490 20 20 20 20 20 20 73 65 74 20 72 6f 77 20 5b 6c set row [l 134a0 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ist].... 134b0 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 for {set index 0 134c0 7d 20 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 } {$index < $cou 134d0 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d nt} {incr index} 134e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 134f0 74 20 76 61 6c 75 65 20 5b 24 64 61 74 61 52 6f t value [$dataRo
13500 77 20 2d 63 72 65 61 74 65 20 2d 61 6c 69 61 73  w -create -alias
13510 20 67 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78   get_Item $index 13520 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ].... i 13530 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 13540 68 20 24 76 61 6c 75 65 5d 20 3e 20 30 20 26 26 h$value] > 0 &&
13550 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13560 20 20 21 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b    ![object invok
13570 65 20 43 6f 6e 76 65 72 74 20 49 73 44 42 4e 75  e Convert IsDBNu
13580 6c 6c 20 24 76 61 6c 75 65 5d 7d 20 74 68 65 6e  ll $value]} then 13590 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 135a0 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 lappend row [lis 135b0 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 t$names($index) 135c0 20 5b 24 76 61 6c 75 65 20 54 6f 53 74 72 69 6e [$value ToStrin
135d0 67 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  g]]..          }
135e0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
135f0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77       lappend row
13600 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24 69   [list $names($i
13610 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20 20 20 20  ndex)]..
13620 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
13630 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  ..        lappen
13640 64 20 72 6f 77 73 20 24 72 6f 77 0d 0a 20 20 20  d rows $row.. 13650 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 13660 74 75 72 6e 20 24 72 6f 77 73 0d 0a 20 20 20 20 turn$rows..
13670 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 64  }.....    proc d
13680 75 6d 70 52 6f 77 73 46 72 6f 6d 44 61 74 61 54  umpRowsFromDataT
13690 61 62 6c 65 20 7b 20 63 68 61 6e 6e 65 6c 20 72  able { channel r
136a0 6f 77 73 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  ows } {..      s
136b0 65 74 20 73 65 71 75 65 6e 63 65 20 31 0d 0a 0d  et sequence 1...
136c0 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 72  .      foreach r
136d0 6f 77 20 24 72 6f 77 73 20 7b 0d 0a 20 20 20 20  ow $rows {.. 136e0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
136f0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
13700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 65  ..            [e
13710 78 70 72 20 7b 24 73 65 71 75 65 6e 63 65 20 3e  xpr {$sequence > 13720 20 31 20 3f 20 22 5c 6e 22 20 3a 20 22 22 7d 5d 1 ? "\n" : ""}] 13730 20 22 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 24 73 "---- ROW #"$s
13740 65 71 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a 0d 0a  equence :\n]....
13750 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
13760 70 61 69 72 20 24 72 6f 77 20 7b 0d 0a 20 20 20  pair $row {.. 13770 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e if {[llen 13780 67 74 68 20 24 70 61 69 72 5d 20 3e 3d 20 32 7d gth$pair] >= 2}
13790 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
137a0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 137b0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 137c0 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 \t \.. 137d0 20 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69 6e [list [lin 137e0 64 65 78 20 24 70 61 69 72 20 30 5d 5d 20 22 3a dex$pair 0]] ":
137f0 20 22 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78   " [list [lindex
13800 20 24 70 61 69 72 20 31 5d 5d 20 5c 6e 5d 0d 0a   $pair 1]] \n].. 13810 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 13820 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 if {[llength$pa
13830 69 72 5d 20 3d 3d 20 31 7d 20 74 68 65 6e 20 7b  ir] == 1} then {
13840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
13850 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 13860 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20 pendArgs \t \.. 13870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 13880 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 list [lindex$pa
13890 69 72 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c 6c 3e  ir 0]] ": <null>
138a0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
138b0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
138c0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 138d0 6e 6e 65 6c 20 5c 74 3c 65 6d 70 74 79 3e 5c 6e nnel \t<empty>\n 138e0 3b 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 61 74 ; # NOTE: No dat 138f0 61 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d a?.. }. 13900 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 13910 20 20 20 20 20 20 69 6e 63 72 20 73 65 71 75 65 incr seque 13920 6e 63 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 nce.. }.. 13930 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 13940 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 66 69 6c cleanupDb { fil 13950 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 64 eName {varName d 13960 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 b} {collect true 13970 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65 7d } {qualify true} 13980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 13990 20 20 20 20 20 20 20 7b 64 65 6c 65 74 65 20 74 {delete t 139a0 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 rue} } {.. 139b0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 139c0 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 Attempt to forc 139d0 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 e all pending "g 139e0 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 arbage" objects 139f0 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c to be collected, 13a00 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 13a10 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 including SQLite 13a20 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 statements and 13a30 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 backup objects; 13a40 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f this should allo 13a50 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 w.. # 13a60 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 the underlying 13a70 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f database file to 13a80 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 be deleted... 13a90 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 13aa0 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 {$collect} then
13ab0 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65  {..        colle
13ac0 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73  ctGarbage $::tes 13ad0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 t_channel.. 13ae0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 13af0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 # NOTE: Ref 13b00 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 er to the specif 13b10 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e ied variable (e. 13b20 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 g. "db") in the 13b30 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a context of our.. 13b40 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 # ca 13b50 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c ller. The handl 13b60 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 e to the databas 13b70 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 e previously ope 13b80 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 ned via the.. 13b90 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 # [setu 13ba0 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 pDb] procedure s 13bb0 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 hould be stored 13bc0 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d there... #. 13bd0 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
13be0 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20  varName db....
13bf0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
13c00 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 63  OTE: Close the c
13c10 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 65  onnection to the
13c20 20 64 61 74 61 62 61 73 65 20 6e 6f 77 2e 20 20   database now.
13c30 54 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f  This should allo
13c40 77 20 75 73 0d 0a 20 20 20 20 20 20 23 20 20 20  w us..      #
13c50 20 20 20 20 74 6f 20 64 65 6c 65 74 65 20 74 68      to delete th
13c60 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
13c70 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20  abase file...
13c80 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
13c90 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d  [info exists db]
13ca0 20 26 26 20 5b 63 61 74 63 68 20 7b 73 71 6c 20   && [catch {sql
13cb0 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72  close $db} error 13cc0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 13cd0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 13ce0 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 NOTE: We somehow 13cf0 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 failed to close 13d00 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20 72 the database, r 13d10 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... 13d20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 13d30 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
13d40 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
13d50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
13d60 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
13d70 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 64  ailed to close d
13d80 61 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 20  atabase \"" $db 13d90 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d "\", error: " \. 13da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c . \n\ 13db0 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
13dc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
13dd0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
13de0 46 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f 75  First, see if ou
13df0 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 71  r caller has req
13e00 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 6d  uested an in-mem
13e10 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a 20  ory database...
13e20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
13e30 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d 65  t isMemory [isMe
13e40 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d 65  moryDb $fileName 13e50 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. 13e60 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 13e70 64 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 d the full path 13e80 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 to the database 13e90 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f 72 20 file name. For 13ea0 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d 0a 20 now, all test.. 13eb0 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 # dat 13ec0 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 65 20 abase files are 13ed0 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 74 65 stored in the te 13ee0 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 mporary director 13ef0 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 y... #.. 13f00 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 if {!$isMemor
13f10 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74  y && $qualify} t 13f20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 hen {.. s 13f30 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c et fileName [fil 13f40 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 e join [getDatab 13f50 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 aseDirectory] [f 13f60 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 ile tail$fileNa
13f70 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  me]]..      }...
13f80 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
13f90 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
13fa0 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20   the file still
13fb0 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23  exists...      #
13fc0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73  ..      if {!$is 13fd0 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 Memory &&$delet
13fe0 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74  e && [file exist
13ff0 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 14000 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 14010 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 14020 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 64 Skip deleting d 14030 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 69 66 atabase files if 14040 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 somebody sets t 14050 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 he global.. 14060 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 # varia 14070 62 6c 65 20 74 6f 20 70 72 65 76 65 6e 74 20 69 ble to prevent i 14080 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 14090 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 140a0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c o exists ::no(cl 140b0 65 61 6e 75 70 44 62 46 69 6c 65 29 5d 7d 20 74 eanupDbFile)]} t 140c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 140d0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 140e0 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 140f0 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 delete the test 14100 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e database file n 14110 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ow... # 14120 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 14130 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 [set code [catch 14140 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 {file delete$f
14150 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d  ileName} error]]
14160 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
14170 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14180 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20       # NOTE: We
14190 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74  somehow failed t
141a0 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c  o delete the fil
141b0 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a  e, report why...
141c0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
141d0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
141e0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 141f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 14200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14210 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 14220 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 ailed to delete 14230 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 database file \" 14240 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 "$fileName \..
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14260 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75  \" during cleanu
14270 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  p, error: " \n\t
14280 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20   $error \n].. 14290 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 142a0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 142b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 142c0 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 # NOTE: Show 142d0 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 64 20 that we skipped 142e0 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c deleting the fil 142f0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d e... #. 14300 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 . set c 14310 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 ode 0.... 14320 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
14330 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
14340 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
14350 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
14360 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c  ING: skipped del
14370 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 66  eting database f
14380 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam 14390 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 143a0 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c "\" during cl 143b0 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 eanup\n"].. 143c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 143d0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 143e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 143f0 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e The file does n 14400 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 ot exist, succes 14410 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s!.. #.. 14420 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 set code 14430 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 0.. }.... 14440 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 return$code
14450 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
14460 70 72 6f 63 20 73 65 74 75 70 44 62 49 6e 74 65  proc setupDbInte
14470 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 7b 20  rruptCallback {
14480 63 68 61 6e 6e 65 6c 20 6c 6f 67 20 7d 20 7b 0d  channel log } {.
14490 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch 144a0 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 73 65 74 74 annel "---- sett 144b0 69 6e 67 20 75 70 20 64 65 62 75 67 67 65 72 20 ing up debugger 144c0 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61 interrupt callba 144d0 63 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 ck... ".... 144e0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 144f0 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 set ::env 14500 28 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 (quietFindInterp 14510 72 65 74 65 72 54 65 73 74 50 61 74 68 29 20 31 reterTestPath) 1 14520 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a .. set :: 14530 65 6e 76 28 71 75 69 65 74 53 65 74 75 70 49 6e env(quietSetupIn 14540 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74 terpreterTestPat 14550 68 29 20 31 0d 0a 0d 0a 20 20 20 20 20 20 20 20 h) 1.... 14560 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 try {.. 14570 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 14580 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 NOTE: Make sure 14590 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67 the script debug 145a0 67 65 72 20 61 6e 64 20 74 68 65 20 69 73 6f 6c ger and the isol 145b0 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 ated interpreter 145c0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 145d0 20 20 20 20 61 72 65 20 73 65 74 75 70 20 61 6e are setup an 145e0 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 2e d ready for use. 145f0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 14600 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 73 debug s 14610 65 74 75 70 20 74 72 75 65 20 74 72 75 65 0d 0a etup true true.. 14620 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 14630 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 14640 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 65 73 73 Load the necess 14650 61 72 79 20 70 61 63 6b 61 67 65 73 20 69 6e 74 ary packages int 14660 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 o the isolated i 14670 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 nterpreter... 14680 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 14690 20 20 20 20 64 65 62 75 67 20 65 76 61 6c 20 7b debug eval { 146a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 .. pa 146b0 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 ckage require Ea 146c0 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 gle.. 146d0 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 package require 146e0 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 79 0d 0a Eagle.Library.. 146f0 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b pack 14700 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c age require Eagl 14710 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 20 20 20 e.Test.. 14720 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 14730 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 14740 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 6e NOTE: Copy the n 14750 65 63 65 73 73 61 72 79 20 76 61 72 69 61 62 6c ecessary variabl 14760 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c es into the isol 14770 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 ated interpreter 14780 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 14790 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 debug 147a0 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 invoke 0 set ::t 147b0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 61 est_channel$cha
147c0 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46 6f  nnel; # NOTE: Fo
147d0 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20 20  r [tputs]...
147e0 20 20 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f        debug invo
147f0 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f  ke 0 set ::test_
14800 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e 4f 54 45  log $log; # NOTE 14810 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d 0a 0d : For [tlog].... 14820 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 14830 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 14840 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 61 6c 6c Install the call 14850 62 61 63 6b 20 73 63 72 69 70 74 20 74 6f 20 62 back script to b 14860 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 e evaluated in t 14870 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20 20 20 he isolated.. 14880 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 # i 14890 6e 74 65 72 70 72 65 74 65 72 20 77 68 65 6e 20 nterpreter when 148a0 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 this interpreter 148b0 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 20 is interrupted 148c0 62 79 20 73 63 72 69 70 74 0d 0a 20 20 20 20 20 by script.. 148d0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6e # can 148e0 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 63 2e 0d cellation, etc.. 148f0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 14900 20 20 20 20 20 20 20 20 64 65 62 75 67 20 63 61 debug ca 14910 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b 7b 73 llback apply {{s 14920 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 20 20 ender e} {.. 14930 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 14940 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 14950 68 65 63 6b 20 69 66 20 74 68 69 73 20 63 61 6c heck if this cal 14960 6c 62 61 63 6b 20 69 73 20 6f 6e 65 20 74 68 61 lback is one tha 14970 74 20 77 65 20 63 61 72 65 20 61 62 6f 75 74 2e t we care about. 14980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 14990 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 149a0 7b 22 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 5b {"Canceled" in [ 149b0 73 70 6c 69 74 20 5b 24 65 20 49 6e 74 65 72 72 split [$e Interr
149c0 75 70 74 54 79 70 65 5d 20 22 2c 20 22 5d 7d 20  uptType] ", "]}
149d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
149e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
149f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
14a00 61 6b 65 20 73 75 72 65 20 74 68 65 20 5b 6f 62  ake sure the [ob
14a10 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73  ject] command is
14a20 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 69 6e   available.  Sin
14a30 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..
14a40 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20 69    #       this i
14a50 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 69 6e  s an isolated in
14a60 74 65 72 70 72 65 74 65 72 2c 20 63 68 65 63 6b  terpreter, check
14a70 20 66 6f 72 20 69 74 20 74 68 65 20 68 61 72 64   for it the hard
14a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14a90 23 20 20 20 20 20 20 20 77 61 79 2e 0d 0a 20 20  #       way...
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
14ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
14ac0 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20  {[llength [info
14ad0 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d  commands object]
14ae0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
14af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
14b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
14b10 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 74    # NOTE: Iterat
14b20 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 61  e through all da
14b30 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
14b40 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 0d  ns known to the.
14b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
14b60 20 23 20 20 20 20 20 20 20 70 61 72 65 6e 74 20   #       parent
14b70 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20  interpreter...
14b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
14b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
14ba0 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
14bb0 2d 61 6c 69 61 73 20 70 61 69 72 20 5b 6f 62 6a  -alias pair [obj
14bc0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
14bd0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
14be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14bf0 20 20 20 20 24 65 20 49 6e 74 65 72 70 72 65 74      $e Interpret 14c00 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 er.connections] 14c10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 14c20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14c30 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 14c40 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61 6e : Attempt to can 14c50 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65 72 cel any SQL quer 14c60 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 ies in progress 14c70 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 on.. 14c80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 14c90 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e is database conn 14ca0 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 ection... 14cb0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14cd0 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 if {[catch {$pai
14ce0 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20  r Value.Cancel}
14cf0 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14d10 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 14d20 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 14d30 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 dArgs \n \.. 14d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14d50 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 14d60 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61 6e G: failed to can 14d70 63 65 6c 20 71 75 65 72 79 20 66 6f 72 20 22 20 cel query for " 14d80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14d90 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 6e "conn 14da0 65 63 74 69 6f 6e 20 5c 22 22 20 5b 24 70 61 69 ection \"" [$pai
14db0 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f  r Key] "\", erro
14dc0 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20  r: " \n\t \..
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14de0 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d 0d       $error \n]. 14df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 14e00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 14e10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 14e20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 14e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 14e40 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
14e50 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
14e60 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20  gs \n \..
14e70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
14e80 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 6e 6e  == WARNING: cann
14e90 6f 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 71 75  ot cancel any qu
14ea0 65 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 20 20  eries: " \..
14eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14ec0 22 74 68 65 20 5c 22 6f 62 6a 65 63 74 5c 22 20  "the \"object\"
14ed0 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 61  command is not a
14ee0 76 61 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20 20  vailable\n"]..
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
14f00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
14f10 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 20          }}..
14f20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d      } finally {.
14f30 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68  .          catch
14f40 20 7b 75 6e 73 65 74 20 3a 3a 65 6e 76 28 71 75   {unset ::env(qu
14f50 69 65 74 53 65 74 75 70 49 6e 74 65 72 70 72 65  ietSetupInterpre
14f60 74 65 72 54 65 73 74 50 61 74 68 29 7d 0d 0a 20  terTestPath)}..
14f70 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b           catch {
14f80 75 6e 73 65 74 20 3a 3a 65 6e 76 28 71 75 69 65  unset ::env(quie
14f90 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65 72  tFindInterpreter
14fa0 54 65 73 74 50 61 74 68 29 7d 0d 0a 20 20 20 20  TestPath)}..
14fb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
14fc0 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  rror] == 0} then
14fd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   {..        addC
14fe0 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72  onstraint interr
14ff0 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69  uptCallback.sqli
15000 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  te3....        t
15010 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65  puts $channel ye 15020 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 s\n.. } els 15030 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu 15040 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
15050 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72  endArgs "no, err
15060 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 15070 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a r \n].. }.. 15080 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 15090 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b oc cleanupFile { 150a0 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 fileName {colle 150b0 63 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 ct true} {force 150c0 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 150d0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 150e0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f E: Attempt to fo 150f0 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 rce all pending 15100 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 "garbage" object 15110 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 s to be collecte 15120 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 d,.. # 15130 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 including SQLi 15140 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e te statements an 15150 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 d backup objects 15160 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c ; this should al 15170 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 low.. # 15180 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e the underlyin 15190 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 g database file 151a0 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a to be deleted... 151b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 151c0 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 f {$collect} the
151d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c  n {..        col
151e0 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74  lectGarbage $::t 151f0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 est_channel.. 15200 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 15210 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 15220 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 heck if the file 15230 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a still exists... 15240 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 15250 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 f {[file exists 15260 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
15270 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
15280 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
15290 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73  kip deleting tes
152a0 74 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62  t files if someb
152b0 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f  ody sets the glo
152c0 62 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20  bal variable..
152d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
152e0 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20   prevent it...
152f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15300 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21   if {$force || ! 15310 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 15320 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d o(cleanupFile)]} 15330 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15340 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 15350 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 15360 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 to delete the te 15370 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 st file now... 15380 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 15390 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f if {[set co 153a0 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 de [catch {file 153b0 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 delete$fileName
153c0 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20  } error]]} then
153d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
153e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
153f0 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
15400 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
15410 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f  e the file, repo
15420 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20  rt why...
15430 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15440 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 15450 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 15460 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 15470 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 15480 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 15490 6f 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 o delete test fi 154a0 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
154b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
154c0 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63      "\" during c
154d0 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22  leanup, error: "
154e0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 154f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 15500 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 15510 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 15520 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 15530 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 Show that we ski 15540 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 pped deleting th 15550 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 e file... 15560 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 15570 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 set code 0.... 15580 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
15590 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
155a0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
155b0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
155c0 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65   WARNING: skippe
155d0 64 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20  d deleting test
155e0 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa 155f0 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 15600 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c 15610 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 leanup\n"].. 15620 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 15630 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 15640 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 15650 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 : The file does 15660 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 not exist, succe 15670 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ss!.. #.. 15680 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code 15690 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 0.. }.... 156a0 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 return$cod
156b0 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
156c0 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72   proc collectGar
156d0 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  bage { channel {
156e0 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30  milliseconds 100
156f0 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20  0} {quiet true}
15700 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
15710 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
15720 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b  Command]} then {
15730 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
15740 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
15750 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
15760 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72  GC GetTotalMemor
15770 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20  y false..
15780 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d   } result] == 0}
15790 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
157a0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 157b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 157c0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
157d0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
157e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
157f0 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69    "---- memory i
15800 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52  n use by the CLR
15810 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69   before collecti
15820 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20  on... " \..
15830 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75             $resu 15840 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a lt " bytes\n"].. 15850 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 15860 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 15870 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
15880 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
15890 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
158a0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
158b0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65  NG: failed to ge
158c0 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61  t CLR memory usa
158d0 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a  ge, error: " \..
158e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e                \n
158f0 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 15900 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 15910 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 }.... #### 15920 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15930 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15940 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15960 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 23 #####.... # 15970 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 15980 52 65 70 65 61 74 65 64 6c 79 20 61 74 74 65 6d Repeatedly attem 15990 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 pt to collect ga 159a0 72 62 61 67 65 20 75 6e 74 69 6c 20 74 68 65 20 rbage until the 159b0 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62 65 72 0d allotted number. 159c0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f . # o 159d0 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 68 f milliseconds h 159e0 61 73 20 65 6c 61 70 73 65 64 2e 20 20 41 6c 77 as elapsed. Alw 159f0 61 79 73 20 61 74 74 65 6d 70 74 20 74 6f 20 63 ays attempt to c 15a00 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 0d 0a ollect garbage.. 15a10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 74 # at 15a20 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d 0a 20 20 least once... 15a30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 15a40 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 15a50 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e ctCommand]} then 15a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 15a70 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20 73 65 63 start [clock sec 15a80 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20 20 73 onds].. s 15a90 65 74 20 73 74 6f 70 20 5b 65 78 70 72 20 7b 24 et stop [expr {$
15aa0 73 74 61 72 74 20 2b 20 28 24 6d 69 6c 6c 69 73  start + ($millis 15ab0 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 29 7d 5d econds / 1000)}] 15ac0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64 6f 20 7b .... do { 15ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 15ae0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 15af0 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 Attempt to forc 15b00 65 20 61 20 66 75 6c 6c 20 67 61 72 62 61 67 65 e a full garbage 15b10 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e collection now. 15b20 20 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20 Report any.. 15b30 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 15b40 65 72 72 6f 72 20 74 68 61 74 20 69 73 20 65 6e error that is en 15b50 63 6f 75 6e 74 65 72 65 64 20 69 66 20 77 65 20 countered if we 15b60 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 20 fail... 15b70 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 15b80 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 15b90 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 15ba0 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 nvoke GC GetTota 15bb0 6c 4d 65 6d 6f 72 79 20 74 72 75 65 0d 0a 20 20 lMemory true.. 15bc0 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d } error] 15bd0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 15be0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
15bf0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
15c00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
15c10 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
15c20 47 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 67  G: failed full g
15c30 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f  arbage collectio
15c40 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20  n, error: " \..
15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
15c60 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 15c70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 15c80 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 77 set now 15c90 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d [clock seconds] 15ca0 0d 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c .. } whil 15cb0 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e 6f e {$start <= $no 15cc0 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74 6f w &&$now < $sto 15cd0 70 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 p}.. }.... 15ce0 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 ########### 15cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15d00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15d10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15d20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a ##############.. 15d30 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 15d40 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 15d50 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mand]} then {.. 15d60 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 15d70 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o 15d80 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 bject invoke GC 15d90 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 GetTotalMemory f 15da0 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 alse.. } 15db0 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 15dc0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 15dd0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
15de0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
15df0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 15e00 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 15e20 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 ---- memory in u 15e30 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 61 66 se by the CLR af 15e40 74 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e ter collection.. 15e50 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 . " \.. 15e60 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 22$result "
15e70 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20   bytes\n"]..
15e80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
15e90 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
15ea0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 15eb0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 15ec0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 15ed0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 15ee0 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c failed to get CL 15ef0 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 R memory usage, 15f00 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 error: " \.. 15f10 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 \n\t$
15f20 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
15f30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
15f40 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
15f50 6f 63 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64  oc getSQLiteHand
15f60 6c 65 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e 6e  leCounts { chann
15f70 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d  el {quiet false}
15f80 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
15f90 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d  result [list]...
15fa0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
15fb0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
15fc0 61 6e 64 5d 20 26 26 20 5b 68 61 76 65 43 6f 6e  and] && [haveCon
15fd0 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20  straint \..
15fe0 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43           defineC
15ff0 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44  onstant.System.D
16000 61 74 61 2e 53 51 4c 69 74 65 2e 43 4f 55 4e 54  ata.SQLite.COUNT
16010 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 7b  _HANDLE]} then {
16020 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
16030 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64       # NOTE: Add
16040 20 65 61 63 68 20 63 72 69 74 69 63 61 6c 20 68   each critical h
16050 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20 74  andle count to t
16060 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 69 73  he resulting lis
16070 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
16080 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e         foreach n
16090 61 6d 65 20 5b 6c 69 73 74 20 63 6f 6e 6e 65 63  ame [list connec
160a0 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65 6d  tionCount statem
160b0 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 70 43  entCount backupC
160c0 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ount] {..
160d0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
160e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
160f0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
16100 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
16110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16120 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
16130 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
16140 65 74 68 6f 64 73 20 24 6e 61 6d 65 0d 0a 20 20  ethods $name.. 16150 20 20 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d } value] 16160 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 16170 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 16180 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
16190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
161a0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 161b0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 161c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 161d0 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e --- critical han 161e0 64 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20 24 6e dle count \""$n
161f0 61 6d 65 20 22 5c 22 20 69 73 20 22 20 24 76 61  ame "\" is " $va 16200 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 lue \n].. 16210 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 16220 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 lappend re 16230 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 sult$value..
16240 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
16250 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
16260 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 16270 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 16280 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 16290 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 162a0 20 74 6f 20 67 65 74 20 63 72 69 74 69 63 61 6c to get critical 162b0 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 handle count \" 162c0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 162d0 20 20 20 20 20 24 6e 61 6d 65 20 22 5c 22 2c 20$name "\",
162e0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 76  error: " \n\t $v 162f0 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 alue \n].. 16300 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 16310 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif 16320 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
16330 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
16340 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
16350 65 20 61 63 74 75 61 6c 20 68 61 6e 64 6c 65 20  e actual handle
16360 63 6f 75 6e 74 73 20 61 72 65 20 6e 6f 74 20 61  counts are not a
16370 76 61 69 6c 61 62 6c 65 3b 20 74 68 65 72 65 66  vailable; theref
16380 6f 72 65 2c 20 6a 75 73 74 0d 0a 20 20 20 20 20  ore, just..
16390 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72     #       retur
163a0 6e 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74 2e  n an empty list.
163b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
163c0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 163d0 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 nel "---- critic 163e0 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 al handle counts 163f0 20 75 6e 61 76 61 69 6c 61 62 6c 65 5c 6e 22 0d unavailable\n". 16400 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 16410 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
16420 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
16430 70 72 6f 63 20 73 68 75 74 64 6f 77 6e 53 51 4c  proc shutdownSQL
16440 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 66  ite { channel {f
16450 6f 72 63 65 20 66 61 6c 73 65 7d 20 7b 71 75 69  orce false} {qui
16460 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  et false} } {..
16470 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
16480 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20  NOTE: Make sure
16490 74 68 61 74 20 53 51 4c 69 74 65 20 63 6f 72 65  that SQLite core
164a0 20 6c 69 62 72 61 72 79 20 69 73 20 63 6f 6d 70   library is comp
164b0 6c 65 74 65 6c 79 20 73 68 75 74 64 6f 77 6e 2e  letely shutdown.
164c0 20 20 54 68 69 73 0d 0a 20 20 20 20 20 20 23 20    This..      #
164d0 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62 79        is used by
164e0 20 74 65 73 74 73 20 74 68 61 74 20 63 68 61 6e   tests that chan
164f0 67 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ge configuration
16500 20 6f 70 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20   options and/or
16510 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 23 20 20  those..      #
16520 20 20 20 20 20 74 68 61 74 20 6e 65 65 64 20 74       that need t
16530 6f 20 6d 61 6b 65 20 73 75 72 65 20 6c 6f 67 67  o make sure logg
16540 69 6e 67 20 69 73 20 69 6e 69 74 69 61 6c 69 7a  ing is initializ
16550 65 64 20 28 69 2e 65 2e 20 6a 75 73 74 20 69 6e  ed (i.e. just in
16560 20 63 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20   case..      #
16570 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 20       the SQLite
16580 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 73  core library was
16590 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e 20   initialized in
165a0 74 68 65 20 70 72 6f 63 65 73 73 20 70 72 69 6f  the process prio
165b0 72 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20  r to..      #
165c0 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 4c 6f      the SQLiteLo
165d0 67 20 63 6c 61 73 73 20 62 65 69 6e 67 20 61 62  g class being ab
165e0 6c 65 20 74 6f 20 73 65 74 75 70 20 69 74 73 20  le to setup its
165f0 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
16600 29 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  )...      #
16610 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73    Normally, this
16620 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65 20   should only be
16630 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c  performed if SQL
16640 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e  ite is loaded an
16650 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
16660 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62   ready for use b
16670 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  y the test suite
16680 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
16690 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20    if {$force || 166a0 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d [isSQLiteReady]} 166b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 166c0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55 #.. # BU 166d0 47 46 49 58 3a 20 4d 61 6b 65 20 73 75 72 65 20 GFIX: Make sure 166e0 74 68 61 74 20 61 6e 79 20 22 6c 65 61 6b 65 64 that any "leaked 166f0 22 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 " transactions a 16700 6e 64 2f 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e nd/or connection 16710 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 16720 20 20 20 20 20 61 72 65 20 63 6c 65 61 6e 65 64 are cleaned 16730 20 75 70 20 62 65 66 6f 72 65 20 63 61 6c 6c 69 up before calli 16740 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 68 ng the native sh 16750 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2e utdown function. 16760 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 16770 20 20 20 20 20 66 6f 72 65 61 63 68 20 74 72 61 foreach tra 16780 6e 73 61 63 74 69 6f 6e 20 5b 69 6e 66 6f 20 74 nsaction [info t 16790 72 61 6e 73 61 63 74 69 6f 6e 73 5d 20 7b 0d 0a ransactions] {.. 167a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 167b0 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a 20 tring match \.. 167c0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 167d0 74 65 6d 23 44 61 74 61 23 53 51 4c 69 74 65 23 tem#Data#SQLite# 167e0 53 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f SQLiteTransactio 167f0 6e 23 2a 20 24 74 72 61 6e 73 61 63 74 69 6f 6e n#*$transaction
16800 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
16810 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
16820 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
16830 20 20 20 73 71 6c 20 74 72 61 6e 73 61 63 74 69     sql transacti
16840 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 24 74 72 61  on rollback $tra 16850 6e 73 61 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 nsaction.. 16860 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d } error] = 16870 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 16880 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 16890 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
168a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
168b0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 168c0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 168d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 168e0 20 20 22 2d 2d 2d 2d 20 72 6f 6c 6c 65 64 20 62 "---- rolled b 168f0 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 61 6e 73 ack leaked trans 16900 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 action \"" \.. 16910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16920 20 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c$transaction \
16930 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
16940 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
16950 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
16960 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
16970 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 16980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16990 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
169a0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
169b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
169c0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
169d0 20 66 61 69 6c 65 64 20 74 6f 20 72 6f 6c 6c 62   failed to rollb
169e0 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 61 6e 73  ack leaked trans
169f0 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20  action \"" \..
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16a10 20 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 20 22    $transaction " 16a20 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c \", error: " \n\ 16a30 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
16a40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
16a50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
16a60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
16a70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
16a80 66 6f 72 65 61 63 68 20 64 62 20 5b 69 6e 66 6f  foreach db [info
16a90 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b 0d   connections] {.
16aa0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
16ab0 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a  string match \..
16ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
16ad0 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69 74 65  stem#Data#SQLite
16ae0 23 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  #SQLiteConnectio
16af0 6e 23 2a 20 24 64 62 5d 7d 20 74 68 65 6e 20 7b  n#* $db]} then { 16b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 16b10 20 7b 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 6c {[catch {sql cl 16b20 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d 20 ose$db} error]
16b30 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
16b40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
16b50 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 16b60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16b70 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
16b80 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
16b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16ba0 20 20 20 22 2d 2d 2d 2d 20 63 6c 6f 73 65 64 20     "---- closed
16bb0 6c 65 61 6b 65 64 20 64 61 74 61 62 61 73 65 20  leaked database
16bc0 5c 22 22 20 24 64 62 20 5c 22 5c 6e 5d 0d 0a 20  \"" $db \"\n].. 16bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 16be0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 16bf0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 16c00 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
16c10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
16c20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $16c30 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 16c40 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 16c50 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 16c60 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 16c70 20 74 6f 20 63 6c 6f 73 65 20 6c 65 61 6b 65 64 to close leaked 16c80 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c 0d database \"" \. 16c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16ca0 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65 72$db "\", er
16cb0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 16cc0 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 16cd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 16ce0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 16cf0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 16d00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 16d10 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 # BUGFIX: B 16d20 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 efore calling th 16d30 65 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77 e native shutdow 16d40 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65 n function, make 16d50 20 73 75 72 65 20 62 6f 74 68 0d 0a 20 20 20 20 sure both.. 16d60 20 20 20 20 23 20 20 20 20 20 20 20 20 20 6f 66 # of 16d70 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61 the PRAGMA rela 16d80 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61 ted directory na 16d90 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a mes are freed... 16da0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 16db0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 16dc0 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 63 68 eDirectories$ch
16dd0 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20  annel true....
16de0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
16df0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
16e00 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
16e10 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
16e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
16e30 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
16e40 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
16e50 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 73 68  thods sqlite3_sh
16e60 75 74 64 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20  utdown..
16e70 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20  } result] == 0}
16e80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16e90 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 16ea0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 16eb0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
16ec0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
16ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
16ee0 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69   "---- call sqli
16ef0 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e  te3_shutdown()..
16f00 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20  . ok: " $result 16f10 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 16f20 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 16f30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 16f40 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
16f50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
16f60 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 16f70 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 16f90 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f -- call sqlite3_ 16fa0 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 65 72 shutdown()... er 16fb0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 ror: " \n\t$res
16fc0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
16fd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
16fe0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
16ff0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70  ....    proc rep
17000 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63  ortSQLiteResourc
17010 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
17020 20 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74    channel {quiet
17030 20 66 61 6c 73 65 7d 20 7b 72 65 73 65 74 20 74   false} {reset t
17040 72 75 65 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72  rue} {collect tr
17050 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ue} } {..      #
17060 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
17070 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65  If available, re
17080 70 6f 72 74 20 6f 6e 20 28 61 6e 64 20 70 6f 73  port on (and pos
17090 73 69 62 6c 79 20 72 65 73 65 74 29 20 74 68 65  sibly reset) the
170a0 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20   runtime..
170b0 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72  #       configur
170c0 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 73  ation statistics
170d0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
170e0 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74    if {[haveSQLit
170f0 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20  eObjectCommand]
17100 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
17110 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
17120 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69  buildConfigurati
17130 6f 6e 2e 44 65 62 75 67 5d 20 26 26 20 5b 63 61  on.Debug] && [ca
17140 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
17150 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
17160 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d  ags +NonPublic -
17170 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20  alias \..
17180 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
17190 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
171a0 74 69 76 65 4d 65 74 68 6f 64 73 20 73 65 74 74  tiveMethods sett
171b0 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 0d 0a 20  ingReadCounts..
171c0 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52 65       } settingRe
171d0 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20  adCounts] == 0}
171e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
171f0 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24  set nameCount [$17200 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 settingReadCount 17210 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 s Count].. 17220 20 20 73 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 set valueCount 17230 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 0.... ob 17240 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c ject foreach -al 17250 69 61 73 20 70 61 69 72 20 24 73 65 74 74 69 6e ias pair$settin
17260 67 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20  gReadCounts {..
17270 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61           incr va
17280 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20  lueCount [$pair 17290 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 Value].... 172a0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
172b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
172c0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 172d0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 172e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 172f0 20 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 "---- setting 17300 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d \"" [$pair Key]
17310 20 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 20   "\" was read "
17320 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
17330 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d     [$pair Value] 17340 20 22 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20 20 " times\n"].. 17350 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 17360 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 17370 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e if {$reset} then
17380 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
17390 20 7b 5b 63 61 74 63 68 20 7b 24 73 65 74 74 69   {[catch {$setti 173a0 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6c 65 ngReadCounts Cle 173b0 61 72 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d ar} error] == 0} 173c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 173d0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
173e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
173f0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 17400 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 17410 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 17420 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 "---- re 17430 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 set setting stat 17440 69 73 74 69 63 73 20 66 6f 72 20 74 68 65 20 70 istics for the p 17450 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 revious " \.. 17460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
17470 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65  nameCount " name
17480 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f  s and " $valueCo 17490 75 6e 74 20 22 20 76 61 6c 75 65 73 20 72 65 61 unt " values rea 174a0 64 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 d\n"].. 174b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 174c0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 174d0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
174e0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
174f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17500 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
17510 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73  G: failed to res
17520 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69  et setting stati
17530 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20  stics for " \..
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17550 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 24  the previous " $17560 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 nameCount " name 17570 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f s and "$valueCo
17580 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  unt \..
17590 20 20 20 20 20 20 20 22 20 76 61 6c 75 65 73 20         " values
175a0 72 65 61 64 2c 20 65 72 72 6f 72 3a 20 22 20 5c  read, error: " \
175b0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 175c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 175d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 175e0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 ... if {[ha 175f0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo 17600 6d 6d 61 6e 64 5d 20 26 26 20 5b 68 61 76 65 43 mmand] && [haveC 17610 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 onstraint \.. 17620 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e defin 17630 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d eConstant.System 17640 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 .Data.SQLite.INT 17650 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 EROP_VIRTUAL_TAB 17660 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 LE] && \.. 17670 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 [haveConstra 17680 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 int \.. 17690 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 defineConst 176a0 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e ant.System.Data. 176b0 53 51 4c 69 74 65 2e 54 52 41 43 4b 5f 4d 45 4d SQLite.TRACK_MEM 176c0 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 68 65 6e ORY_BYTES]} then 176d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 176e0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
176f0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
17700 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 17710 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 current memory i 17720 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d n use by SQLiteM 17730 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 emory... ".. 17740 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 17750 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 17760 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 17770 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 17780 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 17790 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 177a0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 177b0 69 74 65 4d 65 6d 6f 72 79 20 62 79 74 65 73 41 iteMemory bytesA 177c0 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 20 llocated.. 177d0 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 } memory] == 0 177e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 177f0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
17800 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
17810 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 17820 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 17830 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c$memory " bytes\
17840 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
17850 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
17860 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
17870 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
17880 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
17890 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 178a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 178b0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
178c0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 178d0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 178e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 178f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
17900 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
17910 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 17920 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 hannel "---- max 17930 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 imum memory in u 17940 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f se by SQLiteMemo 17950 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 ry... ".. 17960 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 17970 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 17980 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 17990 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 179a0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 179b0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 179c0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 179d0 4d 65 6d 6f 72 79 20 6d 61 78 69 6d 75 6d 42 79 Memory maximumBy 179e0 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 tesAllocated.. 179f0 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 } memory] 17a00 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 17a10 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
17a20 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
17a30 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $17a40 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 17a50 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 rgs$memory " by
17a60 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  tes\n"]..
17a70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
17a80 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
17a90 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b    set memory unk
17aa0 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nown....
17ab0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 17ac0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 17ad0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
17ae0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 17af0 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 emory \n].. 17b00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 17b10 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 17b20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
17b30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
17b40 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 17b50 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 "---- current me 17b60 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 mory in use by S 17b70 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 QLite... ".. 17b80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 17b90 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 17ba0 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e ctCommand]} then 17bb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 17bc0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 17bd0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 17be0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 17bf0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 17c00 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 17c10 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 .SQLite.UnsafeNa 17c20 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 tiveMethods sqli 17c30 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 0d te3_memory_used. 17c40 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 . } memor 17c50 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d y] == 0} then {. 17c60 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 17c70 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
17c80 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
17c90 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 17ca0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 ndArgs$memory "
17cb0 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20   bytes\n"]..
17cc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
17cd0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
17ce0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
17cf0 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20    # NOTE: Maybe
17d00 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
17d10 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61  library is unava
17d20 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20  ilable?..
17d30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
17d40 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f  set memory unkno
17d50 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  wn....
17d60 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 17d70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 17d80 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
17d90 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 17da0 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 17db0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 17dc0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 17dd0 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d . set mem 17de0 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d ory unavailable. 17df0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 17e00 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
17e10 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
17e20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 17e30 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
17e40 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
17e50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65     }....      se
17e60 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79  t result $memory 17e70 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e ; # NOTE: Return 17e80 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74 memory in-use t 17e90 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d o our caller.... 17ea0 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 . if {!$qui
17eb0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
17ec0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 17ed0 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d el "---- maximum 17ee0 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 memory in use b 17ef0 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 y SQLite... ".. 17f00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 17f10 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f if {[haveSQLiteO 17f20 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 bjectCommand]} t 17f30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 17f40 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 17f50 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 17f60 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 17f70 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 17f80 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 17f90 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 ata.SQLite.Unsaf 17fa0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c eNativeMethods \ 17fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17fc0 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 sqlite3_memory_h 17fd0 69 67 68 77 61 74 65 72 20 30 0d 0a 20 20 20 20 ighwater 0.. 17fe0 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d } memory] == 17ff0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 18000 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
18010 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
18020 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 18030 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 18040 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 s$memory " byte
18050 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  s\n"]..
18060 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
18070 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
18080 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
18090 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53  OTE: Maybe the S
180a0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
180b0 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  ry is unavailabl
180c0 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  e?..          #.
180d0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d  .          set m
180e0 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d  emory unknown...
180f0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
18100 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 18110 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 18120 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
18130 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c  ndArgs $memory \ 18140 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 18150 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 18160 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 18170 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 18180 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 navailable.... 18190 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
181a0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
181b0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 181c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 181d0 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20$memory \n]..
181e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
181f0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f  ...      if {$co 18200 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 llect} then {.. 18210 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 collectGa 18220 72 62 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a rbage$channel..
18230 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
18240 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 18250 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp 18260 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d uts$channel "--
18270 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72  -- current memor
18280 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20  y in use by the
18290 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20  CLR... "..
182a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
182b0 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
182c0 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b  Command]} then {
182d0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
182e0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
182f0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
18300 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72  GC GetTotalMemor
18310 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20  y false..
18320 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d   } memory] == 0}
18330 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18340 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69     if {[string i
18350 73 20 69 6e 74 65 67 65 72 20 2d 73 74 72 69 63  s integer -stric
18360 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 6e  t $memory]} then 18370 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 18380 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
18390 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
183a0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 183b0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
183c0 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
183d0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
183e0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
183f0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
18400 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 69 6e 76    set memory inv
18410 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20  alid....
18420 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 18430 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 18440 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
18450 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
18460 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20  s $memory \n].. 18470 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 18480 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 18490 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 184a0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 184b0 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 y unknown.... 184c0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
184d0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
184e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 184f0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 18500 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
18510 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
18520 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
18530 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
18540 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61  set memory unava
18550 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20  ilable....
18560 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 18570 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 18580 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
18590 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 185a0 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 185b0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 185c0 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
185d0 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ult..    }.....
185e0 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72     proc checkFor
185f0 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65  SQLiteDirectorie
18600 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 65 73  s { channel {res
18610 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  et false} } {..
18620 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
18630 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
18640 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  he sqlite3_win32
18650 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66  _set_directory f
18660 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c  unction is avail
18670 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  able...      #..
18680 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 18690 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 186a0 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 "---- checking 186b0 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 73 71 for function sq 186c0 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ 186d0 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a directory... ".. 186e0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 186f0 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 61 # NOTE: This ca 18700 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 ll to the sqlite 18710 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 18720 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 75 ctory function u 18730 73 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23 ses the.. # 18740 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 20 76 invalid v 18750 61 6c 75 65 20 30 20 66 6f 72 20 74 68 65 20 66 alue 0 for the f 18760 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 20 20 irst argument. 18770 54 68 69 73 20 63 6f 64 65 20 69 73 20 64 65 73 This code is des 18780 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 20 igned.. # 18790 20 20 20 20 20 74 6f 20 63 68 65 63 6b 20 69 66 to check if 187a0 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e calling the fun 187b0 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 69 73 65 ction will raise 187c0 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 28 69 an exception (i 187d0 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 .e... # 187e0 20 20 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 the actual re 187f0 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 sult of the func 18800 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 6d 61 tion does not ma 18810 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 61 73 20 tter as long as 18820 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 no.. # 18830 20 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 directory is c 18840 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 20 20 20 hanged)... 18850 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 #.. if {[ca 18860 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f tch {.. o 18870 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 18880 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 18890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 .. Sy 188a0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 188b0 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 .UnsafeNativeMet 188c0 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 hods \.. 188d0 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 sqlite3_win3 188e0 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 188f0 30 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 5d 0 null.. }] 18900 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 18910 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18920 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c 6c 69 6e # NOTE: Callin 18930 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 g the sqlite3_wi 18940 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 18950 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 y function does 18960 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 not.. # 18970 20 20 20 20 20 63 61 75 73 65 20 61 6e 20 65 78 cause an ex 18980 63 65 70 74 69 6f 6e 3b 20 74 68 65 72 65 66 6f ception; therefo 18990 72 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 61 re, it must be a 189a0 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 0d 0a vailable (i.e... 189b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 189c0 65 76 65 6e 20 74 68 6f 75 67 68 20 69 74 20 73 even though it s 189d0 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 61 20 66 hould return a f 189e0 61 69 6c 75 72 65 20 72 65 74 75 72 6e 20 63 6f ailure return co 189f0 64 65 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 de in this.. 18a00 20 20 20 20 23 20 20 20 20 20 20 20 63 61 73 65 # case 18a10 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 18a20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 18a30 61 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 69 6e aint sqlite3_win 18a40 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 18a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 .... tput 18a60 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e s$channel yes\n
18a70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
18a80 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44         # NOTE: D
18a90 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77  oes our caller w
18aa0 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 65  ant to reset the
18ab0 20 64 69 72 65 63 74 6f 72 69 65 73 3f 0d 0a 20   directories?..
18ac0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
18ad0 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68    if {$reset} th 18ae0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 18af0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 18b00 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 75 OTE: Now make su 18b10 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 re the database 18b20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 and temporary di 18b30 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a 20 rectories are.. 18b40 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 18b50 20 72 65 73 65 74 20 74 68 65 69 72 20 64 65 66 reset their def 18b60 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 ault values, whi 18b70 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c ch should be nul 18b80 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 l for both... 18b90 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 # S 18ba0 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 33 ince the sqlite3 18bb0 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 _win32_set_direc 18bc0 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 tory function is 18bd0 20 61 76 61 69 6c 61 62 6c 65 2c 0d 0a 20 20 20 available,.. 18be0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 # u 18bf0 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 se it... 18c00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 66 #.. f 18c10 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d or {set index 1} 18c20 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20 7b 69 {$index < 3} {i
18c30 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20  ncr index} {..
18c40 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
18c50 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
18c60 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
18c70 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
18c80 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
18c90 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
18ca0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
18cb0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
18cc0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
18cd0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77         sqlite3_w
18ce0 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
18cf0 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 0d 0a  ry $index null.. 18d00 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 72 65 } re 18d10 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 18d20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 18d30 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
18d40 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18d60 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c    "---- call sql
18d70 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
18d80 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65  irectory(" $inde 18d90 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x \.. 18da0 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e ", null). 18db0 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 .. ok: "$result
18dc0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
18dd0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
18de0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
18df0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 18e00 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 18e10 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 18e20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e call sqlite3_win 18e30 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 18e40 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 ("$index \..
18e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
18e60 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72  , null)... error
18e70 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74  : " \n\t $result 18e80 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 18e90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 18ea0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 18eb0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 18ec0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
18ed0 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20  nel no\n....
18ee0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
18ef0 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20   NOTE: Does our
18f00 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72  caller want to r
18f10 65 73 65 74 20 74 68 65 20 64 69 72 65 63 74 6f  eset the directo
18f20 72 69 65 73 3f 20 20 54 68 69 73 20 63 61 6e 20  ries?  This can
18f30 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20  only..        #
18f40 20 20 20 20 20 20 62 65 20 70 65 72 66 6f 72 6d        be perform
18f50 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73 20  ed if SQLite is
18f60 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 61 64 79  loaded and ready
18f70 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the
18f80 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  test..        #
18f90 20 20 20 20 20 20 73 75 69 74 65 2e 0d 0a 20 20        suite...
18fa0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
18fb0 20 69 66 20 7b 24 72 65 73 65 74 20 26 26 20 5b   if {$reset && [ 18fc0 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 isSQLiteReady]} 18fd0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 18fe0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 18ff0 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 NOTE: Now make 19000 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 sure the databas 19010 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 e and temporary 19020 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d directories are. 19030 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 19040 20 20 20 72 65 73 65 74 20 74 68 65 69 72 20 64 reset their d 19050 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 efault values, w 19060 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e hich should be n 19070 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 ull for both... 19080 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 19090 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 Since the sqlit 190a0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 190b0 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 ectory function 190c0 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 does not.. 190d0 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70 65 # appe 190e0 61 72 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 ar to be availab 190f0 6c 65 2c 20 75 73 65 20 74 68 65 20 61 73 73 6f le, use the asso 19100 63 69 61 74 65 64 20 50 52 41 47 4d 41 20 63 6f ciated PRAGMA co 19110 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20 20 20 20 mmands.. 19120 20 20 23 20 20 20 20 20 20 20 69 6e 73 74 65 61 # instea 19130 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d d... #. 19140 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 . forea 19150 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 ch directory [li 19160 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 st data_store_di 19170 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f rectory temp_sto 19180 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d re_directory] {. 19190 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set 191a0 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 sql [appendArgs 191b0 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 "PRAGMA "$dire
191c0 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c 22 3b 22  ctory " = \"\";"
191d0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
191e0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65   if {[catch {exe
191f0 63 75 74 65 53 71 6c 20 24 73 71 6c 7d 20 72 65  cuteSql $sql} re 19200 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 19210 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19220 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
19230 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
19240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19250 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20    "---- execute
19260 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 74  PRAGMA " $direct 19270 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 ory "... ok: \"" 19280 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19290 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 5c 22$result \"
192a0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
192b0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
192c0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $192d0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 192e0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 192f0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 "---- e 19300 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 xecute PRAGMA " 19310 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20$directory "...
19320 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20  error: " \..
19330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e                \n
19340 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 19350 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 19360 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 19370 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 19380 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 19390 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 # NOTE: Finally 193a0 2c 20 73 68 6f 77 20 74 68 65 20 63 75 72 72 65 , show the curre 193b0 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 nt value of the 193c0 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d database and tem 193d0 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 porary.. # 193e0 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 69 65 directorie 193f0 73 2e 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c s. This can onl 19400 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 y be performed i 19410 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 f SQLite is load 19420 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # 19430 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 and ready for 19440 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 use by the test 19450 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d suite... #. 19460 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 53 51 . if {[isSQ 19470 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e LiteReady]} then 19480 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 {.. fore 19490 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c ach directory [l 194a0 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 ist data_store_d 194b0 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 irectory temp_st 194c0 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b ore_directory] { 194d0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 194e0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
194f0 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65  ndArgs "---- che
19500 63 6b 69 6e 67 20 22 20 24 64 69 72 65 63 74 6f  cking " $directo 19510 72 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 ry "... "].... 19520 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 set sql 19530 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 [appendArgs "PRA 19540 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 GMA "$directory
19550 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   \;]....
19560 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78    if {[catch {ex
19570 65 63 75 74 65 53 71 6c 20 24 73 71 6c 20 73 63  ecuteSql $sql sc 19580 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d alar} result] == 19590 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 195a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
195b0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
195c0 67 73 20 22 6f 6b 3a 20 5c 22 22 20 24 72 65 73  gs "ok: \"" $res 195d0 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ult \"\n].. 195e0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 195f0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 19600 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
19610 64 41 72 67 73 20 22 65 72 72 6f 72 3a 20 22 20  dArgs "error: "
19620 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d  \n\t $result \n] 19630 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 19640 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 19650 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 19660 20 70 72 6f 63 20 6c 6f 61 64 53 51 4c 69 74 65 proc loadSQLite 19670 54 65 73 74 53 65 74 74 69 6e 67 73 20 7b 20 63 TestSettings { c 19680 68 61 6e 6e 65 6c 20 7b 73 75 66 66 69 78 20 22 hannel {suffix " 19690 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d "} {quiet false} 196a0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 196b0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 196c0 70 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 73 65 p loading the se 196d0 74 74 69 6e 67 73 20 69 66 20 74 68 65 69 72 20 ttings if their 196e0 75 73 61 67 65 20 68 61 73 20 62 65 65 6e 20 64 usage has been d 196f0 69 73 61 62 6c 65 64 2e 0d 0a 20 20 20 20 20 20 isabled... 19700 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 #.. if {![i 19710 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 19720 73 71 6c 69 74 65 54 65 73 74 53 65 74 74 69 6e sqliteTestSettin 19730 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 gs)]} then {.. 19740 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 19750 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 # NOTE: Load cu 19760 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e stom per-user an 19770 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 d/or per-host te 19780 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e st settings now. 19790 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 197a0 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 197b0 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 xists ::tcl_plat 197c0 66 6f 72 6d 28 75 73 65 72 29 5d 7d 20 74 68 65 form(user)]} the 197d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 197e0 65 74 20 75 73 65 72 53 65 74 74 69 6e 67 73 46 et userSettingsF 197f0 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ileName [file jo 19800 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 in [getCommonDir 19810 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 ectory] \.. 19820 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 [append 19830 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 Args settings$s
19840 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70  uffix . $::tcl_p 19850 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 20 2e 65 latform(user) .e 19860 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 agle]].... 19870 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 19880 69 73 74 73 20 24 75 73 65 72 53 65 74 74 69 6e ists$userSettin
19890 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65  gsFileName]} the
198a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
198b0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 198c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 198d0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
198e0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
198f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19900 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e      "---- loadin
19910 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20  g per-user test
19920 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
19930 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
19940 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74         $userSett 19950 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e ingsFileName \". 19960 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ..\n].. 19970 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 19980 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 19990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 199a0 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list 199b0 73 6f 75 72 63 65 20 24 75 73 65 72 53 65 74 74 source$userSett
199c0 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20  ingsFileName]..
199d0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72             } err
199e0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
199f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
19a00 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 19a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19a20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
19a30 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19a50 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
19a60 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20   failed to load
19a70 70 65 72 2d 75 73 65 72 20 73 65 74 74 69 6e 67  per-user setting
19a80 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20  s file \"" \..
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19aa0 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46    $userSettingsF 19ab0 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 ileName "\", err 19ac0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
19ad0 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
19ae0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
19af0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
19b00 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
19b10 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 19b20 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 19b30 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 19b40 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
19b50 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
19b60 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
19b70 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20  skipped loading
19b80 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65  per-user test se
19b90 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20  ttings file \""
19ba0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
19bb0 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e       $userSettin 19bc0 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 gsFileName "\", 19bd0 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 19be0 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 t\n"].. 19bf0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 19c00 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 19c10 20 20 20 20 20 20 20 20 23 23 23 23 23 23 23 23 ######## 19c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 19c30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 19c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 19c50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d ###############. 19c60 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 19c70 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 info exists ::tc 19c80 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 l_platform(host) 19c90 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 19ca0 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 65 74 set hostSet 19cb0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 tingsFileName [f 19cc0 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d ile join [getCom 19cd0 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d monDirectory] \. 19ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 19cf0 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 69 appendArgs setti 19d00 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a ngs$suffix . $: 19d10 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f :tcl_platform(ho 19d20 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a st) .eagle]].... 19d30 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 if {[f 19d40 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f 73 74 ile exists$host
19d50 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
19d60 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
19d70 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 19d80 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 19d90 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 19da0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
19db0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
19dc0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
19dd0 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74  loading per-host
19de0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66   test settings f
19df0 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ile \"" \..
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f               $ho 19e10 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 stSettingsFileNa 19e20 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 me \"...\n].. 19e30 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 19e40 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 19e50 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 19e60 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 uplevel 1 19e70 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 68 6f [list source$ho
19e80 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  stSettingsFileNa
19e90 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me]..
19ea0 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20   } error]} then
19eb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
19ec0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 19ed0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19ee0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
19ef0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
19f00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
19f10 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
19f20 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
19f30 20 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74 20 73   load per-host s
19f40 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
19f50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
19f60 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74          $hostSet 19f70 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c tingsFileName "\ 19f80 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 19f90 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
19fa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
19fb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
19fc0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
19fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
19fe0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 19ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1a000 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1a010 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1a020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a030 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f  "---- skipped lo
1a040 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74  ading per-host t
1a050 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c  est settings fil
1a060 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
1a070 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74             $host 1a080 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName 1a090 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f "\", it does no 1a0a0 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 t exist\n"].. 1a0b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1a0c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1a0d0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. }.. 1a0e0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1a0f0 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72 6f runSQLiteTestPro 1a100 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 logue {} {.. 1a110 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1a120 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 E: Skip running 1a130 6f 75 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c 6f our custom prolo 1a140 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 gue if the main 1a150 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 one has been.. 1a160 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 # skip 1a170 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ped... #.. 1a180 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 1a190 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c exists ::no(prol 1a1a0 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 ogue.eagle)]} th 1a1b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 1a1c0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1a1d0 20 4c 6f 61 64 20 74 68 65 20 22 62 65 66 6f 72 Load the "befor 1a1e0 65 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 e-constraints" c 1a1f0 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 ustom per-user a 1a200 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a nd/or per-host.. 1a210 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1a220 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f test settings no 1a230 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 w... #.. 1a240 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 uplevel 1 1a250 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 [list loadSQLit 1a260 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a eTestSettings$:
1a270 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 62  :test_channel .b
1a280 65 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  efore]....
1a290 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1a2a0 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
1a2b0 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61  e [object] comma
1a2c0 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c 65 3b  nd is available;
1a2d0 20 69 66 20 6e 6f 74 2c 20 61 64 64 20 73 6f 6d   if not, add som
1a2e0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
1a2f0 20 20 20 73 68 69 6d 73 20 74 6f 20 6d 61 6b 65     shims to make
1a300 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20   the test suite
1a310 72 75 6e 20 73 6d 6f 6f 74 68 65 72 2e 0d 0a 20  run smoother...
1a320 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1a330 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
1a340 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 24 3a  ObjectCommand $: 1a350 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d :test_channel... 1a360 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1a370 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 # NOTE: Dete 1a380 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 73 20 rmine the names 1a390 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 70 6c of the native pl 1a3a0 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69 atform and archi 1a3b0 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 tecture... 1a3c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 1a3d0 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 75 platform [getBu 1a3e0 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 75 65 ildPlatform true 1a3f0 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 ].. set a 1a400 72 63 68 69 74 65 63 74 75 72 65 20 5b 61 72 63 rchitecture [arc 1a410 68 69 74 65 63 74 75 72 65 46 6f 72 50 6c 61 74 hitectureForPlat 1a420 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 0d form$platform].
1a430 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1a440 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68        # NOTE: Sh
1a450 6f 77 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  ow the platform
1a460 61 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 65  and architecture
1a470 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 6c 6f   used to help lo
1a480 63 61 74 65 20 74 68 65 0d 0a 20 20 20 20 20 20  cate the..
1a490 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76 65    #       native
1a4a0 20 62 75 69 6c 64 20 66 69 6c 65 73 2e 0d 0a 20   build files...
1a4b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1a4c0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1a4d0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1a4e0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1a4f0 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 6f 72 "---- platfor 1a500 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e m for locating n 1a510 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 ative build file 1a520 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 s is \"" \.. 1a530 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72$platfor
1a540 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  m \"\n]....
1a550 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1a560 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1a570 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1a580 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63 68 69 74 "---- archit 1a590 65 63 74 75 72 65 20 66 6f 72 20 6c 6f 63 61 74 ecture for locat 1a5a0 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 6c 64 ing native build 1a5b0 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d files is \"" \. 1a5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72 .$ar
1a5d0 63 68 69 74 65 63 74 75 72 65 20 5c 22 5c 6e 5d  chitecture \"\n]
1a5e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
1a5f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
1a600 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 63  uild a list of c
1a610 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c  onfiguration fil
1a620 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c  es that we handl
1a630 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
1a640 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69         set confi
1a650 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  gFileNames [list
1a660 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1a670 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1a680 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 0d 0a  te.dll.config]..
1a690 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1a6a0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
1a6b0 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61 75 78  ld a list of aux
1a6c0 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 64 20 44  iliary Managed D
1a6d0 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 61  ebugging Assista
1a6e0 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 20 20 20  nts (MDA)..
1a6f0 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69     #       confi
1a700 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73 20 74  guration files t
1a710 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a  hat we handle...
1a720 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1a730 20 20 20 73 65 74 20 6d 64 61 43 6f 6e 66 69 67     set mdaConfig
1a740 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20  FileNames [list
1a750 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 45  \..            E
1a760 61 67 6c 65 53 68 65 6c 6c 33 32 2e 65 78 65 2e  agleShell32.exe.
1a770 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e 73 74 61  mda.config Insta
1a780 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e  ller.exe.mda.con
1a790 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  fig \..
1a7a0 20 20 20 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e     test.exe.mda.
1a7b0 63 6f 6e 66 69 67 20 74 65 73 74 6c 69 6e 71 2e  config testlinq.
1a7c0 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c  exe.mda.config \
1a7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ..            te
1a7e0 73 74 65 66 36 2e 65 78 65 2e 6d 64 61 2e 63 6f  stef6.exe.mda.co
1a7f0 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  nfig]....
1a800 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1a810 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69  TE: Build the li
1a820 73 74 20 6f 66 20 65 78 74 65 72 6e 61 6c 20 66  st of external f
1a830 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
1a840 64 6c 65 2e 20 20 53 6f 6d 65 20 6f 66 0d 0a 20  dle.  Some of..
1a850 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
1a860 68 65 73 65 20 66 69 6c 65 73 20 6d 61 79 20 62  hese files may b
1a870 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72 20  e native and/or
1a880 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69  managed assembli
1a890 65 73 20 74 68 61 74 20 61 72 65 0d 0a 20 20 20  es that are..
1a8a0 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 71       #       req
1a8b0 75 69 72 65 64 20 74 6f 20 70 65 72 66 6f 72 6d  uired to perform
1a8c0 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 2e 0d   various tests..
1a8d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1a8e0 20 20 20 20 73 65 74 20 65 78 74 65 72 6e 61 6c      set external
1a8f0 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20  FileNames [list
1a900 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
1a910 66 69 6c 65 20 6a 6f 69 6e 20 45 6e 74 69 74 79  file join Entity
1a920 46 72 61 6d 65 77 6f 72 6b 20 6c 69 62 20 5b 73  Framework lib [s
1a930 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20  tring map [list
1a940 46 78 20 22 22 5d 20 5b 73 74 72 69 6e 67 20 5c  Fx ""] [string \
1a950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d 61  ..            ma
1a960 70 20 5b 6c 69 73 74 20 6e 65 74 46 78 34 35 31  p [list netFx451
1a970 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34 35   netFx45 netFx45
1a980 32 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34  2 netFx45 netFx4
1a990 36 20 6e 65 74 46 78 34 35 5d 20 5c 0d 0a 20 20  6 netFx45] \..
1a9a0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75            [getBu
1a9b0 69 6c 64 4e 65 74 46 78 5d 5d 5d 20 45 6e 74 69  ildNetFx]]] Enti
1a9c0 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c 5d  tyFramework.dll]
1a9d0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
1a9e0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1a9f0 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f  Build the list o
1aa00 66 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c  f native assembl
1aa10 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20  y files that we
1aa20 68 61 6e 64 6c 65 2e 20 20 54 68 65 0d 0a 20 20  handle.  The..
1aa30 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
1aa40 61 73 6f 6e 20 74 68 65 20 22 53 79 73 74 65 6d  ason the "System
1aa50 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
1aa60 22 20 66 69 6c 65 20 69 73 20 69 6e 63 6c 75 64  " file is includ
1aa70 65 64 20 68 65 72 65 20 69 73 0d 0a 20 20 20 20  ed here is..
1aa80 20 20 20 20 23 20 20 20 20 20 20 20 62 65 63 61      #       beca
1aa90 75 73 65 20 69 74 20 63 6f 75 6c 64 20 62 65 20  use it could be
1aaa0 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61  the mixed-mode a
1aab0 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20  ssembly...
1aac0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
1aad0 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73   nativeFileNames
1aae0 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
1aaf0 20 20 20 20 20 20 73 71 6c 69 74 65 33 2e 64 6c        sqlite3.dl
1ab00 6c 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70  l SQLite.Interop
1ab10 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61  .dll System.Data
1ab20 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a  .SQLite.dll]....
1ab30 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1ab40 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
1ab50 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e   the list of man
1ab60 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69  aged assembly fi
1ab70 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64  les that we hand
1ab80 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
1ab90 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 6e 61          set mana
1aba0 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  gedFileNames [li
1abb0 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
1abc0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
1abd0 4c 69 74 65 2e 64 6c 6c 20 53 79 73 74 65 6d 2e  Lite.dll System.
1abe0 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
1abf0 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  .dll \..
1ac00 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
1ac10 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 0d  SQLite.EF6.dll].
1ac20 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1ac30 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
1ac40 6d 6f 76 65 20 61 6e 79 20 74 65 73 74 20 63 6f  move any test co
1ac50 6e 73 74 72 61 69 6e 74 73 20 74 68 61 74 20 72  nstraints that r
1ac60 65 66 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69  efer to the nati
1ac70 76 65 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20  ve and/or..
1ac80 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67     #       manag
1ac90 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  ed assembly file
1aca0 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65  s that we handle
1acb0 20 75 6e 6c 65 73 73 20 66 6f 72 62 69 64 64 65   unless forbidde
1acc0 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20  n from..
1acd0 23 20 20 20 20 20 20 20 64 6f 69 6e 67 20 73 6f  #       doing so
1ace0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1acf0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
1ad00 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c   exists ::no(sql
1ad10 69 74 65 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61  iteRemoveConstra
1ad20 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ints)]} then {..
1ad30 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
1ad40 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66  h fileName $conf 1ad50 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 igFileNames {.. 1ad60 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 remov 1ad70 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 1ad80 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 endArgs file_$f
1ad90 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  ileName]..
1ada0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1adb0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
1adc0 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69  ame $mdaConfigFi 1add0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 1ade0 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e removeCon 1adf0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 1ae00 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e rgs file_$fileN
1ae10 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ame]..
1ae20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66  }....          f
1ae30 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
1ae40 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d  $externalFileNam 1ae50 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 1ae60 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 removeConstrai 1ae70 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 1ae80 69 6c 65 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20 ile_ [file tail 1ae90 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20$fileName]]..
1aea0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1aeb0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
1aec0 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69  leName $nativeFi 1aed0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 1aee0 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e removeCon 1aef0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 1af00 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e rgs file_$fileN
1af10 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ame]..
1af20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66  }....          f
1af30 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
1af40 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65  $managedFileName 1af50 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 1af60 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e removeConstrain 1af70 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 1af80 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a le_$fileName]..
1af90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1afa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1afb0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1afc0 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 53 79  OTE: Skip all Sy
1afd0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1afe0 20 72 65 6c 61 74 65 64 20 66 69 6c 65 20 68 61   related file ha
1aff0 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 69 6e 67  ndling (deleting
1b000 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ,..        #
1b010 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 6e 64 20     copying, and
1b020 6c 6f 61 64 69 6e 67 29 20 69 66 20 69 6e 73 74  loading) if inst
1b030 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  ructed...
1b040 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
1b050 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
1b060 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 73 29 5d  no(sqliteFiles)]
1b070 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1b080 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1b090 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72   # NOTE: Skip tr
1b0a0 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 65 20 61  ying to delete a
1b0b0 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74  ny files if inst
1b0c0 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  ructed...
1b0d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1b0e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
1b0f0 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
1b100 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  iteFiles)]} then
1b110 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1b120 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
1b130 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c  s ::no(deleteSql
1b140 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d  iteConfigFiles)]
1b150 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1b160 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
1b170 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67  fileName $config 1b180 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 1b1a0 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 DeleteBinaryFile 1b1b0 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
1b1c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1b1d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
1b1e0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
1b1f0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
1b200 28 64 65 6c 65 74 65 53 71 6c 69 74 65 45 78 74  (deleteSqliteExt
1b210 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68  ernalFiles)]} th
1b220 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1b230 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
1b240 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46  Name $mdaConfigF 1b250 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 1b260 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 1b270 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20 24 eleteBuildFile$
1b280 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  fileName..
1b290 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1b2a0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
1b2b0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74  ch fileName $ext 1b2c0 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b ernalFileNames { 1b2d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1b2e0 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 tryDeleteBinar 1b2f0 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d yFile$fileName.
1b300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
1b310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1b320 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1b330 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
1b340 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69   ::no(deleteSqli
1b350 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d  teNativeFiles)]}
1b360 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1b370 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
1b380 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65  o exists ::no(de
1b390 6c 65 74 65 53 71 6c 69 74 65 49 6d 70 6c 69 63  leteSqliteImplic
1b3a0 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  itFiles)]} then
1b3b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1b3c0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
1b3d0 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  ame $nativeFileN 1b3e0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 1b3f0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 1b400 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c eteAssembly$fil
1b410 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..
1b420 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1b430 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1b440 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
1b450 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
1b460 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f  o(deleteSqliteNo
1b470 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d  nImplicitFiles)]
1b480 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1b490 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
1b4a0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
1b4b0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61  (deleteSqlitePla
1b4c0 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20  tformFiles)] &&
1b4d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1b4e0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
1b4f0 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] 1b500 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1b520 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 1b530 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65$nativeFileName
1b540 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
1b550 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65           tryDele
1b560 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65  teAssembly $file 1b570 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a Name$platform..
1b580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b590 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
1b5a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1b5b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
1b5c0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
1b5d0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63  (deleteSqliteArc
1b5e0 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d  hitectureFiles)]
1b5f0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
1b600 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
1b610 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69  ng length $archi 1b620 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 tecture] > 0} th 1b630 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1b640 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1b650 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 fileName$native
1b660 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b680 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62   tryDeleteAssemb
1b690 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72  ly $fileName$ar
1b6a0 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20  chitecture..
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1b6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1b6d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
1b6e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
1b6f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
1b700 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
1b710 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
1b720 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65  qliteManagedFile
1b730 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
1b740 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
1b750 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e  ch fileName $man 1b760 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d agedFileNames {. 1b770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1b780 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 tryDeleteAssemb 1b790 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 ly$fileName..
1b7a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1b7b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1b7c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1b7d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1b7e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
1b7f0 6b 20 66 6f 72 20 74 68 65 20 22 61 75 74 6f 53  k for the "autoS
1b800 65 6c 65 63 74 22 20 72 75 6e 74 69 6d 65 20 6f  elect" runtime o
1b810 70 74 69 6f 6e 2e 20 20 49 66 20 70 72 65 73 65  ption.  If prese
1b820 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23  nt,..          #
1b830 20 20 20 20 20 20 20 61 74 74 65 6d 70 74 20 74         attempt t
1b840 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  o automatically
1b850 73 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 74  select the first
1b860 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20   available..
1b870 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75        #       bu
1b880 69 6c 64 20 28 6f 72 20 22 72 65 6c 65 61 73 65  ild (or "release
1b890 22 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64  ") of SQLite and
1b8a0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1b8b0 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ite..          #
1b8c0 20 20 20 20 20 20 20 66 6f 72 20 75 73 65 20 77         for use w
1b8d0 69 74 68 20 74 68 65 20 74 65 73 74 20 73 75 69  ith the test sui
1b8e0 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  te...          #
1b8f0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1b900 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f  [hasRuntimeOptio
1b910 6e 20 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74  n autoSelect]} t
1b920 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1b930 20 20 20 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f     if {![checkFo
1b940 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a  rSQLiteBuilds $: 1b950 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 :test_channel tr 1b960 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ue]} then {.. 1b970 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 1b980 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 ForSQLiteRelease 1b990 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1b9a0 6c 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20  l true..
1b9b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1b9c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
1b9d0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
1b9e0 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67  OTE: Skip trying
1b9f0 20 74 6f 20 76 65 72 69 66 79 20 74 68 65 20 62   to verify the b
1ba00 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69  uild directory i
1ba10 66 20 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20  f instructed;..
1ba20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1ba30 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65   otherwise, make
1ba40 20 73 75 72 65 20 69 74 20 61 63 74 75 61 6c 6c   sure it actuall
1ba50 79 20 65 78 69 73 74 73 20 6f 72 20 68 61 6c 74  y exists or halt
1ba60 20 74 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 20   the entire..
1ba70 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
1ba80 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 69  esting process i
1ba90 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  f it does not ex
1baa0 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ist...
1bab0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  #..          if
1bac0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
1bad0 3a 6e 6f 28 76 65 72 69 66 79 42 75 69 6c 64 44  :no(verifyBuildD
1bae0 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e  irectory)]} then
1baf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1bb00 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
1bb10 20 4e 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70   NOTE: At this p
1bb20 6f 69 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 20  oint, the build
1bb30 64 69 72 65 63 74 6f 72 79 20 4d 55 53 54 20 65  directory MUST e
1bb40 78 69 73 74 20 61 73 20 61 0d 0a 20 20 20 20 20  xist as a..
1bb50 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76         #       v
1bb60 61 6c 69 64 20 64 69 72 65 63 74 6f 72 79 20 66  alid directory f
1bb70 6f 72 20 74 68 65 20 74 65 73 74 69 6e 67 20 70  or the testing p
1bb80 72 6f 63 65 73 73 20 74 6f 20 63 6f 6e 74 69 6e  rocess to contin
1bb90 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue...
1bba0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1bbb0 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67  set directory [g
1bbc0 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79  etBuildDirectory
1bbd0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
1bbe0 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
1bbf0 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d 20 7c  ts $directory] | 1bc00 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 | \.. 1bc10 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 64 69 ![file isdi 1bc20 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f rectory$directo
1bc30 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ry]} then {..
1bc40 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1bc50 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1bc60 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72 20 74  TE: Just prior t
1bc70 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c 74 69  o actually halti
1bc80 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 70  ng the testing p
1bc90 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20 20 20  rocess,..
1bca0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
1bcb0 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f 20 74  dd an error to t
1bcc0 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65  he test log file
1bcd0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
1bce0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1bcf0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1bd00 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1bd10 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1bd20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 1bd30 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 ould not verify 1bd40 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 build directory 1bd50 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 20 5c \""$directory \
1bd60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1bd70 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 65 73      "\", all tes
1bd80 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e 22 5d 0d  ting halted\n"].
1bd90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
1bda0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1bdb0 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 73 69 6e    # NOTE: Raisin
1bdc0 67 20 61 20 73 63 72 69 70 74 20 65 72 72 6f 72  g a script error
1bdd0 20 66 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74   from this point
1bde0 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d 0a 20 20   should halt..
1bdf0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
1be00 20 20 20 20 74 68 65 20 74 65 73 74 69 6e 67 20      the testing
1be10 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20  process...
1be20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1be30 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 5b           error [
1be40 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1be50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1be60 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66  "could not verif
1be70 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72  y build director
1be80 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79  y \"" $directory 1be90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1bea0 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74 "\", all t 1beb0 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d esting halted"]. 1bec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 1bed0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 1bee0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1bef0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 1bf00 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 ip trying to cop 1bf10 79 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 y any files if i 1bf20 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 1bf30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1bf40 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 1bf50 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 1bf60 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 liteFiles)]} the 1bf70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1bf80 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 1bf90 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 1bfa0 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 5d 7d teConfigFiles)]} 1bfb0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1bfc0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 1bfd0 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 ileName$configF
1bfe0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
1bff0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
1c000 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24 66 69  opyBuildFile $fi 1c010 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 1c020 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1c030 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1c040 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 1c050 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 exists ::no(cop 1c060 79 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 ySqliteExternalF 1c070 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 1c080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 1c090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1c0a0 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 NOTE: Copy the 1c0b0 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e Managed Debuggin 1c0c0 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 g Assistants (MD 1c0d0 41 29 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e A) configuration 1c0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c0f0 23 20 20 20 20 20 20 20 66 69 6c 65 20 66 6f 72 # file for 1c100 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c the Eagle shell 1c110 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 6f 75 to the build ou 1c120 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c 0d tput directory,. 1c130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1c140 20 20 20 20 20 20 20 77 68 69 6c 65 20 75 73 69 while usi 1c150 6e 67 20 65 61 63 68 20 6f 66 20 74 68 65 20 6e ng each of the n 1c160 61 6d 65 73 20 6f 66 20 74 68 65 20 76 61 72 69 ames of the vari 1c170 6f 75 73 20 6c 65 67 61 63 79 20 74 65 73 74 0d ous legacy test. 1c180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1c190 20 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c executabl 1c1a0 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 68 es. This will h 1c1b0 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 elp to make sure 1c1c0 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a 20 that all the.. 1c1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 1c1e0 20 20 20 20 20 6c 65 67 61 63 79 20 74 65 73 74 legacy test 1c1f0 73 20 72 75 6e 20 77 69 74 68 20 65 78 61 63 74 s run with exact 1c200 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 ly the same set 1c210 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 of Managed.. 1c220 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1c230 20 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 Debugging Assi 1c240 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 72 65 stants configure 1c250 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 d... 1c260 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1c270 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 1c280 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 ame$mdaConfigFi
1c290 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
1c2a0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f             tryCo
1c2b0 70 79 42 69 6e 61 72 79 46 69 6c 65 20 45 61 67  pyBinaryFile Eag
1c2c0 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e  leShell.exe.mda.
1c2d0 63 6f 6e 66 69 67 20 22 22 20 24 66 69 6c 65 4e  config "" $fileN 1c2e0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ame.. 1c2f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1c300 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1c310 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 1c320 6f 70 79 20 74 68 65 20 65 78 74 65 72 6e 61 6c opy the external 1c330 20 62 69 6e 61 72 69 65 73 2c 20 69 66 20 61 6e binaries, if an 1c340 79 2c 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 y, to the direct 1c350 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 20 20 20 ory that.. 1c360 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1c370 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 45 61 67 contains the Eag 1c380 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 69 73 20 le shell. This 1c390 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75 73 65 is typically use 1c3a0 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 20 20 d to make.. 1c3b0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1c3c0 20 73 75 72 65 20 61 73 73 65 6d 62 6c 69 65 73 sure assemblies 1c3d0 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 referenced by t 1c3e0 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 20 74 65 he ones being te 1c3f0 73 74 65 64 20 61 72 65 0d 0a 20 20 20 20 20 20 sted are.. 1c400 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1c410 61 76 61 69 6c 61 62 6c 65 20 64 75 72 69 6e 67 available during 1c420 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f the testing pro 1c430 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 cess... 1c440 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1c450 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 1c460 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c leName$external
1c470 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
1c480 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
1c490 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c 65  CopyExternalFile
1c4a0 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20   $fileName.. 1c4b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1c4c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 1c4d0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 1c4e0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 1c4f0 28 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 69 76 (copySqliteNativ 1c500 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b eFiles)]} then { 1c510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c520 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1c530 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 # NOTE: If the 1c540 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 20 69 73 test platform is 1c550 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65 66 61 likely the defa 1c560 75 6c 74 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 ult for this.. 1c570 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 1c580 20 20 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c 73 machine, als 1c590 6f 20 74 72 79 20 74 6f 20 63 6f 70 79 20 74 68 o try to copy th 1c5a0 65 20 6e 61 74 69 76 65 20 66 69 6c 65 73 20 74 e native files t 1c5b0 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 o the.. 1c5c0 20 20 20 20 20 23 20 20 20 20 20 20 20 62 69 6e # bin 1c5d0 61 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 20 ary location... 1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 1c600 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1c610 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 ::no(copySqliteI 1c620 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 20 26 mplicitFiles)] & 1c630 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 1c640 20 20 20 20 20 20 20 5b 69 73 44 65 66 61 75 6c [isDefaul 1c650 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 tBuildPlatform t 1c660 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 rue]} then {.. 1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 1c680 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
1c690 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
1c6a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1c6b0 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
1c6c0 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  mbly $fileName.. 1c6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c6e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1c6f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 1c700 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 1c710 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 1c720 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 qliteNonImplicit 1c730 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 1c740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1c750 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 1c760 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 1c770 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 tePlatformFiles) 1c780 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1c790 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 1c7a0 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 ing length$plat
1c7b0 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20  form] > 0} then
1c7c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1c7d0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
1c7e0 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c  eName $nativeFil 1c7f0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 1c810 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 yCopyAssembly$f
1c820 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72  ileName $platfor 1c830 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 m.. 1c840 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1c850 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1c860 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 1c870 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 1c880 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72 :no(copySqliteAr 1c890 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 chitectureFiles) 1c8a0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 1c8c0 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 ing length$arch
1c8d0 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74  itecture] > 0} t
1c8e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1c8f0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
1c900 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76   fileName $nativ 1c910 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 eFileNames {.. 1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c930 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c tryCopyAssembl 1c940 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 y$fileName $arc 1c950 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 hitecture.. 1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 1c970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c980 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1c990 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1c9a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 1c9b0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 1c9c0 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 1c9d0 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 29 5d teManagedFiles)] 1c9e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1c9f0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1ca00 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 fileName$manage
1ca10 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  dFileNames {..
1ca20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ca30 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66  yCopyAssembly $f 1ca40 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 ileName.. 1ca50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1ca60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1ca70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1ca80 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1ca90 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 NOTE: Skip tryi 1caa0 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79 20 66 ng to load any f 1cab0 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 iles if instruct 1cac0 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ed... # 1cad0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1cae0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 1caf0 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 69 6c no(loadSqliteFil 1cb00 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 1cb10 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 1cb20 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 1cb30 28 6c 6f 61 64 53 71 6c 69 74 65 49 6d 70 6c 69 (loadSqliteImpli 1cb40 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e citFiles)]} then 1cb50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1cb60 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c tryLoadAssembl 1cb70 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 1cb80 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 Lite.dll.. 1cb90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1cba0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 1cbb0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 1cbc0 61 64 53 71 6c 69 74 65 4c 69 6e 71 46 69 6c 65 adSqliteLinqFile 1cbd0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 1cbe0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f tryLo 1cbf0 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 adAssembly Syste 1cc00 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 m.Data.SQLite.Li 1cc10 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 nq.dll.. 1cc20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1cc30 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 1cc40 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 exists ::no(load 1cc50 53 71 6c 69 74 65 45 66 36 46 69 6c 65 73 29 5d SqliteEf6Files)] 1cc60 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1cc70 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 tryLoadA 1cc80 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 ssembly System.D 1cc90 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 ata.SQLite.EF6.d 1cca0 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 1ccb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 1ccc0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 1ccd0 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 ts ::no(loadSqli 1cce0 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c teNonImplicitFil 1ccf0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 1cd00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1cd10 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 1cd20 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 50 6c 61 no(loadSqlitePla 1cd30 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 tformFiles)] && 1cd40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1cd50 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 1cd60 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e gth$platform] >
1cd70 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1cd80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c              tryL
1cd90 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74  oadAssembly Syst
1cda0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
1cdb0 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20  ll $platform.. 1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 1cdd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 1cde0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 1cdf0 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 ::no(loadSqlite 1ce00 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 ArchitectureFile 1ce10 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 1ce20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 1ce30 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 ing length$arch
1ce40 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74  itecture] > 0} t
1ce50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1ce60 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73         tryLoadAs
1ce70 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61  sembly System.Da
1ce80 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61  ta.SQLite.dll $a 1ce90 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 rchitecture.. 1cea0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1ceb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1cec0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1ced0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 }.... c 1cee0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1cef0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1cf00 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1cf10 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1cf20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
1cf30 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 73 71 6c  version of \"sql
1cf40 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20  ite3.dll\"... "
1cf50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1cf60 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b   [file version [
1cf70 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
1cf80 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 20  e sqlite3.dll]]
1cf90 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
1cfa0 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch
1cfb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
1cfc0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1cfd0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1cfe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1cff0 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 "---- file versi 1d000 6f 6e 20 6f 66 20 5c 22 53 51 4c 69 74 65 2e 49 on of \"SQLite.I 1d010 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 nterop.dll\"... 1d020 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1d030 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e [file version 1d040 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 1d050 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 ame SQLite.Inter 1d060 6f 70 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 op.dll]] \n].. 1d070 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1d080 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 1d090 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1d0a0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1d0b0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1d0c0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
1d0d0 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c  ile version of \
1d0e0 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
1d0f0 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c  ite.dll\"... " \
1d100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1d110 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67  [file version [g
1d120 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
1d130 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1d140 69 74 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20  ite.dll]] \n]..
1d150 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1d160 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
1d170 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1d180 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 1d190 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1d1a0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1d1b0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 1d1c0 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \"System.Data.SQ 1d1d0 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5c 22 2e Lite.Linq.dll\". 1d1e0 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 .. " \.. 1d1f0 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 [file vers 1d200 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ion [getBinaryFi 1d210 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 leName System.Da 1d220 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 ta.SQLite.Linq.d 1d230 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 ll]] \n].. 1d240 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 }.... c 1d250 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1d260 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1d270 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1d280 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1d290 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
1d2a0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73  version of \"Sys
1d2b0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1d2c0 45 46 36 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c  EF6.dll\"... " \
1d2d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1d2e0 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67  [file version [g
1d2f0 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
1d300 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1d310 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 5d 20 5c 6e  ite.EF6.dll]] \n
1d320 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ]..        }....
1d330 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
1d340 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat 1d350 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 1d360 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 {.. cat 1d370 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1d380 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1d390 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1d3a0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1d3b0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
1d3c0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22  e version of \""
1d3d0 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20   $platform \.. 1d3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f "/ 1d3f0 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e sqlite3.dll\"... 1d400 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e " [file version 1d410 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d420 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 [getBinaryFi 1d430 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 leName sqlite3.d 1d440 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c ll$platform]] \
1d450 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
1d460 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74  ...          cat
1d470 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1d480 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1d490 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1d4a0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1d4b0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c "---- fil 1d4c0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 e version of \"" 1d4d0 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20$platform \..
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f                "/
1d4f0 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64  SQLite.Interop.d
1d500 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20  ll\"... " [file
1d510 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20  version \..
1d520 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
1d530 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 51  inaryFileName SQ
1d540 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c  Lite.Interop.dll
1d550 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d   $platform]] \n] 1d560 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 1d570 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 . catch 1d580 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d590 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1d5a0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1d5b0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1d5c0 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
1d5d0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24  version of \"" $1d5e0 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 platform \.. 1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 22 2f 53 79 "/Sy 1d600 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1d610 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c .dll\"... " [fil 1d620 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 e version \.. 1d630 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 1d640 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName 1d650 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1d660 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d te.dll$platform
1d670 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ]] \n]..
1d680 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1d690 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
1d6a0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72  tring length $ar 1d6b0 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d chitecture] > 0} 1d6c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1d6d0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 1d6e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1d6f0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1d700 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1d710 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1d720 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
1d730 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 63  of \"" $architec 1d740 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 ture \.. 1d750 20 20 20 20 20 20 20 20 22 2f 73 71 6c 69 74 65 "/sqlite 1d760 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 3.dll\"... " [fi 1d770 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 le version \.. 1d780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 1d790 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 1d7a0 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 61 72 sqlite3.dll$ar
1d7b0 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d  chitecture]] \n]
1d7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
1d7d0 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68  .          catch
1d7e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1d7f0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1d800 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1d810 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1d820 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 1d830 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 version of \""$
1d840 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a  architecture \..
1d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d860 22 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70  "/SQLite.Interop
1d870 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c  .dll\"... " [fil
1d880 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20  e version \..
1d890 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
1d8a0 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
1d8b0 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64  SQLite.Interop.d
1d8c0 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72 65  ll $architecture 1d8d0 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. 1d8e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 1d8f0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 1d900 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1d910 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1d920 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1d930 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1d940 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
1d950 20 5c 22 22 20 24 61 72 63 68 69 74 65 63 74 75   \"" $architectu 1d960 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 re \.. 1d970 20 20 20 20 20 20 22 2f 53 79 73 74 65 6d 2e 44 "/System.D 1d980 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 ata.SQLite.dll\" 1d990 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 ... " [file vers 1d9a0 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ion \.. 1d9b0 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 [getBinar 1d9c0 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d yFileName System 1d9d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 1d9e0 20 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d$architecture]]
1d9f0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1da00 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
1da10 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1da20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20     # NOTE: Grab
1da30 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61  the list of mana
1da40 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 66  ged assemblies f
1da50 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70  or the current p
1da60 72 6f 63 65 73 73 0d 0a 20 20 20 20 20 20 20 20  rocess..
1da70 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f  #       and repo
1da80 72 74 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d  rt on the System
1da90 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c  .Data.SQLite rel
1daa0 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20  ated ones...
1dab0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
1dac0 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
1dad0 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68  jectCommand]} th
1dae0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1daf0 73 65 74 20 61 73 73 65 6d 62 6c 69 65 73 20 5b  set assemblies [
1db00 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 41 70  object invoke Ap
1db10 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44  pDomain.CurrentD
1db20 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d 62 6c  omain GetAssembl
1db30 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ies]....
1db40 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
1db50 20 61 73 73 65 6d 62 6c 79 20 24 61 73 73 65 6d   assembly $assem 1db60 62 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 blies {.. 1db70 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 1db80 20 6d 61 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e match \{System. 1db90 44 61 74 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 Data.SQLite*$as
1dba0 73 65 6d 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d  sembly]} then {.
1dbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
1dbc0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1dbd0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1dbe0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1dbf0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e "---- foun 1dc00 64 20 6c 6f 61 64 65 64 20 61 73 73 65 6d 62 6c d loaded assembl 1dc10 79 3a 20 22 20 24 61 73 73 65 6d 62 6c 79 20 5c y: "$assembly \
1dc20 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
1dc30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
1dc40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1dc50 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
1dc60 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1dc70 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 1dc80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 1dc90 2d 2d 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 ---- define cons 1dca0 74 61 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74 tants for \"Syst 1dcb0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 em.Data.SQLite\" 1dcc0 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 ... ".... 1dcd0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 1dce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a . obj 1dcf0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 1dd00 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1dd20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1dd30 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e te.SQLite3 Defin 1dd40 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 eConstants.. 1dd50 20 20 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f } defineCo 1dd60 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 nstants] == 0} t 1dd70 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1dd80 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1dd90 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1dda0 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74  Args [formatList
1ddb0 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20   [lsort \..
1ddc0 20 20 20 20 20 20 20 20 20 20 20 24 64 65 66 69             $defi 1ddd0 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f neConstants] <no 1dde0 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 ne>] \n].. 1ddf0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1de00 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1de10 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1de20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20  unknown\n..
1de30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1de40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74  }....        cat
1de50 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1de60 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1de70 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 1de80 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 "---- sou 1de90 72 63 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c rce version of \ 1dea0 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c "System.Data.SQL 1deb0 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a ite.dll\"... ".. 1dec0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1ded0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1dee0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1def0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 1df00 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 1df10 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 1df20 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi 1df30 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f teConnection Pro 1df40 76 69 64 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 viderVersion.. 1df50 20 20 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f } versio 1df60 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d n] == 0} then {. 1df70 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 1df80 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 1df90 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20$version] == 0}
1dfa0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1dfb0 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f        set versio
1dfc0 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20  n null..
1dfd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1dfe0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1dff0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1e000 41 72 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e Args$version \n
1e010 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
1e020 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1e030 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1e040 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e _channel unknown 1e050 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d \n.. }. 1e060 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 1e070 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 1e080 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1e090 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
1e0a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1e0b0 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65  "---- source che
1e0c0 63 6b 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65  ckout of \"Syste
1e0d0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
1e0e0 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  l\"... "....
1e0f0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1e100 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1e110 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
1e120 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
1e130 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1e140 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
1e150 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e  QLite.SQLiteConn
1e160 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 53  ection ProviderS
1e170 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20  ourceId..
1e180 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d     } sourceId] =
1e190 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
1e1a0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
1e1b0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75  ring length $sou 1e1c0 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 rceId] == 0} the 1e1d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1e1e0 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 set sourceId 1e1f0 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 null.. 1e200 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 1e210 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1e220 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1e230 67 73 20 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d  gs $sourceId \n] 1e240 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 1e250 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 1e260 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1e270 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c  channel unknown\
1e280 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  n..          }..
1e290 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1e2a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1e2b0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68  # NOTE: Check th
1e2c0 65 20 61 76 61 69 6c 61 62 6c 65 20 62 75 69 6c  e available buil
1e2d0 64 73 20 28 61 6e 64 20 22 72 65 6c 65 61 73 65  ds (and "release
1e2e0 73 22 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e  s") of SQLite an
1e2f0 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  d..        #
1e300 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
1e310 51 4c 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  QLite...
1e320 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b  #..        check
1e330 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20  ForSQLiteBuilds
1e340 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. 1e350 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f . checkFo 1e360 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 rSQLiteReleases 1e370 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
1e380 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1e390 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f        # NOTE: No
1e3a0 77 2c 20 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e  w, we need to kn
1e3b0 6f 77 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  ow if the SQLite
1e3c0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73   core library is
1e3d0 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20   available..
1e3e0 20 20 20 20 23 20 20 20 20 20 20 20 28 69 2e 65      #       (i.e
1e3f0 2e 20 62 65 63 61 75 73 65 20 74 68 65 20 6d 61  . because the ma
1e400 6e 61 67 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65  naged-only Syste
1e410 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61 73  m.Data.SQLite as
1e420 73 65 6d 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20  sembly can..
1e430 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 61 64      #       load
1e440 20 77 69 74 68 6f 75 74 20 69 74 3b 20 68 6f 77   without it; how
1e450 65 76 65 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20  ever, it cannot
1e460 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 73 65 66  do anything usef
1e470 75 6c 20 77 69 74 68 6f 75 74 0d 0a 20 20 20 20  ul without..
1e480 20 20 20 20 23 20 20 20 20 20 20 20 69 74 29 2e      #       it).
1e490 20 20 49 66 20 77 65 20 61 72 65 20 75 73 69 6e    If we are usin
1e4a0 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65  g the mixed-mode
1e4b0 20 61 73 73 65 6d 62 6c 79 20 61 6e 64 20 77 65   assembly and we
1e4c0 20 61 6c 72 65 61 64 79 0d 0a 20 20 20 20 20 20   already..
1e4d0 20 20 23 20 20 20 20 20 20 20 66 6f 75 6e 64 20    #       found
1e4e0 69 74 20 28 61 62 6f 76 65 29 2c 20 74 68 69 73  it (above), this
1e4f0 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73 20 73   should always s
1e500 75 63 63 65 65 64 2e 0d 0a 20 20 20 20 20 20 20  ucceed...
1e510 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63   #..        chec
1e520 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 72  kForSQLiteLibrar
1e530 79 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  y $::test_channe 1e540 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a l.... #.. 1e550 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1e560 43 68 65 63 6b 20 69 66 20 74 68 65 20 53 51 4c Check if the SQL 1e570 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 ite interop asse 1e580 6d 62 6c 79 20 69 73 20 61 76 61 69 6c 61 62 6c mbly is availabl 1e590 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 1e5a0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 1e5b0 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a QLiteInterop$::
1e5c0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a  test_channel....
1e5d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1e5e0 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
1e5f0 20 74 68 65 20 53 51 4c 69 74 65 20 64 61 74 61   the SQLite data
1e600 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61  base and tempora
1e610 72 79 20 64 69 72 65 63 74 6f 72 69 65 73 2e 0d  ry directories..
1e620 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1e630 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
1e640 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a  teDirectories $: 1e650 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d :test_channel... 1e660 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1e670 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 1e680 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 mpt to determine 1e690 20 69 66 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 if various comp 1e6a0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 ile-time options 1e6b0 20 6e 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 needed for.. 1e6c0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 # tes 1e6d0 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 t constraints we 1e6e0 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 re enabled for t 1e6f0 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d he managed assem 1e700 62 6c 79 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 bly. There.. 1e710 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 # are 1e720 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 some compile-ti 1e730 6d 65 20 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 me options that 1e740 6d 75 73 74 20 61 6c 73 6f 20 68 61 76 65 20 62 must also have b 1e750 65 65 6e 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 een enabled.. 1e760 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 # for 1e770 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 the interop ass 1e780 65 6d 62 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 embly in order t 1e790 6f 20 62 65 20 65 66 66 65 63 74 69 76 65 2e 20 o be effective. 1e7a0 20 46 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 For those.. 1e7b0 20 20 20 20 23 20 20 20 20 20 20 20 6f 70 74 69 # opti 1e7c0 6f 6e 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 ons, it will be 1e7d0 61 73 73 75 6d 65 64 20 74 68 61 74 20 69 74 20 assumed that it 1e7e0 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 was enabled for 1e7f0 74 68 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 the interop.. 1e800 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 # ass 1e810 65 6d 62 6c 79 20 69 66 20 69 74 20 77 61 73 20 embly if it was 1e820 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 enabled for the 1e830 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 managed assembly 1e840 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1e850 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 65 foreach de 1e860 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 fineConstant [li 1e870 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 st \.. 1e880 20 20 43 48 45 43 4b 5f 53 54 41 54 45 20 43 4f CHECK_STATE CO 1e890 55 4e 54 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 UNT_HANDLE DEBUG 1e8a0 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 INTEROP_CODEC I 1e8b0 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a NTEROP_DEBUG \.. 1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 INTE 1e8d0 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 ROP_EXTENSION_FU 1e8e0 4e 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f NCTIONS INTEROP_ 1e8f0 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20 5c 0d INCLUDE_CEROD \. 1e900 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 . INT 1e910 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 45 58 54 EROP_INCLUDE_EXT 1e920 52 41 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 RA INTEROP_INCLU 1e930 44 45 5f 53 45 45 20 49 4e 54 45 52 4f 50 5f 49 DE_SEE INTEROP_I 1e940 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 20 5c 0d NCLUDE_ZIPVFS \. 1e950 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 . INT 1e960 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 EROP_LEGACY_CLOS 1e970 45 20 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 49 4e E INTEROP_LOG IN 1e980 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e TEROP_TEST_EXTEN 1e990 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 SION \.. 1e9a0 20 20 20 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 INTEROP_VIRT 1e9b0 55 41 4c 5f 54 41 42 4c 45 20 4e 45 54 5f 32 30 UAL_TABLE NET_20 1e9c0 20 4e 45 54 5f 33 35 20 4e 45 54 5f 34 30 20 4e NET_35 NET_40 N 1e9d0 45 54 5f 34 35 20 4e 45 54 5f 34 35 31 20 4e 45 ET_45 NET_451 NE 1e9e0 54 5f 34 36 20 5c 0d 0a 20 20 20 20 20 20 20 20 T_46 \.. 1e9f0 20 20 20 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f NET_COMPACT_ 1ea00 32 30 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 20 PLATFORM_COMP 1ea10 41 43 54 46 52 41 4d 45 57 4f 52 4b 20 50 52 45 ACTFRAMEWORK PRE 1ea20 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 LOAD_NATIVE_LIBR 1ea30 41 52 59 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ARY \.. 1ea40 20 20 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 RETARGETABLE 1ea50 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 SQLITE_STANDARD 1ea60 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 THROW_ON_DISPOSE 1ea70 44 20 54 52 41 43 45 20 5c 0d 0a 20 20 20 20 20 D TRACE \.. 1ea80 20 20 20 20 20 20 20 54 52 41 43 45 5f 43 4f 4e TRACE_CON 1ea90 4e 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 44 45 NECTION TRACE_DE 1eaa0 54 45 43 54 49 4f 4e 20 54 52 41 43 45 5f 48 41 TECTION TRACE_HA 1eab0 4e 44 4c 45 20 54 52 41 43 45 5f 50 52 45 4c 4f NDLE TRACE_PRELO 1eac0 41 44 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 AD \.. 1ead0 20 20 54 52 41 43 45 5f 53 48 41 52 45 44 20 54 TRACE_SHARED T 1eae0 52 41 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 54 RACE_STATEMENT T 1eaf0 52 41 43 45 5f 57 41 52 4e 49 4e 47 20 54 52 41 RACE_WARNING TRA 1eb00 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 CK_MEMORY_BYTES 1eb10 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 \.. U 1eb20 53 45 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 SE_ENTITY_FRAMEW 1eb30 4f 52 4b 5f 36 20 55 53 45 5f 49 4e 54 45 52 4f ORK_6 USE_INTERO 1eb40 50 5f 44 4c 4c 20 55 53 45 5f 50 52 45 50 41 52 P_DLL USE_PREPAR 1eb50 45 5f 56 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d E_V2 WINDOWS] {. 1eb60 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1eb70 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1eb80 43 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6d Check if the com 1eb90 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e pile-time option 1eba0 20 69 73 20 6c 69 73 74 65 64 20 69 6e 20 74 68 is listed in th 1ebb0 65 20 6c 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 e list of.. 1ebc0 20 20 20 20 20 23 20 20 20 20 20 20 20 22 64 65 # "de 1ebd0 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 fine constants" 1ebe0 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20 62 79 kept track of by 1ebf0 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 the managed ass 1ec00 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 embly... 1ec10 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 63 #.. c 1ec20 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 heckForSQLiteDef 1ec30 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 ineConstant$::t
1ec40 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66  est_channel $def 1ec50 69 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 ineConstant.. 1ec60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1ec70 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1ec80 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th 1ec90 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ 1eca0 4c 69 74 65 20 70 72 6f 76 69 64 65 72 20 77 61 Lite provider wa 1ecb0 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0d s compiled with. 1ecc0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1ecd0 20 73 75 70 70 6f 72 74 20 66 6f 72 20 61 6e 79 support for any 1ece0 20 65 6e 63 72 79 70 74 65 64 20 64 61 74 61 62 encrypted datab 1ecf0 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ases... # 1ed00 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 .. if {[h 1ed10 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d aveConstraint \. 1ed20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1ed30 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e defineConstant. 1ed40 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1ed50 74 65 2e 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 te.INTEROP_CODEC 1ed60 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] || \.. 1ed70 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 [haveConstra 1ed80 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 int \.. 1ed90 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e defineCon 1eda0 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 stant.System.Dat 1edb0 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 a.SQLite.INTEROP 1edc0 5f 49 4e 43 4c 55 44 45 5f 53 45 45 5d 7d 20 74 _INCLUDE_SEE]} t 1edd0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1ede0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 1edf0 4e 4f 54 45 3a 20 59 65 73 2c 20 61 64 64 20 67 NOTE: Yes, add g 1ee00 65 6e 65 72 69 63 20 63 6f 6e 73 74 72 61 69 6e eneric constrain 1ee10 74 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 t for use by the 1ee20 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 1ee30 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1ee40 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai 1ee50 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 nt System.Data.S 1ee60 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e QLite.Encryption 1ee70 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 1ee80 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1ee90 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 1eea0 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c the current buil 1eeb0 64 20 79 65 61 72 2e 20 20 42 61 73 69 63 61 6c d year. Basical 1eec0 6c 79 2c 20 74 68 69 73 20 69 6e 64 69 63 61 74 ly, this indicat 1eed0 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 es.. # 1eee0 20 20 20 20 77 68 69 63 68 20 76 65 72 73 69 6f which versio 1eef0 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 6e 64 n of MSBuild and 1ef00 2f 6f 72 20 56 69 73 75 61 6c 20 53 74 75 64 69 /or Visual Studi 1ef10 6f 20 77 61 73 20 75 73 65 64 20 74 6f 0d 0a 20 o was used to.. 1ef20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 1ef30 6f 6d 70 69 6c 65 20 74 68 65 20 61 73 73 65 6d ompile the assem 1ef40 62 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e 64 bly binaries und 1ef50 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 er test... 1ef60 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 1ef70 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1ef80 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  el \..
1ef90 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67    "---- checking
1efa0 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61   for System.Data
1efb0 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 79 65  .SQLite build ye
1efc0 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ar... "....
1efd0 20 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74     set year [get
1efe0 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20  BuildYear]..
1eff0 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
1f000 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75  t [appendArgs bu
1f010 69 6c 64 59 65 61 72 2e 20 24 79 65 61 72 5d 0d  ildYear. $year]. 1f020 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
1f030 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1f040 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 79  appendArgs \" $y 1f050 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 ear \"\n].... 1f060 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1f070 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 # NOTE: Check th 1f080 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 e current build 1f090 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 20 .NET Framework. 1f0a0 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 Basically, this 1f0b0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1f0c0 20 20 69 6e 64 69 63 61 74 65 73 20 77 68 69 63 indicates whic 1f0d0 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 h version of the 1f0e0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 .NET Framework 1f0f0 69 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 is being.. 1f100 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 62 # used b 1f110 79 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 y the assembly b 1f120 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 inaries under te 1f130 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a st... #.. 1f140 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1f150 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d  :test_channel \.
1f160 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
1f170 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for
1f180 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1f190 74 65 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72  te build .NET Fr
1f1a0 61 6d 65 77 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a  amework... "....
1f1b0 20 20 20 20 20 20 20 20 73 65 74 20 6e 65 74 46          set netF
1f1c0 78 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 78  x [getBuildNetFx
1f1d0 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  ]..        addCo
1f1e0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
1f1f0 41 72 67 73 20 62 75 69 6c 64 46 72 61 6d 65 77  Args buildFramew
1f200 6f 72 6b 2e 20 24 6e 65 74 46 78 5d 0d 0a 20 20  ork. $netFx].. 1f210 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1f220 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1f230 65 6e 64 41 72 67 73 20 5c 22 20 24 6e 65 74 46  endArgs \" $netF 1f240 78 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 x \"\n].... 1f250 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1f260 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 NOTE: Check the 1f270 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 63 6f current build co 1f280 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 nfiguration. Th 1f290 69 73 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c is should normal 1f2a0 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ly.. # 1f2b0 20 20 20 20 62 65 20 65 69 74 68 65 72 20 22 44 be either "D 1f2c0 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 ebug" or "Releas 1f2d0 65 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e"... #.. 1f2e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1f2f0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d  :test_channel \.
1f300 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
1f310 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for
1f320 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1f330 74 65 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75  te build configu
1f340 72 61 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20  ration... "....
1f350 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69         set confi
1f360 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69  guration [getBui
1f370 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d  ldConfiguration]
1f380 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
1f390 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
1f3a0 72 67 73 20 62 75 69 6c 64 43 6f 6e 66 69 67 75  rgs buildConfigu
1f3b0 72 61 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 75  ration. $configu 1f3c0 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 ration].. 1f3d0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1f3e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1f3f0 67 73 20 5c 22 20 24 63 6f 6e 66 69 67 75 72 61  gs \" $configura 1f400 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 tion \"\n].... 1f410 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1f420 20 23 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 # NOTE: Try to 1f430 73 65 74 75 70 20 61 6e 20 69 6e 74 65 72 72 75 setup an interru 1f440 70 74 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e pt callback usin 1f450 67 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62 g the script deb 1f460 75 67 67 65 72 0d 0a 20 20 20 20 20 20 20 20 23 ugger.. # 1f470 20 20 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c that will 1f480 20 63 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 cancel all SQL 1f490 71 75 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 queries in progr 1f4a0 65 73 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 ess for all data 1f4b0 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 base.. # 1f4c0 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e connection 1f4d0 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 s known to this 1f4e0 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 interpreter... 1f4f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1f500 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 1f510 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e ts ::no(sqliteIn 1f520 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 terruptCallback) 1f530 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1f540 20 20 20 20 20 73 65 74 75 70 44 62 49 6e 74 65 setupDbInte 1f550 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a rruptCallback$:
1f560 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a  :test_channel $: 1f570 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 :test_log.. 1f580 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1f590 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1f5a0 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 E: Check for the 1f5b0 20 6e 61 74 69 76 65 20 72 75 6e 74 69 6d 65 20 native runtime 1f5c0 6f 70 74 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f option, which wo 1f5d0 75 6c 64 20 6d 65 61 6e 20 77 65 20 61 72 65 0d uld mean we are. 1f5e0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1f5f0 20 75 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 using the mixed 1f600 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d -mode assembly.. 1f610 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1f620 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 checkForRunt 1f630 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 imeOption$::tes
1f640 74 5f 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65  t_channel native
1f650 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
1f660 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
1f670 68 65 63 6b 20 69 66 20 74 68 65 20 74 65 73 74  heck if the test
1f680 20 73 75 69 74 65 20 73 68 6f 75 6c 64 20 63 6f   suite should co
1f690 75 6e 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  unt the number o
1f6a0 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20  f connections..
1f6b0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22         #       "
1f6c0 6f 70 65 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f  opened" and "clo
1f6d0 73 65 64 22 20 66 72 6f 6d 20 74 68 65 20 70 6f  sed" from the po
1f6e0 6f 6c 20 77 68 65 6e 20 64 65 74 65 72 6d 69 6e  ol when determin
1f6f0 69 6e 67 20 69 66 20 61 20 74 65 73 74 0d 0a 20  ing if a test..
1f700 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70         #       p
1f710 61 73 73 65 64 2e 20 20 44 69 73 61 62 6c 69 6e  assed.  Disablin
1f720 67 20 74 68 69 73 20 62 65 68 61 76 69 6f 72 20  g this behavior
1f730 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63  is sometimes nec
1f740 65 73 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20  essary (e.g...
1f750 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 75        #       du
1f760 72 69 6e 67 20 74 68 65 20 72 65 6c 65 61 73 65  ring the release
1f770 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
1f780 29 20 62 65 63 61 75 73 65 20 74 68 65 72 65 20  ) because there
1f790 61 72 65 20 73 65 76 65 72 61 6c 0d 0a 20 20 20  are several..
1f7a0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
1f7b0 74 73 20 74 68 61 74 20 72 65 6c 79 20 6f 6e 20  ts that rely on
1f7c0 74 68 65 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d  the "opened from
1f7d0 20 70 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69   pool" count bei
1f7e0 6e 67 20 67 72 65 61 74 65 72 0d 0a 20 20 20 20  ng greater..
1f7f0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 6e      #       than
1f800 20 7a 65 72 6f 2e 20 20 54 68 65 73 65 20 74 65   zero.  These te
1f810 73 74 73 20 6d 61 79 20 66 61 69 6c 20 64 75 65  sts may fail due
1f820 20 74 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65   to the non-dete
1f830 72 6d 69 6e 69 73 74 69 63 0d 0a 20 20 20 20 20  rministic..
1f840 20 20 20 23 20 20 20 20 20 20 20 62 65 68 61 76     #       behav
1f850 69 6f 72 20 6f 66 20 74 68 65 20 43 4c 52 20 47  ior of the CLR G
1f860 43 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65  C, even when the
1f870 72 65 20 69 73 20 6e 6f 20 62 75 67 20 69 6e 20  re is no bug in
1f880 74 68 65 20 63 6f 64 65 0d 0a 20 20 20 20 20 20  the code..
1f890 20 20 23 20 20 20 20 20 20 20 62 65 69 6e 67 20    #       being
1f8a0 74 65 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  tested...
1f8b0 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63   #..        chec
1f8c0 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f  kForRuntimeOptio
1f8d0 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  n $::test_channe 1f8e0 6c 20 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a l noPoolCounts.. 1f8f0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1f900 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 1f910 63 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 73 ck if the test s 1f920 75 69 74 65 20 73 68 6f 75 6c 64 20 75 73 65 20 uite should use 1f930 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 shared-cache mod 1f940 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 1f950 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 checkForR 1f960 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a untimeOption$::
1f970 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 73 68 61  test_channel sha
1f980 72 65 64 43 61 63 68 65 0d 0a 0d 0a 20 20 20 20  redCache....
1f990 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1f9a0 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68   NOTE: Report th
1f9b0 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 65  e resource usage
1f9c0 20 70 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e   prior to runnin
1f9d0 67 20 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20  g any tests...
1f9e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1f9f0 20 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73   reportSQLiteRes
1fa00 6f 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63  ources $::test_c 1fa10 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 hannel.... 1fa20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1fa30 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6c 69 OTE: Grab the li 1fa40 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6d 6f 64 st of native mod 1fa50 75 6c 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 ules for the cur 1fa60 72 65 6e 74 20 70 72 6f 63 65 73 73 20 61 6e 64 rent process and 1fa70 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1fa80 20 20 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 report on the 1fa90 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1faa0 74 65 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e te related ones. 1fab0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1fac0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 if {[haveSQ 1fad0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman 1fae0 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 d]} then {.. 1faf0 20 20 20 20 20 20 73 65 74 20 6d 6f 64 75 6c 65 set module 1fb00 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 s [object invoke 1fb10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1fb20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 System.Diagnos 1fb30 74 69 63 73 2e 50 72 6f 63 65 73 73 2e 47 65 74 tics.Process.Get 1fb40 43 75 72 72 65 6e 74 50 72 6f 63 65 73 73 20 4d CurrentProcess M 1fb50 6f 64 75 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 odules].... 1fb60 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 object fore 1fb70 61 63 68 20 2d 61 6c 69 61 73 20 6d 6f 64 75 6c ach -alias modul 1fb80 65 20 24 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 e$modules {..
1fb90 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1fba0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1fbb0 20 54 68 65 20 6d 6f 64 75 6c 65 20 66 69 6c 65   The module file
1fbc0 20 6e 61 6d 65 20 68 65 72 65 20 6d 75 73 74 20   name here must
1fbd0 62 65 20 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d 0a  be normalized...
1fbe0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1fbf0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66             set f
1fc00 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f  ileName [file no
1fc10 72 6d 61 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c 65  rmalize [$module 1fc20 20 46 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 FileName]].... 1fc30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 1fc40 73 74 72 69 6e 67 20 6d 61 74 63 68 20 2d 6e 6f string match -no 1fc50 63 61 73 65 20 2a 2f 73 71 6c 69 74 65 33 2e 64 case */sqlite3.d 1fc60 6c 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ll$fileName]} t
1fc70 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1fc80 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1fc90 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1fca0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1fcb0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1fcc0 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 - found loaded S 1fcd0 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 QLite native lib 1fce0 72 61 72 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c rary module: " \ 1fcf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1fd00 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e$fileName \n
1fd10 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
1fd20 20 65 6c 73 65 69 66 20 7b 5b 73 74 72 69 6e 67   elseif {[string
1fd30 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20   match \..
1fd40 20 20 20 20 20 20 20 20 20 20 2d 6e 6f 63 61 73            -nocas
1fd50 65 20 2a 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72  e */SQLite.Inter
1fd60 6f 70 2e 64 6c 6c 20 24 66 69 6c 65 4e 61 6d 65  op.dll $fileName 1fd70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1fd80 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1fd90 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1fda0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fdc0 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64  "---- found load
1fdd0 65 64 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f  ed SQLite intero
1fde0 70 20 61 73 73 65 6d 62 6c 79 20 6d 6f 64 75 6c  p assembly modul
1fdf0 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  e: " \..
1fe00 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e            $fileN 1fe10 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ame \n].. 1fe20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1fe30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1fe40 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 .. catch 1fe50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 1fe60 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1fe70 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  el \..
1fe80 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c      "---- compil
1fe90 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66  e-time options f
1fea0 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  or SQLite core l
1feb0 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20  ibrary... "....
1fec0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
1fed0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1fee0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1fef0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
1ff00 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
1ff10 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
1ff20 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33  a.SQLite.SQLite3
1ff30 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70   SQLiteCompileOp
1ff40 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20  tions..
1ff50 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e   } compileOption
1ff60 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  s] == 0} then {.
1ff70 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1ff80 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1ff90 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b el [appendArgs [ 1ffa0 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 formatList [lsor 1ffb0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 1ffc0 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74$compileOpt
1ffd0 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e  ions] <none>] \n
1ffe0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
1fff0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
20000 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 20010 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e _channel unknown 20020 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d \n.. }. 20030 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 20040 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 20050 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
20060 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
20070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
20080 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69  "---- compile-ti
20090 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53  me options for S
200a0 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73  QLite interop as
200b0 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20  sembly... "....
200c0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
200d0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
200e0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
200f0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
20100 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
20110 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
20120 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33  a.SQLite.SQLite3
20130 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f   InteropCompileO
20140 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20  ptions..
20150 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f    } compileOptio
20160 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ns] == 0} then {
20170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
20180 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 20190 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 201a0 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f [formatList [lso 201b0 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 rt \.. 201c0 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70$compileOp
201d0 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c  tions] <none>] \
201e0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  n]..          }
201f0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
20200 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 20210 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 t_channel unknow 20220 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n\n.. } 20230 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 20240 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 20250 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 # NOTE: Show t 20260 68 65 20 61 63 74 69 76 65 20 74 65 73 74 20 63 he active test c 20270 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 onstraints... 20280 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 20290 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
202a0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
202b0 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69  s "---- constrai
202c0 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  nts: " \..
202d0 20 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73        [formatLis
202e0 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e  t [lsort [getCon
202f0 73 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65  straints]] <none
20300 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  >] \n]....
20310 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
20320 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 74 65  OTE: Save the te
20330 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66  st constraints f
20340 6f 72 20 75 73 65 20 62 79 20 74 68 72 65 61 64  or use by thread
20350 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 69  s created in thi
20360 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
20370 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64     application d
20380 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20 69 73 20  omain.  This is
20390 6e 65 63 65 73 73 61 72 79 20 62 65 63 61 75 73  necessary becaus
203a0 65 20 61 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d  e all the Eagle.
203b0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
203c0 20 22 74 65 73 74 20 63 6f 6e 74 65 78 74 22 20   "test context"
203d0 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70  information is p
203e0 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20 20  er-thread...
203f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
20400 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
20410 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69   ::test_constrai
20420 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  nts]} then {..
20430 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65          set ::te
20440 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20 24  st_constraints $20450 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 63 6f ::eagle_tests(co 20460 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 nstraints).. 20470 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 20480 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 20490 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 61 66 TE: Load the "af 204a0 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 ter-constraints" 204b0 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 custom per-user 204c0 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 and/or per-host 204d0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 204e0 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 test settings 204f0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d now... #. 20500 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c . uplevel 20510 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 1 [list loadSQL 20520 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 iteTestSettings 20530 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
20540 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20  .after]....
20550 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
20560 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 73 61  NOTE: If necessa
20570 72 79 2c 20 65 6e 61 62 6c 65 20 73 68 61 72 65  ry, enable share
20580 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77  d-cache mode now
20590 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
205a0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75        if {[hasRu
205b0 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72  ntimeOption shar
205c0 65 64 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b  edCache]} then {
205d0 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6e 61 62  ..          enab
205e0 6c 65 53 68 61 72 65 64 43 61 63 68 65 20 24 3a  leSharedCache $: 205f0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 :test_channel tr 20600 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ue.. }... 20610 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 20620 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 # NOTE: Show 20630 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 when our tests 20640 61 63 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 actually began ( 20650 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 now)... # 20660 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 20670 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
20680 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
20690 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
206a0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
206b0 69 74 65 20 74 65 73 74 73 20 62 65 67 61 6e 20  ite tests began
206c0 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  at " \..
206d0 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61      [clock forma
206e0 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73  t [clock seconds
206f0 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  ]] \n]..      }.
20700 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
20710 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73  roc runSQLiteTes
20720 74 46 69 6c 65 73 50 72 6f 6c 6f 67 75 65 20 7b  tFilesPrologue {
20730 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76  } {..      uplev
20740 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20  el 1 {..
20750 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
20760 45 3a 20 53 65 74 75 70 20 74 68 65 20 76 61 72  E: Setup the var
20770 69 61 62 6c 65 73 20 74 68 61 74 20 72 65 66 65  iables that refe
20780 72 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73  r to the various
20790 20 6e 6f 6e 2d 64 61 74 61 20 66 69 6c 65 73 0d   non-data files.
207a0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
207b0 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
207c0 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20 66   tests in this f
207d0 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ile...        #.
207e0 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 6e 74  .        set ent
207f0 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46  ityFrameworkDllF
20800 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ile \..
20810 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65     [getBuildFile
20820 4e 61 6d 65 20 45 6e 74 69 74 79 46 72 61 6d 65  Name EntityFrame
20830 77 6f 72 6b 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20  work.dll]....
20840 20 20 20 20 20 73 65 74 20 69 6e 73 74 61 6c 6c       set install
20850 65 72 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75  erExeFile [getBu
20860 69 6c 64 46 69 6c 65 4e 61 6d 65 20 49 6e 73 74  ildFileName Inst
20870 61 6c 6c 65 72 2e 65 78 65 5d 0d 0a 20 20 20 20  aller.exe]..
20880 20 20 20 20 73 65 74 20 73 71 6c 69 74 65 44 65      set sqliteDe
20890 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 5b 67  signerDllFile [g
208a0 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20  etBuildFileName
208b0 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e  SQLite.Designer.
208c0 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dll]....
208d0 73 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51  set systemDataSQ
208e0 4c 69 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20  LiteDllFile \..
208f0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
20900 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73  uildFileName Sys
20910 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
20920 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dll]....
20930 73 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51  set systemDataSQ
20940 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20  LiteLinqDllFile
20950 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
20960 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
20970 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
20980 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 0d 0a 0d  ite.Linq.dll]...
20990 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 79 73  .        set sys
209a0 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36  temDataSQLiteEf6
209b0 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  DllFile \..
209c0 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64         [getBuild
209d0 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e  FileName System.
209e0 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e  Data.SQLite.EF6.
209f0 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dll]....
20a00 73 65 74 20 74 65 73 74 45 78 65 46 69 6c 65 20  set testExeFile
20a10 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
20a20 65 20 74 65 73 74 2e 65 78 65 5d 0d 0a 20 20 20  e test.exe]..
20a30 20 20 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e       set testLin
20a40 71 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69  qExeFile [getBui
20a50 6c 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 6c  ldFileName testl
20a60 69 6e 71 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20  inq.exe]..
20a70 20 20 73 65 74 20 74 65 73 74 45 66 36 45 78 65    set testEf6Exe
20a80 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69  File [getBuildFi
20a90 6c 65 4e 61 6d 65 20 74 65 73 74 65 66 36 2e 65  leName testef6.e
20aa0 78 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  xe]....        #
20ab0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
20ac0 3a 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69  : Setup the vari
20ad0 61 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72  ables that refer
20ae0 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20   to the various
20af0 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 20 20 20  data files..
20b00 20 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75      #       requ
20b10 69 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74  ired by the test
20b20 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d  s in this file..
20b30 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
20b40 20 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71      set testLinq
20b50 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  OutFile [file na
20b60 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
20b70 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
20b80 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
20b90 74 44 61 74 61 50 61 74 68 5d 20 74 65 73 74 6c  tDataPath] testl
20ba0 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20 20 20  inq.out]]....
20bb0 20 20 20 20 20 73 65 74 20 6e 6f 72 74 68 77 69       set northwi
20bc0 6e 64 45 66 44 62 46 69 6c 65 20 5b 66 69 6c 65  ndEfDbFile [file
20bd0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
20be0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
20bf0 20 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72 6e        [file dirn
20c00 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  ame [file dirnam
20c10 65 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74  e [getSQLiteTest
20c20 44 61 74 61 50 61 74 68 5d 5d 5d 20 5c 0d 0a 20  DataPath]]] \..
20c30 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 6c             testl
20c40 69 6e 71 20 6e 6f 72 74 68 77 69 6e 64 45 46 2e  inq northwindEF.
20c50 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  db]]....
20c60 73 65 74 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65  set nonWalDbFile
20c70 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
20c80 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
20c90 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
20ca0 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
20cb0 74 68 5d 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d  th] nonWal.db]].
20cc0 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 77  ...        set w
20cd0 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e  alDbFile [file n
20ce0 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
20cf0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
20d00 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
20d10 73 74 44 61 74 61 50 61 74 68 5d 20 77 61 6c 2e  stDataPath] wal.
20d20 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  db]]....
20d30 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
20d40 45 3a 20 54 68 65 20 76 61 72 69 6f 75 73 20 69  E: The various i
20d50 6e 73 74 61 6c 6c 2f 75 6e 69 6e 73 74 61 6c 6c  nstall/uninstall
20d60 20 6c 6f 67 20 66 69 6c 65 73 20 75 73 65 64 20   log files used
20d70 74 6f 20 74 65 73 74 20 74 68 65 0d 0a 20 20 20  to test the..
20d80 20 20 20 20 20 23 20 20 20 20 20 20 20 64 65 73       #       des
20d90 69 67 6e 2d 74 69 6d 65 20 63 6f 6d 70 6f 6e 65  ign-time compone
20da0 6e 74 20 69 6e 73 74 61 6c 6c 65 72 2e 0d 0a 20  nt installer...
20db0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
20dc0 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c    set testInstal
20dd0 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b  lVs2005LogFile [
20de0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
20df0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
20e00 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51            [getSQ
20e10 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
20e20 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74  ] Installer_Test
20e30 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d  _Vs2005.log]]...
20e40 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73  .        set tes
20e50 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f  tInstallVs2008Lo
20e60 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
20e70 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
20e80 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
20e90 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
20ea0 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c  ataPath] Install
20eb0 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c  er_Test_Vs2008.l
20ec0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
20ed0 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56  set testInstallV
20ee0 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b 66 69  s2010LogFile [fi
20ef0 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
20f00 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
20f10 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
20f20 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
20f30 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  Installer_Test_V
20f40 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2010.log]]....
20f50 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49         set testI
20f60 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46  nstallVs2012LogF
20f70 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
20f80 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
20f90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
20fa0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
20fb0 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72  aPath] Installer
20fc0 5f 54 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67  _Test_Vs2012.log
20fd0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  ]]....        se
20fe0 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32  t testInstallVs2
20ff0 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65  013LogFile [file
21000 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
21010 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
21020 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
21030 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e  TestDataPath] In
21040 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
21050 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  013.log]]....
21060 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73       set testIns
21070 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c  tallVs2015LogFil
21080 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
21090 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
210a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
210b0 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
210c0 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54  ath] Installer_T
210d0 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d 5d  est_Vs2015.log]]
210e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
210f0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
21100 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65  005LogFile [file
21110 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
21120 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
21130 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
21140 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e  TestDataPath] Un
21150 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  installer_Test_V
21160 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2005.log]]....
21170 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55         set testU
21180 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f  ninstallVs2008Lo
21190 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
211a0 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
211b0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
211c0 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
211d0 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61  ataPath] Uninsta
211e0 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38  ller_Test_Vs2008
211f0 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
21200 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74    set testUninst
21210 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65  allVs2010LogFile
21220 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
21230 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
21240 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
21250 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
21260 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f  th] Uninstaller_
21270 54 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d  Test_Vs2010.log]
21280 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
21290 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73   testUninstallVs
212a0 32 30 31 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c  2012LogFile [fil
212b0 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
212c0 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
212d0 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
212e0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55  eTestDataPath] U
212f0 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f  ninstaller_Test_
21300 56 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a  Vs2012.log]]....
21310 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
21320 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c  UninstallVs2013L
21330 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
21340 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
21350 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
21360 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
21370 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74  DataPath] Uninst
21380 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31  aller_Test_Vs201
21390 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  3.log]]....
213a0 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73     set testUnins
213b0 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c  tallVs2015LogFil
213c0 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
213d0 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
213e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
213f0 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
21400 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72  ath] Uninstaller
21410 5f 54 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67  _Test_Vs2015.log
21420 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 23  ]]....        ##
21430 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
21470 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20  #####....
21480 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74   if {![haveConst
21490 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
214a0 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20  s file_ \..
214b0 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
214c0 6c 20 24 65 6e 74 69 74 79 46 72 61 6d 65 77 6f  l $entityFramewo 214d0 72 6b 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 rkDllFile]]]} th 214e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 214f0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
21500 73 74 5f 63 68 61 6e 6e 65 6c 20 24 65 6e 74 69  st_channel $enti 21510 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 tyFrameworkDllFi 21520 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d le.. }... 21530 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 . if {![h 21540 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 aveConstraint [a 21550 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 21560 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 21570 66 69 6c 65 20 74 61 69 6c 20 24 69 6e 73 74 61 file tail$insta
21580 6c 6c 65 72 45 78 65 46 69 6c 65 5d 5d 5d 7d 20  llerExeFile]]]}
21590 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
215a0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $215b0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 69 6e test_channel$in
215c0 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 49  stallerExeFile I
215d0 6e 73 74 61 6c 6c 65 72 2e 65 78 65 0d 0a 20 20  nstaller.exe..
215e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
215f0 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
21600 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
21610 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
21620 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
21630 61 69 6c 20 24 73 71 6c 69 74 65 44 65 73 69 67  ail $sqliteDesig 21640 6e 65 72 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 nerDllFile]]]} t 21650 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 21660 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
21670 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 71 6c  est_channel $sql 21680 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 iteDesignerDllFi 21690 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d le.. }... 216a0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 . if {![h 216b0 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 aveConstraint [a 216c0 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 216d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 216e0 66 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 file tail$syste
216f0 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69  mDataSQLiteDllFi
21700 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
21710 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
21720 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 21730 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 nel$systemDataS
21740 51 4c 69 74 65 44 6c 6c 46 69 6c 65 0d 0a 20 20  QLiteDllFile..
21750 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
21760 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
21770 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
21780 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
21790 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
217a0 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53  ail $systemDataS 217b0 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 QLiteLinqDllFile 217c0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 217d0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 217e0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
217f0 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c  l $systemDataSQL 21800 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d 0a iteLinqDllFile.. 21810 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 21820 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 21830 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 21840 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 21850 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 21860 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 tail$systemDat
21870 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c  aSQLiteEf6DllFil
21880 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
21890 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
218a0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 218b0 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 el$systemDataSQ
218c0 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 0d 0a  LiteEf6DllFile..
218d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
218e0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43       if {![haveC
218f0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
21900 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20  dArgs file_ \..
21910 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
21920 20 74 61 69 6c 20 24 74 65 73 74 45 78 65 46 69   tail $testExeFi 21930 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 21940 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 21950 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
21960 6e 65 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65  nel $testExeFile 21970 20 74 65 73 74 2e 65 78 65 0d 0a 20 20 20 20 20 test.exe.. 21980 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 21990 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 219a0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 219b0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 219c0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 219d0 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c$testLinqExeFil
219e0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
219f0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
21a00 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 21a10 65 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 el$testLinqExeF
21a20 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65  ile testlinq.exe
21a30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
21a40 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
21a50 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
21a60 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
21a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
21a80 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45 66 36  le tail $testEf6 21a90 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e ExeFile]]]} then 21aa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 21ab0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
21ac0 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 66  _channel $testEf 21ad0 36 45 78 65 46 69 6c 65 20 74 65 73 74 65 66 36 6ExeFile testef6 21ae0 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d .exe.. }. 21af0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 21b00 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 21b10 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 21b20 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 21b30 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
21b40 74 4c 69 6e 71 4f 75 74 46 69 6c 65 5d 5d 5d 7d  tLinqOutFile]]]}
21b50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
21b60 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
21b70 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
21b80 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a  estLinqOutFile..
21b90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
21ba0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43       if {![haveC
21bb0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
21bc0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20  dArgs file_ \..
21bd0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
21be0 20 74 61 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64   tail $northwind 21bf0 45 66 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 EfDbFile]]]} the 21c00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 21c10 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
21c20 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 72 74 68  t_channel $north 21c30 77 69 6e 64 45 66 44 62 46 69 6c 65 0d 0a 20 20 windEfDbFile.. 21c40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 21c50 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 21c60 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 21c70 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 21c80 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 21c90 61 69 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c ail$nonWalDbFil
21ca0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
21cb0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
21cc0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 21cd0 65 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 el$nonWalDbFile
21ce0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
21cf0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
21d00 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
21d10 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
21d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
21d30 6c 65 20 74 61 69 6c 20 24 77 61 6c 44 62 46 69  le tail $walDbFi 21d40 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 21d50 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 21d60 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
21d70 6e 65 6c 20 24 77 61 6c 44 62 46 69 6c 65 0d 0a  nel $walDbFile.. 21d80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 21d90 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 21da0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 21db0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 21dc0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 21dd0 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 tail$testInsta
21de0 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d  llVs2005LogFile]
21df0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
21e00 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
21e10 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 21e20 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
21e30 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20  005LogFile..
21e40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
21e50 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74   if {![haveConst
21e60 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
21e70 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20  s file_ \..
21e80 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
21e90 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 21ea0 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 2008LogFile]]]} 21eb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 21ec0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
21ed0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te 21ee0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c stInstallVs2008L 21ef0 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 ogFile.. 21f00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 21f10 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 21f20 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 21f30 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 21f40 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 [file tail$t
21f50 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30  estInstallVs2010
21f60 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  LogFile]]]} then
21f70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
21f80 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 21f90 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e _channel$testIn
21fa0 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69  stallVs2010LogFi
21fb0 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  le..        }...
21fc0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
21fd0 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
21fe0 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
21ff0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
22000 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49  file tail $testI 22010 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 nstallVs2012LogF 22020 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 22030 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 22040 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
22050 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  nnel $testInstal 22060 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a lVs2012LogFile.. 22070 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 22080 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 22090 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 220a0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 220b0 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 220c0 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 tail$testInsta
220d0 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d  llVs2013LogFile]
220e0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
220f0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
22100 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 22110 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
22120 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20  013LogFile..
22130 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
22140 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74   if {![haveConst
22150 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
22160 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20  s file_ \..
22170 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
22180 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 22190 32 30 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 2015LogFile]]]} 221a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 221b0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
221c0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65  test_channel $te 221d0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c stInstallVs2015L 221e0 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 ogFile.. 221f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 22200 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 22210 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 22220 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 22230 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 [file tail$t
22240 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
22250 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68  05LogFile]]]} th
22260 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
22270 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 22280 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 st_channel$test
22290 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c  UninstallVs2005L
222a0 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  ogFile..
222b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
222c0 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
222d0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
222e0 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
222f0 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74     [file tail $t 22300 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 22310 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 08LogFile]]]} th 22320 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 22330 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
22340 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 22350 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c UninstallVs2008L 22360 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 ogFile.. 22370 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 22380 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 22390 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 223a0 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 223b0 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 [file tail$t
223c0 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
223d0 31 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68  10LogFile]]]} th
223e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
223f0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 22400 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 st_channel$test
22410 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c  UninstallVs2010L
22420 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  ogFile..
22430 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
22440 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
22450 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
22460 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
22470 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74     [file tail $t 22480 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 22490 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 12LogFile]]]} th 224a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 224b0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
224c0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 224d0 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c UninstallVs2012L 224e0 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 ogFile.. 224f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 22500 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 22510 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 22520 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 22530 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 [file tail$t
22540 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
22550 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68  13LogFile]]]} th
22560 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
22570 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 22580 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 st_channel$test
22590 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c  UninstallVs2013L
225a0 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20  ogFile..
225b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
225c0 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
225d0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
225e0 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
225f0 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74     [file tail $t 22600 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 22610 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 15LogFile]]]} th 22620 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 22630 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
22640 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 22650 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c UninstallVs2015L 22660 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 ogFile.. 22670 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. }.. 22680 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 }..... proc r 22690 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c 65 unSQLiteTestFile 226a0 73 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a sEpilogue {} {.. 226b0 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 uplevel 1 226c0 7b 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 {.. unset 226d0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a -nocomplain \.. 226e0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 test 226f0 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c UninstallVs2015L 22700 6f 67 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 ogFile testUnins 22710 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c tallVs2013LogFil 22720 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 22730 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 22740 32 30 31 32 4c 6f 67 46 69 6c 65 20 74 65 73 74 2012LogFile test 22750 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c UninstallVs2010L 22760 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 ogFile \.. 22770 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 testUninst 22780 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 allVs2008LogFile 22790 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 227a0 32 30 30 35 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 2005LogFile \.. 227b0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 49 testI 227c0 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 nstallVs2015LogF 227d0 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 ile testInstallV 227e0 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5c 0d 0a s2013LogFile \.. 227f0 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 test 22800 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 InstallVs2012Log 22810 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c File testInstall 22820 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5c 0d Vs2010LogFile \. 22830 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 . tes 22840 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f tInstallVs2008Lo 22850 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c gFile testInstal 22860 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a lVs2005LogFile.. 22870 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 .. unset 22880 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 -nocomplain \.. 22890 20 20 20 20 20 20 20 20 20 20 20 6e 6f 72 74 68 north 228a0 77 69 6e 64 45 66 44 62 46 69 6c 65 20 74 65 73 windEfDbFile tes 228b0 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c 0d 0a tLinqOutFile \.. 228c0 20 20 20 20 20 20 20 20 20 20 20 20 77 61 6c 44 walD 228d0 62 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 46 69 bFile nonWalDbFi 228e0 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e le.... un 228f0 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 set -nocomplain 22900 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 22910 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 74 65 estEf6ExeFile te 22920 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 5c 0d stLinqExeFile \. 22930 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 . tes 22940 74 45 78 65 46 69 6c 65 20 73 79 73 74 65 6d 44 tExeFile systemD 22950 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 ataSQLiteEf6DllF 22960 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 22970 20 20 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c systemDataSQL 22980 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 73 iteLinqDllFile s 22990 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 ystemDataSQLiteD 229a0 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 llFile \.. 229b0 20 20 20 20 20 20 73 71 6c 69 74 65 44 65 73 69 sqliteDesi 229c0 67 6e 65 72 44 6c 6c 46 69 6c 65 20 69 6e 73 74 gnerDllFile inst 229d0 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a allerExeFile \.. 229e0 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 74 69 enti 229f0 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 tyFrameworkDllFi 22a00 6c 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 le.. }.. 22a10 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 22a20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 70 69 runSQLiteTestEpi 22a30 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 logue {} {.. 22a40 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 22a50 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 E: Skip running 22a60 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f our custom epilo 22a70 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 gue if the main 22a80 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 one has been.. 22a90 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 # skip 22aa0 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ped... #.. 22ab0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 22ac0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c exists ::no(epil 22ad0 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 ogue.eagle)]} th 22ae0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 22af0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 22b00 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 Show when our t 22b10 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 65 6e ests actually en 22b20 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 ded (now)... 22b30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 22b40 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
22b50 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
22b60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22b70 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74  "---- System.Dat
22b80 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73 20 65  a.SQLite tests e
22b90 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a 20 20 20  nded at " \..
22ba0 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20           [clock
22bb0 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65  format [clock se
22bc0 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20  conds]] \n]....
22bd0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
22be0 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74    # NOTE: Load t
22bf0 68 65 20 22 65 70 69 6c 6f 67 75 65 22 20 63 75  he "epilogue" cu
22c00 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e  stom per-user an
22c10 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65  d/or per-host te
22c20 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  st..        #
22c30 20 20 20 20 73 65 74 74 69 6e 67 73 20 6e 6f 77      settings now
22c40 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
22c50 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20        uplevel 1
22c60 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65  [list loadSQLite
22c70 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a  TestSettings $:: 22c80 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 65 70 test_channel .ep 22c90 69 6c 6f 67 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 ilogue].... 22ca0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 22cb0 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 BUGFIX: Before c 22cc0 68 65 63 6b 69 6e 67 20 74 68 65 20 66 69 6e 61 hecking the fina 22cd0 6c 20 72 65 73 6f 75 72 63 65 73 20 69 6e 20 75 l resources in u 22ce0 73 65 20 62 79 20 53 51 4c 69 74 65 2c 20 6d 61 se by SQLite, ma 22cf0 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ke.. # 22d00 20 20 20 20 20 20 73 75 72 65 20 62 6f 74 68 20 sure both 22d10 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 of the PRAGMA re 22d20 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 lated directory 22d30 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e names are freed. 22d40 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 22d50 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 22d60 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 iteDirectories$
22d70 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74  ::test_channel t
22d80 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  rue....        #
22d90 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
22da0 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 68  : Also report th
22db0 65 20 72 65 73 6f 75 72 63 65 20 75 73 61 67 65  e resource usage
22dc0 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74   after running t
22dd0 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20  he tests...
22de0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
22df0 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72  portSQLiteResour
22e00 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ces $::test_chan 22e10 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 nel.... # 22e20 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 22e30 3a 20 52 65 70 6f 72 74 20 74 68 65 20 63 72 69 : Report the cri 22e40 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 tical handle cou 22e50 6e 74 73 20 61 66 74 65 72 20 72 75 6e 6e 69 6e nts after runnin 22e60 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 g the tests... 22e70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 22e80 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 getSQLiteHandle 22e90 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73 74 5f 63 Counts$::test_c
22ea0 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20  hannel....
22eb0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
22ec0 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72  OTE: If necessar
22ed0 79 2c 20 64 69 73 61 62 6c 65 20 73 68 61 72 65  y, disable share
22ee0 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77  d-cache mode now
22ef0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
22f00 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75        if {[hasRu
22f10 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72  ntimeOption shar
22f20 65 64 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b  edCache]} then {
22f30 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6e 61 62  ..          enab
22f40 6c 65 53 68 61 72 65 64 43 61 63 68 65 20 24 3a  leSharedCache \$:
22f50 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 66 61  :test_channel fa
22f60 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  lse..        }..
22f70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
22f80 0c 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  ...    #########
22f90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22fa0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22fb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22fc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22fd0 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23  ##..    ########
22fe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22ff0 23 23 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20  ##### END Eagle
23000 4f 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23  ONLY ###########
23010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23020 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23  ###..    #######
23030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23060 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23070 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23  ####..  }....  #
23080 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65  ..  # NOTE: Save
23090 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
230a0 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
230b0 69 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e  ining this file.
230c0 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69  ..  #..  if {![i
230d0 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f  nfo exists commo
230e0 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68  n_directory]} th
230f0 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f  en {..    set co
23100 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b  mmon_directory [
23110 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e  file dirname [in
23120 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d  fo script]]..  }
23130 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54  ....  #..  # NOT
23140 45 3a 20 50 72 6f 76 69 64 65 20 74 68 65 20 53  E: Provide the S
23150 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
23160 65 20 74 65 73 74 20 70 61 63 6b 61 67 65 20 74  e test package t
23170 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65  o the interprete
23180 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61  r...  #..  packa
23190 67 65 20 70 72 6f 76 69 64 65 20 53 79 73 74 65  ge provide Syste
231a0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65  m.Data.SQLite.Te
231b0 73 74 20 31 2e 30 0d 0a 7d 0d 0a                 st 1.0..}..