System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact c1f06b2b6e771ac7924b1acd50a525bc81302961:

• File lib/System.Data.SQLite/common.eagle — part of check-in [085a9f8b8f] at 2016-03-21 21:46:48 on branch trunk — Preliminary work on getting the test suite to run under Mono on Unix. (user: mistachkin size: 155033)

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 3b 20 23 20 turn netFx46; # 1fd0: 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 46 78 34 TODO: Or "netFx4 1fe0: 36 31 22 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 61"?.. 1ff0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 2000: 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 default {.. 2010: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 2020: 20 6e 65 74 46 78 33 35 3b 20 23 20 54 4f 44 4f netFx35; # TODO 2030: 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b : Good "fallback 2040: 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 " default?.. 2050: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2060: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2070: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. }.. 2080: 7d 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 }..... #.. 2090: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 # NOTE: This pr 20a0: 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 72 ocedure should r 20b0: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 eturn non-zero i 20c0: 66 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 f the configured 20d0: 20 74 65 73 74 0d 0a 20 20 20 20 23 20 20 20 20 test.. # 20e0: 20 20 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6d platform is m 20f0: 6f 73 74 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 ost likely the d 2100: 65 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73 20 efault for this 2110: 6d 61 63 68 69 6e 65 2e 0d 0a 20 20 20 20 23 0d machine... #. 2120: 0a 20 20 20 20 70 72 6f 63 20 69 73 44 65 66 61 . proc isDefa 2130: 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d ultBuildPlatform 2140: 20 7b 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 { {verbose fals 2150: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 2160: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 2170: 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34 20 unning on WoW64 2180: 69 73 20 6e 65 76 65 72 20 74 68 65 20 64 65 66 is never the def 2190: 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a ault platform... 21a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 21b0: 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57 f {[isRunningWoW 21c0: 36 34 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 64]} then {.. 21d0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
21e0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
21f0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 2200: 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 2210: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 2220: 2d 20 64 65 74 65 63 74 65 64 20 6e 6f 6e 2d 64 - detected non-d 2230: 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 20 efault platform 2240: 28 57 6f 57 36 34 29 5c 6e 22 0d 0a 20 20 20 20 (WoW64)\n".. 2250: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 }.. r 2260: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. 2270: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 2280: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 2290: 68 69 73 20 68 61 73 20 61 20 67 6f 6f 64 20 63 his has a good c 22a0: 68 61 6e 63 65 20 6f 66 20 62 65 69 6e 67 20 74 hance of being t 22b0: 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 he default platf 22c0: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 orm... #.. 22d0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
22e0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
22f0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 2300: 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 64 _channel "---- d 2310: 65 74 65 63 74 65 64 20 64 65 66 61 75 6c 74 20 etected default 2320: 70 6c 61 74 66 6f 72 6d 5c 6e 22 0d 0a 20 20 20 platform\n".. 2330: 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 }.. retu 2340: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 7d 0d 0a rn true.. }.. 2350: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 2360: 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 7b 20 6e uildPlatform { n 2370: 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20 20 20 ative } {.. 2380: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 2390: 73 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 s ::test_platfor 23a0: 6d 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 m] && \.. 23b0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 23c0: 68 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f h$::test_platfo
23d0: 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  rm] > 0} then {.
23e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
23f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
2400: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65  the specified te
2410: 73 74 20 70 6c 61 74 66 6f 72 6d 2e 20 20 49 66  st platform.  If
2420: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69   this variable i
2430: 73 20 6e 6f 74 20 73 65 74 2c 0d 0a 20 20 20 20  s not set,..
2440: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
2450: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69  default value wi
2460: 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74  ll be based on t
2470: 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69  he machine archi
2480: 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20  tecture...
2490: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
24a0: 75 72 6e 20 5b 65 78 70 72 20 7b 24 6e 61 74 69  urn [expr {$nati 24b0: 76 65 20 3f 20 24 3a 3a 74 65 73 74 5f 70 6c 61 ve ?$::test_pla
24c0: 74 66 6f 72 6d 20 3a 20 22 22 7d 5d 0d 0a 20 20  tform : ""}]..
24d0: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69      } elseif {[i
24e0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
24f0: 74 5f 6d 61 63 68 69 6e 65 5d 20 26 26 20 5c 0d  t_machine] && \.
2500: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
2510: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 2520: 74 5f 6d 61 63 68 69 6e 65 5d 20 3e 20 30 7d 20 t_machine] > 0} 2530: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2540: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2550: 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 20 62 75 E: For native bu 2560: 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 74 68 65 ilds, return the 2570: 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 platform name c 2580: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d orresponding to. 2590: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 25a0: 20 74 68 65 20 74 65 73 74 20 6d 61 63 68 69 6e the test machin 25b0: 65 20 61 72 63 68 69 74 65 63 74 75 72 65 3b 20 e architecture; 25c0: 6f 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 otherwise, retur 25d0: 6e 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 n an empty.. 25e0: 20 20 20 20 23 20 20 20 20 20 20 20 73 74 72 69 # stri 25f0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ng... #.. 2600: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 2610: 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 expr {.. 2620: 20 20 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63$native ? [mac
2630: 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24  hineToPlatform $2640: 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 ::test_machine] 2650: 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d : "".. }] 2660: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif 2670: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 2680: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 :tcl_platform(ma 2690: 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d chine)]} then {. 26a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 26b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 # NOTE: For 26c0: 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 72 native builds, r 26d0: 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 6f eturn the platfo 26e0: 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f rm name correspo 26f0: 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 20 nding to.. 2700: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6d 61 # the ma 2710: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 chine architectu 2720: 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72 re; otherwise, r 2730: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 2740: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 tring... 2750: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 2760: 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 n [expr {.. 2770: 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20 5b$native ? [
2780: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72  machineToPlatfor
2790: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  m $::tcl_platfor 27a0: 6d 28 6d 61 63 68 69 6e 65 29 5d 20 3a 20 22 22 m(machine)] : "" 27b0: 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 .. }].. 27c0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 27d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 27e0: 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61 63 68 # NOTE: No mach 27f0: 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 ine architecture 2800: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 is available, r 2810: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 2820: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 tring... 2830: 23 20 20 20 20 20 20 20 49 74 20 69 73 20 69 6d # It is im 2840: 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 75 72 portant to retur 2850: 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e n an empty strin 2860: 67 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74 g here because t 2870: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 2880: 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 74 68 result of th 2890: 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 61 79 is procedure may 28a0: 20 62 65 20 75 73 65 64 20 77 69 74 68 20 5b 66 be used with [f 28b0: 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 ile join]... 28c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 28d0: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 eturn "".. 28e0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 28f0: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6f proc getBuildCo 2900: 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 7d 20 7b nfiguration {} { 2910: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 2920: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 # NOTE: See if 2930: 74 68 65 20 22 63 6f 6e 66 69 67 75 72 61 74 69 the "configurati 2940: 6f 6e 22 20 73 65 74 74 69 6e 67 20 68 61 73 20 on" setting has 2950: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 been overridden 2960: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 by the.. # 2970: 20 20 20 20 20 20 75 73 65 72 20 28 65 2e 67 2e user (e.g. 2980: 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 on the command 2990: 6c 69 6e 65 29 2e 20 20 54 68 69 73 20 68 65 6c line). This hel 29a0: 70 73 20 63 6f 6e 74 72 6f 6c 20 65 78 61 63 74 ps control exact 29b0: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ly.. # 29c0: 20 20 77 68 69 63 68 20 73 65 74 20 6f 66 20 62 which set of b 29d0: 69 6e 61 72 69 65 73 20 77 65 20 61 72 65 20 74 inaries we are t 29e0: 65 73 74 69 6e 67 20 28 69 2e 65 2e 20 74 68 6f esting (i.e. tho 29f0: 73 65 20 62 75 69 6c 74 20 69 6e 20 74 68 65 0d se built in the. 2a00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 . # " 2a10: 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 Debug" or "Relea 2a20: 73 65 22 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 se" build config 2a30: 75 72 61 74 69 6f 6e 73 29 2e 20 20 54 6f 20 6f urations). To o 2a40: 76 65 72 72 69 64 65 20 74 68 69 73 0d 0a 20 20 verride this.. 2a50: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 75 # valu 2a60: 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e e via the comman 2a70: 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 20 d line, enter a 2a80: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 command similar 2a90: 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20 20 20 20 20 to one of.. 2aa0: 20 23 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c # the fol 2ab0: 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f lowing (all on o 2ac0: 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 ne line):.. 2ad0: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 2ae0: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 2af0: 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 -anyInitialize 2b00: 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66 69 67 "set test_config 2b10: 75 72 61 74 69 6f 6e 20 44 65 62 75 67 22 0d 0a uration Debug".. 2b20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 2b30: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 2b40: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 all.eagle.. 2b50: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 2b60: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 2b70: 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 -anyInitialize 2b80: 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66 69 67 "set test_config 2b90: 75 72 61 74 69 6f 6e 20 52 65 6c 65 61 73 65 22 uration Release" 2ba0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 2bb0: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 -file .\path\t 2bc0: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 o\all.eagle.. 2bd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 #.. # 2be0: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 EagleShell.e 2bf0: 78 65 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c xe -file .\path\ 2c00: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 20 2d 70 72 to\all.eagle -pr 2c10: 65 54 65 73 74 0d 0a 20 20 20 20 20 20 23 20 20 eTest.. # 2c20: 20 20 20 20 20 20 20 22 75 6e 73 65 74 20 2d 6e "unset -n 2c30: 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 63 ocomplain test_c 2c40: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 0d 0a 20 onfiguration".. 2c50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 2c60: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 2c70: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 :test_configurat 2c80: 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ion] && \.. 2c90: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 2ca0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 gth$::test_conf
2cb0: 69 67 75 72 61 74 69 6f 6e 5d 20 3e 20 30 7d 20  iguration] > 0}
2cc0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2cd0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
2ce0: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69  E: Use the speci
2cf0: 66 69 65 64 20 74 65 73 74 20 63 6f 6e 66 69 67  fied test config
2d00: 75 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 65  uration.  The de
2d10: 66 61 75 6c 74 20 76 61 6c 75 65 20 75 73 65 64  fault value used
2d20: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2d30: 20 20 66 6f 72 20 74 68 69 73 20 76 61 72 69 61    for this varia
2d40: 62 6c 65 20 69 73 20 74 79 70 69 63 61 6c 6c 79  ble is typically
2d50: 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 20 73   "Release", as s
2d60: 65 74 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a  et by the test..
2d70: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2d80: 73 75 69 74 65 20 69 74 73 65 6c 66 2e 0d 0a 20  suite itself...
2d90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2da0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74    return $::test 2db0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a _configuration.. 2dc0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 2dd0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2de0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72 6d 61 # NOTE: Norma 2df0: 6c 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e 65 76 lly, we will nev 2e00: 65 72 20 68 69 74 20 74 68 69 73 20 63 61 73 65 er hit this case 2e10: 20 62 65 63 61 75 73 65 20 74 68 65 20 76 61 6c because the val 2e20: 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 ue of the.. 2e30: 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 # test 2e40: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 61 configuration va 2e50: 72 69 61 62 6c 65 20 69 73 20 61 6c 77 61 79 73 riable is always 2e60: 20 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 set by the test 2e70: 20 73 75 69 74 65 0d 0a 20 20 20 20 20 20 20 20 suite.. 2e80: 23 20 20 20 20 20 20 20 69 74 73 65 6c 66 3b 20 # itself; 2e90: 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 20 however, it can 2ea0: 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20 75 73 be overridden us 2eb0: 69 6e 67 20 74 68 65 20 75 6e 73 65 74 20 63 6f ing the unset co 2ec0: 6d 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 mmand.. # 2ed0: 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 from the 2ee0: 2d 70 72 65 54 65 73 74 20 6f 70 74 69 6f 6e 20 -preTest option 2ef0: 74 6f 20 74 68 65 20 74 65 73 74 20 73 75 69 74 to the test suit 2f00: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 2f10: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
2f20: 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28  :eagle_platform(
2f30: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 0d 0a  configuration)..
2f40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2f50: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
2f60: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
2f70: 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ns {} {..      #
2f80: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
2f90: 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 74 20  See if the list
2fa0: 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72  of test configur
2fb0: 61 74 69 6f 6e 73 20 68 61 73 20 62 65 65 6e 20  ations has been
2fc0: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20  overridden by..
2fd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
2fe0: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74   user (e.g. on t
2ff0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29  he command line)
3000: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
3010: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
3020: 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67  ts ::test_config
3030: 75 72 61 74 69 6f 6e 73 5d 20 26 26 20 5c 0d 0a  urations] && \..
3040: 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67            [lleng
3050: 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69  th $::test_confi 3060: 67 75 72 61 74 69 6f 6e 73 5d 20 3e 20 30 7d 20 gurations] > 0} 3070: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 3080: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 3090: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 30a0: 66 69 65 64 20 6c 69 73 74 20 6f 66 20 74 65 73 fied list of tes 30b0: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 t configurations 30c0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 30d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
30e0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
30f0: 6f 6e 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ons..      } els
3100: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
3110: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
3120: 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  Use the default
3130: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e  list of test con
3140: 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20  figurations...
3150: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
3160: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 44 65   return [list De
3170: 62 75 67 20 52 65 6c 65 61 73 65 5d 0d 0a 20 20  bug Release]..
3180: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
3190: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
31a0: 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 20  ldBaseDirectory
31b0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
31c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67       # NOTE: Fig
31d0: 75 72 65 20 6f 75 74 20 74 68 65 20 62 61 73 65  ure out the base
31e0: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65   directory where
31f0: 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 73 20   all the builds
3200: 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20  should be..
3210: 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 65 64   #       located
3220: 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 65 20  .  This will be
3230: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 74 68  the directory th
3240: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  at contains the
3250: 61 63 74 75 61 6c 0d 0a 20 20 20 20 20 20 23 20  actual..      #
3260: 20 20 20 20 20 20 62 75 69 6c 64 20 6f 75 74 70        build outp
3270: 75 74 20 64 69 72 65 63 74 6f 72 79 20 28 65 2e  ut directory (e.
3280: 67 2e 20 70 61 72 65 6e 74 20 6f 66 20 22 62 69  g. parent of "bi
3290: 6e 22 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  n")...      #..
32a0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
32b0: 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 62 61  xists ::build_ba
32c0: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26  se_directory] &&
32d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
32e0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 32f0: 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65 63 build_base_direc 3300: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 3310: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 3320: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 3330: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 3340: 65 20 62 75 69 6c 64 20 62 61 73 65 20 64 69 72 e build base dir 3350: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 3360: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 overridden;.. 3370: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 3380: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 refore, use it v 3390: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 erbatim... 33a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 33b0: 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 urn$::build_bas
33c0: 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  e_directory..
33d0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e     } elseif {[in
33e0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d  fo exists ::comm
33f0: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26  on_directory] &&
3400: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
3410: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 3420: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 common_directory 3430: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 3440: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3450: 20 20 23 20 4e 4f 54 45 3a 20 4e 65 78 74 2c 20 # NOTE: Next, 3460: 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 fallback to the 3470: 67 72 61 6e 64 70 61 72 65 6e 74 20 64 69 72 65 grandparent dire 3480: 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f 6e 65 ctory of the one 3490: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 34a0: 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 69 containing thi 34b0: 73 20 66 69 6c 65 20 28 69 2e 65 2e 20 22 63 6f s file (i.e. "co 34c0: 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20 69 66 mmon.eagle"), if 34d0: 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 available... 34e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 34f0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 return [file dir 3500: 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 name [file dirna 3510: 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 me$::common_dir
3520: 65 63 74 6f 72 79 5d 5d 0d 0a 20 20 20 20 20 20  ectory]]..
3530: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20  } elseif {[info
3540: 65 78 69 73 74 73 20 3a 3a 70 61 74 68 5d 20 26  exists ::path] &
3550: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
3560: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 3570: 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74 68 65 6e :path] > 0} then 3580: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 3590: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 35a0: 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 61 63 6b inally, fallback 35b0: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64 to the parent d 35c0: 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 irectory of the 35d0: 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 20 20 20 EagleTest.. 35e0: 20 20 20 23 20 20 20 20 20 20 20 70 61 74 68 2e # path. 35f0: 20 20 54 68 65 20 45 61 67 6c 65 54 65 73 74 20 The EagleTest 3600: 70 61 63 6b 61 67 65 20 67 75 61 72 61 6e 74 65 package guarante 3610: 65 73 20 74 68 61 74 20 74 68 69 73 20 76 61 72 es that this var 3620: 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 iable.. # 3630: 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65 20 73 will be s 3640: 65 74 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 et to the direct 3650: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 ory containing t 3660: 68 65 20 66 69 72 73 74 20 66 69 6c 65 20 74 6f he first file to 3670: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3680: 20 20 65 78 65 63 75 74 65 20 74 68 65 20 5b 72 execute the [r 3690: 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 65 5d 20 unTestPrologue] 36a0: 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 20 70 script library p 36b0: 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 rocedure... 36c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 36d0: 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 turn [file dirna 36e0: 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a 20 20 20 me$::path]..
36f0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
3700: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
3710: 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 74 68 20  # NOTE: No path
3720: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65  is available, re
3730: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74  turn an empty st
3740: 72 69 6e 67 2e 20 20 54 68 69 73 20 70 6f 69 6e  ring.  This poin
3750: 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
3760: 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65     should not be
3770: 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 20 20 20   reached...
3780: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
3790: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d  turn ""..      }
37a0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
37b0: 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 54 65  proc getSQLiteTe
37c0: 73 74 44 61 74 61 50 61 74 68 20 7b 7d 20 7b 0d  stDataPath {} {.
37d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
37e0: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  # NOTE: Figure o
37f0: 75 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  ut the directory
3800: 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 20 74   where all the t
3810: 65 73 74 20 64 61 74 61 20 66 69 6c 65 73 20 73  est data files s
3820: 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 23 20 20  hould..      #
3830: 20 20 20 20 20 62 65 20 6c 6f 63 61 74 65 64 2e       be located.
3840: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65    This should be
3850: 20 74 68 65 20 22 64 61 74 61 22 20 64 69 72 65   the "data" dire
3860: 63 74 6f 72 79 20 62 65 6e 65 61 74 68 20 74 68  ctory beneath th
3870: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
3880: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61   directory conta
3890: 69 6e 69 6e 67 20 74 68 65 20 61 63 74 75 61 6c  ining the actual
38a0: 20 74 65 73 74 20 73 63 72 69 70 74 73 2e 0d 0a   test scripts...
38b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
38c0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e  eturn [file join
38d0: 20 24 3a 3a 70 61 74 68 20 64 61 74 61 5d 0d 0a   $::path data].. 38e0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 38f0: 6f 63 20 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 oc isRunningWoW6 3900: 34 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 4 {} {.. #. 3910: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 3920: 6f 72 20 6e 6f 77 2c 20 6a 75 73 74 20 75 73 65 or now, just use 3930: 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 74 65 the existing te 3940: 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f st constraint fo 3950: 72 20 64 65 74 65 63 74 69 6e 67 0d 0a 20 20 20 r detecting.. 3960: 20 20 20 23 20 20 20 20 20 20 20 61 20 57 6f 57 # a WoW 3970: 36 34 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 64 process... 3980: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 3990: 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 rn [haveConstrai 39a0: 6e 74 20 77 6f 77 36 34 5d 0d 0a 20 20 20 20 7d nt wow64].. } 39b0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 ..... proc is 39c0: 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c MixedModeAssembl 39d0: 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76 61 y { fileName {va 39e0: 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 rName ""} } {.. 39f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 3a00: 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 6d 61 6b NOTE: First, mak 3a10: 65 20 73 75 72 65 20 74 68 65 20 74 65 73 74 20 e sure the test 3a20: 73 75 69 74 65 20 69 6e 66 72 61 73 74 72 75 63 suite infrastruc 3a30: 74 75 72 65 20 69 73 20 61 6c 6c 6f 77 65 64 20 ture is allowed 3a40: 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 to.. # 3a50: 20 20 75 73 65 20 74 68 65 20 5b 65 78 65 63 5d use the [exec] 3a60: 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 20 20 20 command... 3a70: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b #.. if {![ 3a80: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 3a90: 28 65 78 65 63 29 5d 20 26 26 20 21 5b 69 6e 66 (exec)] && ![inf 3aa0: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 3ab0: 72 46 6c 61 67 73 29 5d 7d 20 74 68 65 6e 20 7b rFlags)]} then { 3ac0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 3ad0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 3ae0: 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 the location of 3af0: 43 6f 72 46 6c 61 67 73 20 69 73 20 70 72 65 73 CorFlags is pres 3b00: 65 6e 74 20 69 6e 20 74 68 65 20 65 6e 76 69 72 ent in the envir 3b10: 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 onment,.. 3b20: 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 3b # use it; 3b30: 20 6f 74 68 65 72 77 69 73 65 20 61 73 73 75 6d otherwise assum 3b40: 65 20 69 74 20 69 73 20 69 6e 20 74 68 65 20 50 e it is in the P 3b50: 41 54 48 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ATH... #. 3b60: 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 72 . set cor 3b70: 46 6c 61 67 73 20 5b 65 78 70 72 20 7b 0d 0a 20 Flags [expr {.. 3b80: 20 20 20 20 20 20 20 20 20 5b 69 6e 66 6f 20 65 [info e 3b90: 78 69 73 74 73 20 3a 3a 65 6e 76 28 43 6f 72 46 xists ::env(CorF 3ba0: 6c 61 67 73 29 5d 20 3f 20 24 3a 3a 65 6e 76 28 lags)] ?$::env(
3bb0: 43 6f 72 46 6c 61 67 73 29 20 3a 20 22 43 6f 72  CorFlags) : "Cor
3bc0: 46 6c 61 67 73 22 0d 0a 20 20 20 20 20 20 20 20  Flags"..
3bd0: 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  }]....        #.
3be0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
3bf0: 20 41 74 74 65 6d 70 74 20 74 6f 20 65 78 65 63   Attempt to exec
3c00: 75 74 65 20 43 6f 72 46 6c 61 67 73 20 6f 6e 20  ute CorFlags on
3c10: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 69  the specified fi
3c20: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
3c30: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
3c40: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
3c50: 65 78 65 63 20 2d 2d 20 24 63 6f 72 46 6c 61 67  exec -- $corFlag 3c60: 73 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 s [file nativena 3c70: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 me$fileName]..
3c80: 20 20 20 20 20 20 20 7d 20 65 78 65 63 5d 20 3d         } exec] =
3c90: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
3ca0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
3cb0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 72      # NOTE: If r
3cc0: 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 72 20  equested by our
3cd0: 63 61 6c 6c 65 72 2c 20 61 74 74 65 6d 70 74 20  caller, attempt
3ce0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
3cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
3d00: 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72      platform for
3d10: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66   the specified f
3d20: 69 6c 65 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20  ile as well...
3d30: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
3d40: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
3d50: 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65   length $varName 3d60: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 3d70: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 3d80: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 3d90: 3a 20 53 74 6f 72 65 20 74 68 65 20 70 6c 61 74 : Store the plat 3da0: 66 6f 72 6d 20 69 6e 20 74 68 65 20 6e 61 6d 65 form in the name 3db0: 64 20 76 61 72 69 61 62 6c 65 20 69 6e 20 74 68 d variable in th 3dc0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 e.. # 3dd0: 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20 6f context o 3de0: 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 f our caller... 3df0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 3e00: 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20 upvar 3e10: 31 20 24 76 61 72 4e 61 6d 65 20 70 6c 61 74 66 1$varName platf
3e20: 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  orm....
3e30: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
3e40: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
3e50: 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  t to extract the
3e60: 20 50 45 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68   PE line from th
3e70: 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20  e captured..
3e80: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
3e90: 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68 69 73  output.  If this
3ea0: 20 76 61 6c 75 65 20 69 73 20 22 50 45 33 32 22   value is "PE32"
3eb0: 20 6f 72 20 22 50 45 33 32 2b 22 2c 20 74 68 65   or "PE32+", the
3ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
3ed0: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 66        assembly f
3ee0: 69 6c 65 20 69 73 20 33 32 2d 62 69 74 20 6f 72  ile is 32-bit or
3ef0: 20 36 34 2d 62 69 74 2c 20 72 65 73 70 65 63 74   64-bit, respect
3f00: 69 76 65 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  ively;..
3f10: 20 20 20 20 23 20 20 20 20 20 20 20 6f 74 68 65      #       othe
3f20: 72 77 69 73 65 2c 20 69 74 73 20 74 79 70 65 20  rwise, its type
3f30: 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a 20 20 20  is unknown...
3f40: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
3f50: 20 20 20 20 20 20 20 20 73 65 74 20 70 61 74 74          set patt
3f60: 65 72 6e 20 7b 5e 50 45 20 20 20 20 20 20 20 20  ern {^PE
3f70: 3a 20 28 50 45 33 32 7c 50 45 33 32 5c 2b 29 5c  : (PE32|PE32\+)\
3f80: 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  s+$}.... 3f90: 20 20 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20 if {[regexp 3fa0: 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 72 -line --$patter
3fb0: 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 70 65  n $exec dummy pe 3fc0: 33 32 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 32]} then {.. 3fd0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 3fe0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 48 41 # HA 3ff0: 43 4b 3a 20 54 68 69 73 20 5b 73 77 69 74 63 68 CK: This [switch 4000: 5d 20 61 73 73 75 6d 65 73 20 74 68 61 74 20 33 ] assumes that 3 4010: 32 2d 62 69 74 20 65 78 65 63 75 74 61 62 6c 65 2-bit executable 4020: 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 s are.. 4030: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 # alw 4040: 61 79 73 20 78 38 36 20 61 6e 64 20 74 68 61 74 ays x86 and that 4050: 20 36 34 2d 62 69 74 20 65 78 65 63 75 74 61 62 64-bit executab 4060: 6c 65 73 20 61 72 65 20 61 6c 77 61 79 73 0d 0a les are always.. 4070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 4080: 20 20 20 20 20 20 78 36 34 2e 0d 0a 20 20 20 20 x64... 4090: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 40a0: 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74 63 switc 40b0: 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 70 65 33 h -exact --$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 50 45 33 32 20 7b 0d 0a 20 20 20       PE32 {..
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
40f0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 57 69 6e 33  et platform Win3
4100: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  2..
4110: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
4120: 20 20 20 20 20 20 50 45 33 32 2b 20 7b 0d 0a 20        PE32+ {..
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4140: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 78 36   set platform x6
4150: 34 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  4..
4160: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
4170: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0d        default {.
4180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
4190: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
41a0: 22 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ""..
41b0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
41c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
41d0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
41f0: 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20 20  platform ""..
4200: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
4210: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
4220: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4230: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
4240: 74 20 74 6f 20 65 78 74 72 61 63 74 20 74 68 65  t to extract the
4250: 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 20 66 72 6f   ILONLY line fro
4260: 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a  m the captured..
4270: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
4280: 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 74 68    output.  If th
4290: 69 73 20 76 61 6c 75 65 20 69 73 20 7a 65 72 6f  is value is zero
42a0: 2c 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  , the specified
42b0: 66 69 6c 65 20 6d 75 73 74 0d 0a 20 20 20 20 20  file must..
42c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
42d0: 61 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  a mixed-mode ass
42e0: 65 6d 62 6c 79 3b 20 6f 74 68 65 72 77 69 73 65  embly; otherwise
42f0: 2c 20 69 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e  , it contains on
4300: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ly..          #
4310: 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 63 6f        managed co
4320: 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 20 20 20 20  mponents...
4330: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4340: 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e    set pattern {^
4350: 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 28 30 7c 31  ILONLY    : (0|1
4360: 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20 20  )\s+$}.... 4370: 20 20 20 20 69 66 20 7b 21 5b 72 65 67 65 78 70 if {![regexp 4380: 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 74 65 -line --$patte
4390: 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79 20 69  rn $exec dummy i 43a0: 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a lOnly]} then {.. 43b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 43c0: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 rn false.. 43d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 43e0: 20 20 20 69 66 20 7b 21 24 69 6c 4f 6e 6c 79 7d if {!$ilOnly}
43f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
4400: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
4410: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
4420: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
4430: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
4440: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
4450: 68 65 20 74 65 73 74 20 73 75 69 74 65 20 63 61  he test suite ca
4460: 6e 6e 6f 74 20 75 73 65 20 5b 65 78 65 63 5d 20  nnot use [exec]
4470: 6f 72 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20  or execution of
4480: 43 6f 72 46 6c 61 67 73 0d 0a 20 20 20 20 20 20  CorFlags..
4490: 23 20 20 20 20 20 20 20 66 61 69 6c 65 64 2c 20  #       failed,
44a0: 72 65 74 75 72 6e 20 66 61 6c 73 65 2e 0d 0a 20  return false...
44b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
44c0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
44d0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
44e0: 65 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65  etCoreBinaryFile
44f0: 4e 61 6d 65 73 4f 6e 6c 79 20 7b 7d 20 7b 0d 0a  NamesOnly {} {..
4500: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
4510: 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 63 68   NOTE: First, ch
4520: 65 63 6b 20 69 66 20 74 68 65 20 6c 69 73 74 20  eck if the list
4530: 6f 66 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72  of native librar
4540: 79 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73  y file names has
4550: 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20   been..      #
4560: 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20 6f 76       manually ov
4570: 65 72 72 69 64 64 65 6e 2e 0d 0a 20 20 20 20 20  erridden...
4580: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
4590: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 61 74  nfo exists ::nat
45a0: 69 76 65 5f 6c 69 62 72 61 72 79 5f 66 69 6c 65  ive_library_file
45b0: 5f 6e 61 6d 65 73 5d 20 26 26 20 5c 0d 0a 20 20  _names] && \..
45c0: 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68          [llength
45d0: 20 24 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61   $::native_libra 45e0: 72 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 3e ry_file_names] > 45f0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 4600: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4610: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 69 73 74 20 NOTE: The list 4620: 6f 66 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 of native librar 4630: 79 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 y file names has 4640: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e been overridden 4650: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 4660: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 4670: 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a e it verbatim... 4680: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 4690: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 6e 61 74 return$::nat
46a0: 69 76 65 5f 6c 69 62 72 61 72 79 5f 66 69 6c 65  ive_library_file
46b0: 5f 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20  _names..      }
46c0: 65 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f  elseif {[isWindo
46d0: 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ws]} then {..
46e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
46f0: 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73  # NOTE: Otherwis
4700: 65 2c 20 6f 6e 20 57 69 6e 64 6f 77 73 2c 20 61  e, on Windows, a
4710: 6c 77 61 79 73 20 75 73 65 20 74 68 65 20 64 65  lways use the de
4720: 66 61 75 6c 74 20 66 69 6c 65 20 6e 61 6d 65 0d  fault file name.
4730: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
4740: 20 22 73 71 6c 69 74 65 33 2e 64 6c 6c 22 2e 0d   "sqlite3.dll"..
4750: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4760: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74      return [list
4770: 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 0d 0a 20   sqlite3.dll]..
4780: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
4790: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
47a0: 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77    # NOTE: Otherw
47b0: 69 73 65 2c 20 72 65 74 75 72 6e 20 62 6f 74 68  ise, return both
47c0: 20 74 68 65 20 67 65 6e 65 72 69 63 20 50 4f 53   the generic POS
47d0: 49 58 20 66 69 6c 65 20 6e 61 6d 65 20 61 6e 64  IX file name and
47e0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
47f0: 20 20 20 20 20 20 4d 61 63 20 4f 53 20 58 20 66        Mac OS X f
4800: 69 6c 65 20 6e 61 6d 65 2c 20 73 69 6e 63 65 20  ile name, since
4810: 77 65 20 64 6f 20 6e 6f 74 20 63 75 72 72 65 6e  we do not curren
4820: 74 6c 79 20 68 61 76 65 20 61 6e 20 65 61 73 79  tly have an easy
4830: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4840: 20 20 77 61 79 20 74 6f 20 64 65 74 65 63 74 20    way to detect
4850: 77 68 69 63 68 20 6f 66 20 74 68 6f 73 65 20 70  which of those p
4860: 6c 61 74 66 6f 72 6d 73 20 77 65 20 61 72 65 20  latforms we are
4870: 72 75 6e 6e 69 6e 67 20 6f 6e 2e 0d 0a 20 20 20  running on...
4880: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4890: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 6c 69 62  return [list lib
48a0: 73 71 6c 69 74 65 33 2e 73 6f 20 6c 69 62 73 71  sqlite3.so libsq
48b0: 6c 69 74 65 33 2e 64 79 6c 69 62 5d 0d 0a 20 20  lite3.dylib]..
48c0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
48d0: 0a 20 20 20 20 70 72 6f 63 20 69 73 42 75 69 6c  .    proc isBuil
48e0: 64 41 76 61 69 6c 61 62 6c 65 20 7b 20 6e 61 74  dAvailable { nat
48f0: 69 76 65 20 64 69 72 65 63 74 6f 72 79 20 7b 76  ive directory {v
4900: 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a  arName ""} } {..
4910: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
4920: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
4930: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
4940: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74   file name for t
4950: 68 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d  he primary assem
4960: 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  bly..      #
4970: 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68     containing th
4980: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
4990: 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 63 6f 6d  Lite managed com
49a0: 70 6f 6e 65 6e 74 73 2e 20 20 49 74 0d 0a 20 20  ponents.  It..
49b0: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75      #       shou
49c0: 6c 64 20 62 65 20 6e 6f 74 65 64 20 74 68 61 74  ld be noted that
49d0: 20 74 68 69 73 20 61 73 73 65 6d 62 6c 79 20 66   this assembly f
49e0: 69 6c 65 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e  ile may also con
49f0: 74 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  tain the..
4a00: 23 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 63  #       native c
4a10: 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 61 20  omponents, if a
4a20: 6e 61 74 69 76 65 20 62 75 69 6c 64 20 69 73 20  native build is
4a30: 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 23  in use...      #
4a40: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
4a50: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
4a60: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
4a70: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 4a80: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 4a90: 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d Data.SQLite.dll] 4aa0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 ].... if {! 4ab0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
4ac0: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
4ad0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
4ae0: 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  false..      }..
4af0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
4b00: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
4b10: 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   to automaticall
4b20: 79 20 64 65 74 65 63 74 20 69 66 20 74 68 65 20  y detect if the
4b30: 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79  primary assembly
4b40: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4b50: 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 6e 61 74  contains any nat
4b60: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20  ive components,
4b70: 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20  if necessary...
4b80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
4b90: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
4ba0: 20 24 6e 61 74 69 76 65 5d 20 3d 3d 20 30 7d 20   $native] == 0} 4bb0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 4bc0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 4bd0: 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 th$varName] > 0
4be0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
4bf0: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 4c00: 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 Name$varName..
4c10: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
4c20: 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 20 5b      set native [
4c30: 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d  isMixedModeAssem
4c40: 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 76  bly $fileName$v
4c50: 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d  arName]..      }
4c60: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
4c70: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68     # NOTE: If th
4c80: 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62  e primary assemb
4c90: 6c 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73  ly also contains
4ca0: 20 74 68 65 20 6e 61 74 69 76 65 20 63 6f 6d 70   the native comp
4cb0: 6f 6e 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 23  onents,..      #
4cc0: 20 20 20 20 20 20 20 77 65 20 68 61 76 65 20 65         we have e
4cd0: 76 65 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65  verything we nee
4ce0: 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
4cf0: 20 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20     if {$native} 4d00: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 4d10: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 4d20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 4d30: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 . # NOTE: W 4d40: 68 61 74 20 69 73 20 74 68 65 20 61 72 63 68 69 hat is the archi 4d50: 74 65 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 tecture for this 4d60: 20 6d 61 63 68 69 6e 65 3f 0d 0a 20 20 20 20 20 machine?.. 4d70: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 61 72 #.. set ar 4d80: 63 68 69 74 65 63 74 75 72 65 20 5b 6d 61 63 68 chitecture [mach 4d90: 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a ineToPlatform$:
4da0: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61  :tcl_platform(ma
4db0: 63 68 69 6e 65 29 20 74 72 75 65 5d 0d 0a 0d 0a  chine) true]....
4dc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
4dd0: 20 4e 4f 54 45 3a 20 57 68 61 74 20 69 73 20 74   NOTE: What is t
4de0: 68 65 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20  he platform for
4df0: 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d 0a 20  this machine?..
4e00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
4e10: 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6d 61 63 68  t platform [mach
4e20: 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a  ineToPlatform $: 4e30: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 :tcl_platform(ma 4e40: 63 68 69 6e 65 29 5d 0d 0a 0d 0a 20 20 20 20 20 chine)].... 4e50: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 4e60: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c : Build the full 4e70: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 y qualified file 4e80: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 69 6e name for the in 4e90: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 0d 0a terop assembly.. 4ea0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 4eb0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 79 73 ntaining the Sys 4ec0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 4ed0: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 native component 4ee0: 73 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 s. If this.. 4ef0: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 # file 4f00: 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c exists, we shoul 4f10: 64 20 68 61 76 65 20 65 76 65 72 79 74 68 69 6e d have everythin 4f20: 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 g we need... 4f30: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 #.. set f 4f40: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 ileName [file na 4f50: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 4f60: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c oin$directory \
4f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 24 61 72 63  ..          $arc 4f80: 68 69 74 65 63 74 75 72 65 20 53 51 4c 69 74 65 hitecture SQLite 4f90: 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a .Interop.dll]].. 4fa0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c .. if {[fil 4fb0: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 e exists$fileNa
4fc0: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
4fd0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
4fe0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
4ff0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
5000: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
5010: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72   [file join $dir 5020: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 ectory \.. 5030: 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 53 51$platform SQ
5040: 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c  Lite.Interop.dll
5050: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  ]]....      if {
5060: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 5070: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 5080: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 5090: 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d true.. }... 50a0: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e . set fileN 50b0: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ame [file native 50c0: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 50d0: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20$directory \..
50e0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 2e 49          SQLite.I
50f0: 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a  nterop.dll]]....
5100: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
5110: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 5120: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 5130: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 5140: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 5150: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 5160: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c : Build the full 5170: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 y qualified file 5180: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 53 51 name for the SQ 5190: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 Lite core.. 51a0: 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 # library 51b0: 2e 20 20 49 66 20 74 68 69 73 20 66 69 6c 65 20 . If this file 51c0: 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c exists, we shoul 51d0: 64 20 68 61 76 65 20 65 76 65 72 79 74 68 69 6e d have everythin 51e0: 67 20 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 g we.. # 51f0: 20 20 20 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 need... 5200: 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 #.. foreac 5210: 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b h fileNameOnly [ 5220: 67 65 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c getCoreBinaryFil 5230: 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 eNamesOnly] {.. 5240: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e set fileN 5250: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ame [file native 5260: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 5270: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20$directory \..
5280: 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68 69            $archi 5290: 74 65 63 74 75 72 65 20 24 66 69 6c 65 4e 61 6d tecture$fileNam
52a0: 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eOnly]]....
52b0: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
52c0: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 52d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 52e0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. 52f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 5300: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 5310: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 5320: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 e [file join$di
5330: 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20  rectory \..
5340: 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d         $platform 5350: 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d$fileNameOnly]]
5360: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
5370: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 5380: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 5390: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 . retur 53a0: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 n true.. 53b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 }.... set 53c0: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 53d0: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 53e0: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 join$directory
53f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
5400: 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d  $fileNameOnly]]. 5410: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 5420: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
5430: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
5440: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5450: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d   true..        }
5460: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
5470: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
5480: 54 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20  TE: One or more
5490: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74  native component
54a0: 73 20 6e 65 65 64 65 64 20 62 79 20 53 79 73 74  s needed by Syst
54b0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a  em.Data.SQLite..
54c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72        #       ar
54d0: 65 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 20 20 20  e missing...
54e0: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
54f0: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a  n false..    }..
5500: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 65  ...    proc isRe
5510: 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 7b  leaseAvailable {
5520: 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e   directory {varN
5530: 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  ame ""} } {..
5540: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
5550: 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20  ength $varName] 5560: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 5570: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
5580: 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a  rName $varName.. 5590: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 55a0: 20 72 65 74 75 72 6e 20 5b 69 73 42 75 69 6c 64 return [isBuild 55b0: 41 76 61 69 6c 61 62 6c 65 20 22 22 20 24 64 69 Available ""$di
55c0: 72 65 63 74 6f 72 79 20 24 76 61 72 4e 61 6d 65  rectory $varName 55d0: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 55e0: 20 70 72 6f 63 20 6a 6f 69 6e 42 75 69 6c 64 44 proc joinBuildD 55f0: 69 72 65 63 74 6f 72 79 20 7b 20 6e 61 74 69 76 irectory { nativ 5600: 65 20 70 61 74 68 20 79 65 61 72 20 70 6c 61 74 e path year plat 5610: 66 6f 72 6d 20 63 6f 6e 66 69 67 75 72 61 74 69 form configurati 5620: 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d on } {.. #. 5630: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 5640: 69 67 75 72 65 20 6f 75 74 20 61 6e 64 20 74 68 igure out and th 5650: 65 6e 20 72 65 74 75 72 6e 20 74 68 65 20 66 75 en return the fu 5660: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70 61 lly qualified pa 5670: 74 68 20 74 6f 20 74 68 65 20 62 75 69 6c 64 0d th to the build. 5680: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 5690: 69 72 65 63 74 6f 72 79 20 62 61 73 65 64 20 6f irectory based o 56a0: 6e 20 61 6c 6c 20 74 68 65 20 61 72 67 75 6d 65 n all the argume 56b0: 6e 74 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 nts provided by 56c0: 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 our caller... 56d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 56e0: 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d$native} then {.
56f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
5700: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68  [file join $path 5710: 20 62 69 6e 20 24 79 65 61 72 20 24 70 6c 61 74 bin$year $plat 5720: 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 form$configurat
5730: 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ion]..      } el
5740: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  se {..        re
5750: 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  turn [file join
5760: 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72 20  $path bin$year
5770: 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 62  $configuration b 5780: 69 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 in].. }.. 5790: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 57a0: 20 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f getBuildDirecto 57b0: 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ry {} {.. # 57c0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 57d0: 53 65 65 20 69 66 20 74 68 65 20 22 6e 61 74 69 See if the "nati 57e0: 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 ve" runtime opti 57f0: 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e on has been set. 5800: 20 20 49 66 20 73 6f 2c 20 75 73 65 20 74 68 65 If so, use the 5810: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 5820: 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 directory for th 5830: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 5840: 65 6d 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68 embly (a.k.a. th 5850: 65 20 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70 e native interop 5860: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 5870: 61 73 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65 assembly). To e 5880: 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f nable this optio 5890: 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e n via the comman 58a0: 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d d line, enter a. 58b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 58c0: 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 ommand similar t 58d0: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c o one of the fol 58e0: 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f lowing (all on o 58f0: 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 ne line):.. 5900: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 5910: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 5920: 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75 -initialize -ru 5930: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 ntimeOption nati 5940: 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ve.. # 5950: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 -file .\path 5960: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 \to\all.eagle.. 5970: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 5980: 20 20 20 20 20 20 54 6f 20 65 6e 61 62 6c 65 20 To enable 5990: 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 this option via 59a0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line 59b0: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 22 62 prior to the "b 59c0: 65 74 61 20 31 36 22 0d 0a 20 20 20 20 20 20 23 eta 16".. # 59d0: 20 20 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f release o 59e0: 66 20 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c f Eagle, the fol 59f0: 6c 6f 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d lowing command m 5a00: 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 73 74 ust be used inst 5a10: 65 61 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ead.. # 5a20: 20 20 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 (also all on 5a30: 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 one line):.. 5a40: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 #.. # 5a50: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 EagleShell.ex 5a60: 65 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70 e -initialize -p 5a70: 6f 73 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 ostInitialize.. 5a80: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 22 # " 5a90: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e object invoke In 5aa0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 terpreter.GetAct 5ab0: 69 76 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 ive AddRuntimeOp 5ac0: 74 69 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20 tion native".. 5ad0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 # -f 5ae0: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c ile .\path\to\al 5af0: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 l.eagle.. # 5b00: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 5b10: 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 o exists ::build 5b20: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 5b30: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 5b40: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 ing length$::bu
5b50: 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e  ild_directory] >
5b60: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
5b70: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
5b80: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74   NOTE: The locat
5b90: 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64  ion of the build
5ba0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
5bb0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
5bc0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
5bd0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
5be0: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
5bf0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
5c00: 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64   return $::build 5c10: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 _directory.. 5c20: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 5c30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 5c40: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e NOTE: If the "n 5c50: 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f ative" runtime o 5c60: 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68 ption is set, th 5c70: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 5c80: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 embly.. # 5c90: 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 is being 5ca0: 74 65 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74 tested. In that 5cb0: 20 63 61 73 65 2c 20 74 68 65 20 70 61 74 68 20 case, the path 5cc0: 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 to the build dir 5cd0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 ectory.. 5ce0: 23 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e # will con 5cf0: 74 61 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 tain the platfor 5d00: 6d 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74 m name and all t 5d10: 68 65 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 he binaries unde 5d20: 72 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 r test.. 5d30: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 # should b 5d40: 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 e present in tha 5d50: 74 20 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66 t directory. If 5d60: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 the "native" ru 5d70: 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 ntime.. # 5d80: 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73 option is 5d90: 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75 not set, the bu 5da0: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 77 69 ild directory wi 5db0: 6c 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 ll be considered 5dc0: 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 to be.. 5dd0: 23 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 # "platfor 5de0: 6d 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68 m-neutral", with 5df0: 20 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63 the notable exc 5e00: 65 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 eption of any na 5e10: 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20 tive.. # 5e20: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28 assembly ( 5e30: 65 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74 e.g. "SQLite.Int 5e40: 65 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65 erop.dll") copie 5e50: 64 20 74 68 65 72 65 20 64 75 72 69 6e 67 20 74 d there during t 5e60: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 5e70: 20 20 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73 build proces 5e80: 73 20 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68 s itself. If th 5e90: 65 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 e build process 5ea0: 73 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74 somehow does not 5eb0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5ec0: 20 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 copy the nativ 5ed0: 65 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74 e assembly for t 5ee0: 68 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f his platform, mo 5ef0: 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d st of the tests. 5f00: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 5f10: 20 69 6e 20 74 68 65 20 73 75 69 74 65 20 77 69 in the suite wi 5f20: 6c 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69 ll simply be ski 5f30: 70 70 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79 pped. Generally 5f40: 20 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65 speaking, there 5f50: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5f60: 20 20 61 72 65 20 74 77 6f 20 77 61 79 73 20 74 are two ways t 5f70: 6f 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61 o build the bina 5f80: 72 69 65 73 20 77 68 65 6e 20 70 72 65 70 61 72 ries when prepar 5f90: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a ing to run the.. 5fa0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 5fb0: 74 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20 test suite:.. 5fc0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5fd0: 23 20 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64 # 1. Build 5fe0: 20 74 68 65 20 73 65 70 61 72 61 74 65 20 6d 61 the separate ma 5ff0: 6e 61 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65 naged and native 6000: 20 61 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e assemblies usin 6010: 67 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 g some.. 6020: 23 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 # comma 6030: 6e 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d nds similar to:. 6040: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6050: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62 # b 6060: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 uild.bat${Confi
6070: 67 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64  guration}Managed
6080: 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d  Only ${Platform} 6090: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 60a0: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 build.bat$
60b0: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e  {Configuration}N
60c0: 61 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74  ativeOnly ${Plat 60d0: 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 form}.. # 60e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 60f0: 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e Where${Con
6100: 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65  figuration} is e
6110: 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72  ither "Debug" or
6120: 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a   "Release" and..
6130: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6140: 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69     ${Platform} i 6150: 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 s either "Win32" 6160: 20 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20 or "x64"... 6170: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 6180: 20 20 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20 2. Build 6190: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 the mixed-mode a 61a0: 73 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20 ssembly using a 61b0: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 command similar 61c0: 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a to:.. #.. 61d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 61e0: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 build.bat${C
61f0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b  onfiguration} ${ 6200: 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 Platform}.. 6210: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 6220: 20 20 20 20 20 20 20 20 20 57 68 65 72 65 20 24 Where$
6230: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20  {Configuration}
6240: 69 73 20 65 69 74 68 65 72 20 22 44 65 62 75 67  is either "Debug
6250: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61  " or "Release" a
6260: 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  nd..        #
6270: 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72         ${Platfor 6280: 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 57 69 m} is either "Wi 6290: 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20 n32" or "x64". 62a0: 49 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 If this command 62b0: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 is.. # 62c0: 20 20 20 20 20 20 20 75 73 65 64 2c 20 76 61 72 used, var 62d0: 69 6f 75 73 20 74 65 73 74 73 20 74 68 61 74 20 ious tests that 62e0: 72 65 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65 require suppleme 62f0: 6e 74 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20 ntary managed.. 6300: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 6310: 20 20 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e assemblies (e. 6320: 67 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20 g. LINQ) may be 6330: 73 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74 skipped unless t 6340: 68 6f 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20 hose binaries.. 6350: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 6360: 20 20 61 72 65 20 73 75 62 73 65 71 75 65 6e 74 are subsequent 6370: 6c 79 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 ly copied into t 6380: 68 65 20 63 6f 72 72 65 63 74 20 64 69 72 65 63 he correct direc 6390: 74 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20 tory (i.e. by.. 63a0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 63b0: 20 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22 "test_all.bat" 63c0: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 63d0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e # N 63e0: 6f 74 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20 ote that all of 63f0: 74 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e the build comman 6400: 64 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65 ds above will de 6410: 66 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a fault to using.. 6420: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 6430: 74 68 65 20 6c 61 74 65 73 74 20 76 65 72 73 69 the latest versi 6440: 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76 on of MSBuild av 6450: 61 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20 ailable and the 6460: 22 74 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d "test_year" may. 6470: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 6480: 20 6e 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75 need to be adju 6490: 73 74 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79 sted accordingly 64a0: 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e to actually run 64b0: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 64c0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 64d0: 20 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 63 Refer to the c 64e0: 6f 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42 omments in [getB 64f0: 75 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f uildYear] for mo 6500: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f re information o 6510: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 n.. # 6520: 20 20 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68 how to set th 6530: 69 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 is variable... 6540: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 6550: 20 73 65 74 20 6e 61 74 69 76 65 20 5b 68 61 73 set native [has 6560: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 RuntimeOption na 6570: 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 tive].... 6580: 20 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 42 75 69 return [joinBui 6590: 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61 74 ldDirectory$nat
65a0: 69 76 65 20 5b 67 65 74 42 75 69 6c 64 42 61 73  ive [getBuildBas
65b0: 65 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20  eDirectory] \..
65c0: 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
65d0: 75 69 6c 64 59 65 61 72 5d 20 5b 67 65 74 42 75  uildYear] [getBu
65e0: 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 74  ildPlatform $nat 65f0: 69 76 65 5d 20 5b 67 65 74 42 75 69 6c 64 43 6f ive] [getBuildCo 6600: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 5d 0d 0a 20 nfiguration]].. 6610: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 6620: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 52 65 .. proc getRe 6630: 6c 65 61 73 65 56 65 72 73 69 6f 6e 20 7b 7d 20 leaseVersion {} 6640: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 6650: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 # NOTE: Figure 6660: 20 6f 75 74 20 74 68 65 20 72 65 6c 65 61 73 65 out the release 6670: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 75 73 65 version for use 6680: 20 77 69 74 68 20 74 68 65 20 62 75 69 6c 64 20 with the build 6690: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 66a0: 20 23 20 20 20 20 20 20 20 77 68 65 6e 20 63 68 # when ch 66b0: 65 63 6b 69 6e 67 20 66 6f 72 20 61 76 61 69 6c ecking for avail 66c0: 61 62 6c 65 20 72 65 6c 65 61 73 65 73 2e 0d 0a able releases... 66d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 66e0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 66f0: 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f ::release_versio 6700: 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 n] && \.. 6710: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 6720: 68 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 h$::release_ver
6730: 73 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20  sion] > 0} then
6740: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
6750: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
6760: 65 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f  e release versio
6770: 6e 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  n has been overr
6780: 69 64 64 65 6e 3b 20 74 68 65 72 65 66 6f 72 65  idden; therefore
6790: 2c 20 75 73 65 20 69 74 0d 0a 20 20 20 20 20 20  , use it..
67a0: 20 20 23 20 20 20 20 20 20 20 76 65 72 62 61 74    #       verbat
67b0: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
67c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $67d0: 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f ::release_versio 67e0: 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 n.. } else 67f0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 6800: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f # NOTE: No 6810: 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e release version 6820: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 is available, r 6830: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 6840: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 tring... 6850: 23 20 20 20 20 20 20 20 49 74 20 69 73 20 69 6d # It is im 6860: 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 75 72 portant to retur 6870: 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e n an empty strin 6880: 67 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74 g here because t 6890: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 68a0: 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 74 68 result of th 68b0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 61 79 is procedure may 68c0: 20 62 65 20 75 73 65 64 20 77 69 74 68 20 5b 66 be used with [f 68d0: 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 ile join]... 68e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 68f0: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 eturn "".. 6900: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 6910: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 46 69 proc getBuildFi 6920: 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d leName { fileNam 6930: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 e {platform ""} 6940: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 6950: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu 6960: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 rns the specifie 6970: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 d file name as i 6980: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 f it were locate 6990: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 d in the.. 69a0: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 64 69 # build di 69b0: 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 rectory, discard 69c0: 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 ing any director 69d0: 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 y information pr 69e0: 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 esent.. # 69f0: 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 in the file 6a00: 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 name as provide 6a10: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e d by our caller. 6a20: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6a30: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 66 69 6c set result [fil 6a40: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a e nativename \.. 6a50: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 6a60: 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 69 join [getBuildDi 6a70: 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f rectory]$platfo
6a80: 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  rm [file tail $f 6a90: 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20 20 ileName]]].... 6aa0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 48 #.. # H 6ab0: 41 43 4b 3a 20 57 68 65 6e 20 72 75 6e 6e 69 6e ACK: When runnin 6ac0: 67 20 6f 6e 20 57 6f 57 36 34 2c 20 61 73 73 75 g on WoW64, assu 6ad0: 6d 65 20 74 68 65 20 74 65 73 74 20 65 78 65 63 me the test exec 6ae0: 75 74 61 62 6c 65 73 20 61 72 65 20 70 72 65 73 utables are pres 6af0: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ent.. # 6b00: 20 20 20 77 69 74 68 20 74 68 65 20 22 33 32 22 with the "32" 6b10: 20 73 75 66 66 69 78 20 6f 6e 20 74 68 65 6d 2e suffix on them. 6b20: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6b30: 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 if {[isRunningW 6b40: 6f 57 36 34 5d 20 26 26 20 5b 66 69 6c 65 20 65 oW64] && [file e 6b50: 78 74 65 6e 73 69 6f 6e 20 24 72 65 73 75 6c 74 xtension$result
6b60: 5d 20 65 71 20 22 2e 65 78 65 22 7d 20 74 68 65  ] eq ".exe"} the
6b70: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  n {..        set
6b80: 20 72 65 73 75 6c 74 20 5b 61 70 70 65 6e 64 41   result [appendA
6b90: 72 67 73 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61  rgs [file rootna
6ba0: 6d 65 20 24 72 65 73 75 6c 74 5d 20 33 32 2e 65  me $result] 32.e 6bb0: 78 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a xe].. }.... 6bc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
6bd0: 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
6be0: 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 65      proc getExte
6bf0: 72 6e 61 6c 44 69 72 65 63 74 6f 72 79 20 7b 7d  rnalDirectory {}
6c00: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
6c10: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
6c20: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e  procedure return
6c30: 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  s the directory
6c40: 77 68 65 72 65 20 74 68 65 20 65 78 74 65 72 6e  where the extern
6c50: 61 6c 20 62 69 6e 61 72 79 0d 0a 20 20 20 20 20  al binary..
6c60: 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20 61   #       files a
6c70: 72 65 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20  re located...
6c80: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
6c90: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  rn [file nativen
6ca0: 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  ame [file dirnam
6cb0: 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  e [file dirname
6cc0: 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 5d 5d 5d  [info binary]]]]
6cd0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
6ce0: 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 44 69  proc getBinaryDi
6cf0: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
6d00: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
6d10: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
6d20: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the
6d30: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where
6d40: 74 68 65 20 74 65 73 74 20 61 70 70 6c 69 63 61  the test applica
6d50: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
6d60: 20 20 20 20 69 74 73 65 6c 66 20 28 69 2e 65 2e      itself (i.e.
6d70: 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c   the Eagle shell
6d80: 29 20 69 73 20 6c 6f 63 61 74 65 64 2e 20 20 54  ) is located.  T
6d90: 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64  his will be used
6da0: 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20   as..      #
6db0: 20 20 20 74 68 65 20 64 65 73 74 69 6e 61 74 69     the destinati
6dc0: 6f 6e 20 66 6f 72 20 74 68 65 20 63 6f 70 69 65  on for the copie
6dd0: 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  d System.Data.SQ
6de0: 4c 69 74 65 20 6e 61 74 69 76 65 20 61 6e 64 0d  Lite native and.
6df0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d  .      #       m
6e00: 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65  anaged assemblie
6e10: 73 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20  s (i.e. because
6e20: 74 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74  this is one of t
6e30: 68 65 20 66 65 77 20 70 6c 61 63 65 73 0d 0a 20  he few places..
6e40: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 65       #       whe
6e50: 72 65 20 74 68 65 20 43 4c 52 20 77 69 6c 6c 20  re the CLR will
6e60: 61 63 74 75 61 6c 6c 79 20 66 69 6e 64 20 61 6e  actually find an
6e70: 64 20 6c 6f 61 64 20 74 68 65 6d 20 70 72 6f 70  d load them prop
6e80: 65 72 6c 79 29 2e 0d 0a 20 20 20 20 20 20 23 0d  erly)...      #.
6e90: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
6ea0: 20 65 78 69 73 74 73 20 3a 3a 62 69 6e 61 72 79   exists ::binary
6eb0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c  _directory] && \
6ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
6ed0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 69  ing length $::bi 6ee0: 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 nary_directory] 6ef0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 6f00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 6f10: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 6f20: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 69 6e 61 tion of the bina 6f30: 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 ry directory has 6f40: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e been overridden 6f50: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 6f60: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 6f70: 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a e it verbatim... 6f80: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 6f90: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 69 6e return$::bin
6fa0: 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20  ary_directory..
6fb0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
6fc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69         return [i
6fd0: 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20  nfo binary]..
6fe0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
6ff0: 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 65      proc getExte
7000: 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 7b 20 66  rnalFileName { f
7010: 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20  ileName } {..
7020: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
7030: 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20  TE: Returns the
7040: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e  specified file n
7050: 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 72  ame as if it wer
7060: 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65  e located in the
7070: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7080: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69  directory contai
7090: 6e 69 6e 67 20 74 68 65 20 65 78 74 65 72 6e 61  ning the externa
70a0: 6c 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 20  l binaries...
70b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
70c0: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  rn [file nativen
70d0: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  ame [file join [
70e0: 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 63  getExternalDirec
70f0: 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d  tory] $fileName] 7100: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 7110: 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 46 proc getBinaryF 7120: 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 ileName { fileNa 7130: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d me {platform ""} 7140: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 7150: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 # NOTE: Ret 7160: 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 urns the specifi 7170: 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 ed file name as 7180: 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 if it were locat 7190: 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 ed in the.. 71a0: 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 # binary 71b0: 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 directory, disca 71c0: 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 rding any direct 71d0: 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 ory information 71e0: 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 present.. # 71f0: 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 in the fi 7200: 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 le name as provi 7210: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle 7220: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 r... #.. 7230: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 7240: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 nativename \.. 7250: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f [file jo 7260: 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 in [getBinaryDir 7270: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 ectory]$platfor
7280: 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  m [file tail $fi 7290: 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d leName]]].. } 72a0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 72b0: 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e tCoreBinaryFileN 72c0: 61 6d 65 20 7b 20 7b 70 6c 61 74 66 6f 72 6d 20 ame { {platform 72d0: 22 22 7d 20 7b 73 74 61 6e 64 61 72 64 20 66 61 ""} {standard fa 72e0: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 72f0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 7300: 20 52 65 74 75 72 6e 73 20 74 68 65 20 66 75 6c Returns the ful 7310: 6c 20 70 61 74 68 20 66 6f 72 20 74 68 65 20 66 l path for the f 7320: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 ile containing t 7330: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a he SQLite core.. 7340: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 # na 7350: 74 69 76 65 20 6c 69 62 72 61 72 79 20 63 6f 64 tive library cod 7360: 65 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 e for this platf 7370: 6f 72 6d 2e 20 20 46 69 72 73 74 2c 20 63 68 65 orm. First, che 7380: 63 6b 20 61 6e 64 20 73 65 65 20 69 66 0d 0a 20 ck and see if.. 7390: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 73a0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 SQLite core nat 73b0: 69 76 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 ive library has 73c0: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 already been loa 73d0: 64 65 64 2e 20 20 4e 65 78 74 2c 0d 0a 20 20 20 ded. Next,.. 73e0: 20 20 20 23 20 20 20 20 20 20 20 66 61 6c 6c 62 # fallb 73f0: 61 63 6b 20 74 6f 20 77 68 61 74 20 74 68 65 20 ack to what the 7400: 66 75 6c 6c 20 70 61 74 68 20 73 68 6f 75 6c 64 full path should 7410: 20 62 65 2c 20 62 61 73 65 64 20 6f 6e 20 77 68 be, based on wh 7420: 65 74 68 65 72 20 74 68 65 0d 0a 20 20 20 20 20 ether the.. 7430: 20 23 20 20 20 20 20 20 20 6d 69 78 65 64 2d 6d # mixed-m 7440: 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20 ode assembly is 7450: 62 65 69 6e 67 20 75 73 65 64 20 61 6e 64 20 74 being used and t 7460: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 he name of the c 7470: 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 urrent.. # 7480: 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 2e 0d platform.. 7490: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 74a0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 74b0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 74c0: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 74d0: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 74e0: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 74f0: 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 .SQLite.UnsafeNa 7500: 74 69 76 65 4d 65 74 68 6f 64 73 20 5f 53 51 4c tiveMethods _SQL 7510: 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 46 iteNativeModuleF 7520: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d ileName.. } 7530: 20 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20 fileName] == 0 7540: 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 && [string lengt 7550: 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 h$fileName] > 0
7560: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
7570: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
7580: 4f 54 45 3a 20 54 68 65 20 53 51 4c 69 74 65 20  OTE: The SQLite
7590: 63 6f 72 65 20 6e 61 74 69 76 65 20 6c 69 62 72  core native libr
75a0: 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20  ary has already
75b0: 62 65 65 6e 20 6c 6f 61 64 65 64 20 76 69 61 0d  been loaded via.
75c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
75d0: 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72   the native libr
75e0: 61 72 79 20 70 72 65 2d 6c 6f 61 64 65 72 2e 20  ary pre-loader.
75f0: 20 52 65 74 75 72 6e 20 74 68 61 74 20 66 69 6c   Return that fil
7600: 65 20 6e 61 6d 65 20 6e 6f 77 2e 0d 0a 20 20 20  e name now...
7610: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7620: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65  return $fileName 7630: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 7640: 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 if {[hasRunti 7650: 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d meOption native] 7660: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 7670: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 7680: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 OTE: Return the 7690: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d mixed-mode assem 76a0: 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a bly file name... 76b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 76c0: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 76d0: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 nativename \.. 76e0: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 76f0: 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 join [getBinaryD 7700: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 irectory]$platf
7710: 6f 72 6d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  orm System.Data.
7720: 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 20 20  SQLite.dll]]..
7730: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73      } elseif {$s 7740: 74 61 6e 64 61 72 64 7d 20 74 68 65 6e 20 7b 0d tandard} then {. 7750: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 7760: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 7770: 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 mpt to determine 7780: 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 the native-only 7790: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 standard SQLite 77a0: 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 library.. 77b0: 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 6e # file n 77c0: 61 6d 65 20 66 6f 72 20 74 68 69 73 20 70 6c 61 ame for this pla 77d0: 74 66 6f 72 6d 20 61 6e 64 20 74 68 65 6e 20 72 tform and then r 77e0: 65 74 75 72 6e 20 69 74 2e 0d 0a 20 20 20 20 20 eturn it... 77f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f #.. fo 7800: 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e reach fileNameOn 7810: 6c 79 20 5b 67 65 74 43 6f 72 65 42 69 6e 61 72 ly [getCoreBinar 7820: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 yFileNamesOnly] 7830: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 7840: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 7850: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 nativename \.. 7860: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 7870: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 e join [getBinar 7880: 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 yDirectory]$pla
7890: 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f  tform $fileNameO 78a0: 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 nly]].... 78b0: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 if {[file exi 78c0: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
78d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
78e0: 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65      return $file 78f0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name.. 7900: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 7910: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 7920: 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 # NOTE: Fallb 7930: 61 63 6b 20 74 6f 20 72 65 74 75 72 6e 69 6e 67 ack to returning 7940: 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 the native-only 7950: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 standard SQLite 7960: 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 library.. 7970: 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 6e # file n 7980: 61 6d 65 20 66 6f 72 20 57 69 6e 64 6f 77 73 2e ame for Windows. 7990: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 79a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 79b0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a e nativename \.. 79c0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 79d0: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 e join [getBinar 79e0: 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 yDirectory]$pla
79f0: 74 66 6f 72 6d 20 73 71 6c 69 74 65 33 2e 64 6c  tform sqlite3.dl
7a00: 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  l]]..      } els
7a10: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
7a20: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
7a30: 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74 69 76  Return the nativ
7a40: 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61  e-only interop a
7a50: 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d  ssembly file nam
7a60: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
7a70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66         return [f
7a80: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c  ile nativename \
7a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
7aa0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e  ile join [getBin
7ab0: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70  aryDirectory] $p 7ac0: 6c 61 74 66 6f 72 6d 20 53 51 4c 69 74 65 2e 49 latform SQLite.I 7ad0: 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 20 20 nterop.dll]].. 7ae0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 7af0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6d . proc getCom 7b00: 6d 6f 6e 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 monDirectory {} 7b10: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 7b20: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 # NOTE: This p 7b30: 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 rocedure returns 7b40: 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 the directory w 7b50: 68 65 72 65 20 74 68 65 20 74 65 73 74 20 73 63 here the test sc 7b60: 72 69 70 74 73 0d 0a 20 20 20 20 20 20 23 20 20 ripts.. # 7b70: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c should be l 7b80: 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 ocated. By defa 7b90: 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 72 ult, this just r 7ba0: 65 74 75 72 6e 73 20 74 68 65 20 45 61 67 6c 65 eturns the Eagle 7bb0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7bc0: 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 binary directory 7bd0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 7be0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 7bf0: 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 ts ::common_dire 7c00: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 ctory] && \.. 7c10: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 7c20: 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f ength$::common_
7c30: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
7c40: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
7c50: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
7c60: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
7c70: 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 64 69  of the common di
7c80: 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e  rectory has been
7c90: 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23   set;..        #
7ca0: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65         therefore
7cb0: 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20  , use it...
7cc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
7cd0: 74 75 72 6e 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64  turn $::common_d 7ce0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 7cf0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 } elseif {[info 7d00: 65 78 69 73 74 73 20 3a 3a 76 65 6e 64 6f 72 5f exists ::vendor_ 7d10: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 7d20: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 7d30: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 76 65 6e ng length$::ven
7d40: 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e  dor_directory] >
7d50: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
7d60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
7d70: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74   NOTE: The locat
7d80: 69 6f 6e 20 6f 66 20 74 68 65 20 76 65 6e 64 6f  ion of the vendo
7d90: 72 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20  r directory has
7da0: 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20  been set;..
7db0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
7dc0: 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20  fore, use it...
7dd0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
7de0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 76 65 6e 64    return $::vend 7df0: 6f 72 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 or_directory.. 7e00: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 7e10: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c nfo exists ::tcl 7e20: 5f 6c 69 62 72 61 72 79 5d 20 26 26 20 5c 0d 0a _library] && \.. 7e30: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 7e40: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 63 6c 5f g length$::tcl_
7e50: 6c 69 62 72 61 72 79 5d 20 3e 20 30 20 26 26 20  library] > 0 &&
7e60: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69  \..          [fi
7e70: 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24  le isdirectory $7e80: 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 7d 20 ::tcl_library]} 7e90: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7ea0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 7eb0: 45 3a 20 54 68 65 20 76 61 72 69 61 62 6c 65 20 E: The variable 7ec0: 77 69 74 68 20 74 68 65 20 6c 6f 63 61 74 69 6f with the locatio 7ed0: 6e 20 6f 66 20 74 68 65 20 73 63 72 69 70 74 20 n of the script 7ee0: 6c 69 62 72 61 72 79 20 69 73 0d 0a 20 20 20 20 library is.. 7ef0: 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 20 # set 7f00: 61 6e 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 and appears to b 7f10: 65 20 61 20 72 65 61 6c 20 64 69 72 65 63 74 6f e a real directo 7f20: 72 79 20 28 69 2e 65 2e 20 6e 6f 74 20 65 6d 62 ry (i.e. not emb 7f30: 65 64 64 65 64 0d 0a 20 20 20 20 20 20 20 20 23 edded.. # 7f40: 20 20 20 20 20 20 20 77 69 74 68 69 6e 20 61 20 within a 7f50: 66 69 6c 65 29 3b 20 74 68 65 72 65 66 6f 72 65 file); therefore 7f60: 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 , use it... 7f70: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 7f80: 74 75 72 6e 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 turn$::tcl_libr
7f90: 61 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ary..      } els
7fa0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
7fb0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
7fc0: 46 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20  Fallback to the
7fd0: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69  directory contai
7fe0: 6e 69 6e 67 20 74 68 65 20 65 78 65 63 75 74 61  ning the executa
7ff0: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ble...        #.
8000: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
8010: 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20  [info binary]..
8020: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
8030: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 61  ..    proc getDa
8040: 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 20  tabaseDirectory
8050: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
8060: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
8070: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75  s procedure retu
8080: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72  rns the director
8090: 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74  y where the test
80a0: 20 64 61 74 61 62 61 73 65 73 0d 0a 20 20 20 20   databases..
80b0: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64    #       should
80c0: 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79   be located.  By
80d0: 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a   default, this j
80e0: 75 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d  ust uses the tem
80f0: 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20  porary..      #
8100: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory
8110: 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74  configured for t
8120: 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20  his system...
8130: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
8140: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64  [info exists ::d
8150: 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72  atabase_director
8160: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  y] && \..
8170: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
8180: 68 20 24 3a 3a 64 61 74 61 62 61 73 65 5f 64 69  h $::database_di 8190: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 81a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 81b0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 81c0: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 81d0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 64 69 the database di 81e0: 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e rectory has been 81f0: 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 overridden;.. 8200: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 8210: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e erefore, use it. 8220: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 8230: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 return$::d
8240: 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72  atabase_director
8250: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69  y..      } elsei
8260: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
8270: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
8280: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
8290: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
82a0: 67 74 68 20 24 3a 3a 73 63 72 61 74 63 68 5f 64  gth $::scratch_d 82b0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 82c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 82d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 82e0: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 82f0: 66 20 74 68 65 20 73 63 72 61 74 63 68 20 64 69 f the scratch di 8300: 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e rectory has been 8310: 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 overridden;.. 8320: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 8330: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e erefore, use it. 8340: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 8350: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 return$::s
8360: 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79  cratch_directory
8370: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
8380: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
8390: 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61   [getTemporaryPa
83a0: 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  th]..      }..
83b0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
83c0: 20 67 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72   getTemporaryDir
83d0: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20  ectory {} {..
83e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
83f0: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
8400: 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  re returns the d
8410: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74  irectory where t
8420: 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c  he temporary fil
8430: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  es..      #
8440: 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61    should be loca
8450: 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74  ted.  By default
8460: 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73  , this just uses
8470: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a   the temporary..
8480: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69        #       di
8490: 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72  rectory configur
84a0: 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74  ed for this syst
84b0: 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  em...      #..
84c0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
84d0: 69 73 74 73 20 3a 3a 74 65 6d 70 6f 72 61 72 79  ists ::temporary
84e0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c  _directory] && \
84f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
8500: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65  ing length $::te 8510: 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 mporary_director 8520: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a y] > 0} then {.. 8530: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8540: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c # NOTE: The l 8550: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 74 ocation of the t 8560: 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f emporary directo 8570: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 ry has been over 8580: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 ridden;.. 8590: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f # therefo 85a0: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 re, use it... 85b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 85c0: 72 65 74 75 72 6e 20 24 3a 3a 74 65 6d 70 6f 72 return$::tempor
85d0: 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20  ary_directory..
85e0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
85f0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63  info exists ::sc
8600: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d  ratch_directory]
8610: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
8620: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
8630: 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63  $::scratch_direc 8640: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 8650: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 8660: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 8670: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 e location of th 8680: 65 20 73 63 72 61 74 63 68 20 64 69 72 65 63 74 e scratch direct 8690: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 ory has been ove 86a0: 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 rridden;.. 86b0: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 # theref 86c0: 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 ore, use it... 86d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 86e0: 20 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 return$::scrat
86f0: 63 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  ch_directory..
8700: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
8710: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65        return [ge
8720: 74 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d  tTemporaryPath].
8730: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
8740: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
8750: 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70 20 7b  ExecuteOnSetup {
8760: 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
8770: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 78  info exists ::ex
8780: 65 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 5d 20  ecute_on_setup]
8790: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
87a0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $87b0: 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65 74 ::execute_on_set 87c0: 75 70 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d up] > 0} then {. 87d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 87e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu 87f0: 72 6e 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 rn the configure 8800: 64 20 53 51 4c 20 74 6f 20 65 78 65 63 75 74 65 d SQL to execute 8810: 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6e 6e during the conn 8820: 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 ection.. 8830: 23 20 20 20 20 20 20 20 73 65 74 75 70 20 70 72 # setup pr 8840: 6f 63 65 64 75 72 65 20 28 69 2e 65 2e 20 66 6f ocedure (i.e. fo 8850: 72 20 65 76 65 72 79 20 74 65 73 74 20 64 61 74 r every test dat 8860: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e abase connection 8870: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 8880: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
8890: 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65 74 75  :execute_on_setu
88a0: 70 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  p..      } else
88b0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
88c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 79        # NOTE: By
88d0: 20 64 65 66 61 75 6c 74 2c 20 74 68 65 72 65 20   default, there
88e0: 69 73 20 6e 6f 20 53 51 4c 20 74 6f 20 65 78 65  is no SQL to exe
88f0: 63 75 74 65 20 64 75 72 69 6e 67 20 74 68 65 20  cute during the
8900: 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20  connection..
8910: 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 75      #       setu
8920: 70 20 70 72 6f 63 65 64 75 72 65 20 28 69 2e 65  p procedure (i.e
8930: 2e 20 66 6f 72 20 65 76 65 72 79 20 74 65 73 74  . for every test
8940: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
8950: 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 20 20  tion)...
8960: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
8970: 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  n ""..      }..
8980: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
8990: 63 20 67 65 74 54 65 73 74 4f 76 65 72 72 69 64  c getTestOverrid
89a0: 65 73 50 72 65 61 6d 62 6c 65 20 7b 20 7b 65 78  esPreamble { {ex
89b0: 74 72 61 56 61 72 4e 61 6d 65 73 20 22 22 7d 20  traVarNames ""}
89c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 76  } {..      set v
89d0: 61 72 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a  arNames [list]..
89e0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
89f0: 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 69   # NOTE: If avai
8a00: 6c 61 62 6c 65 2c 20 73 74 61 72 74 20 77 69 74  lable, start wit
8a10: 68 20 74 68 65 20 6d 61 73 74 65 72 20 6c 69 73  h the master lis
8a20: 74 20 6f 66 20 74 65 73 74 20 6f 76 65 72 72 69  t of test overri
8a30: 64 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  de..      #
8a40: 20 20 76 61 72 69 61 62 6c 65 73 2e 0d 0a 20 20    variables...
8a50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
8a60: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
8a70: 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20  test_overrides]
8a80: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
8a90: 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74  [llength $::test 8aa0: 5f 6f 76 65 72 72 69 64 65 73 5d 20 3e 20 30 7d _overrides] > 0} 8ab0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 8ac0: 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 eval lappend va 8ad0: 72 4e 61 6d 65 73 20 24 3a 3a 74 65 73 74 5f 6f rNames$::test_o
8ae0: 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20  verrides..
8af0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
8b00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 72      # NOTE: If r
8b10: 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 72 20  equested by our
8b20: 63 61 6c 6c 65 72 2c 20 61 64 64 20 61 6e 79 20  caller, add any
8b30: 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 61  additional varia
8b40: 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ble..      #
8b50: 20 20 20 6e 61 6d 65 73 20 74 6f 20 63 6f 70 79     names to copy
8b60: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a   now...      #..
8b70: 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67        if {[lleng
8b80: 74 68 20 24 65 78 74 72 61 56 61 72 4e 61 6d 65  th $extraVarName 8b90: 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a s] > 0} then {.. 8ba0: 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 eval lap 8bb0: 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 65 pend varNames$e
8bc0: 78 74 72 61 56 61 72 4e 61 6d 65 73 0d 0a 20 20  xtraVarNames..
8bd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
8be0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
8bf0: 42 75 69 6c 64 20 74 68 65 20 73 63 72 69 70 74  Build the script
8c00: 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 62 65 20   fragment to be
8c10: 72 65 74 75 72 6e 65 64 20 62 79 20 70 72 6f 63  returned by proc
8c20: 65 73 73 69 6e 67 20 65 61 63 68 0d 0a 20 20 20  essing each..
8c30: 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61     #       varia
8c40: 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61 64 64  ble name and add
8c50: 69 6e 67 20 74 68 65 20 6e 65 63 65 63 65 73 73  ing the nececess
8c60: 61 72 79 20 73 63 72 69 70 74 20 66 72 61 67 6d  ary script fragm
8c70: 65 6e 74 73 20 66 6f 72 0d 0a 20 20 20 20 20 20  ents for..
8c80: 23 20 20 20 20 20 20 20 65 61 63 68 20 6f 6e 65  #       each one
8c90: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
8ca0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 22 22 0d    set result "".
8cb0: 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  ...      foreach
8cc0: 20 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d   varName $varNam 8cd0: 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d es {.. #. 8ce0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 8cf0: 20 42 75 69 6c 64 20 74 68 65 20 71 75 61 6c 69 Build the quali 8d00: 66 69 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 fied global vari 8d10: 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 able name... 8d20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 8d30: 65 74 20 66 75 6c 6c 56 61 72 4e 61 6d 65 20 5b et fullVarName [ 8d40: 61 70 70 65 6e 64 41 72 67 73 20 3a 3a 20 24 76 appendArgs ::$v
8d50: 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20  arName]....
8d60: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
8d70: 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 76  NOTE: Does the v
8d80: 61 72 69 61 62 6c 65 20 65 78 69 73 74 20 69 6e  ariable exist in
8d90: 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65   this interprete
8da0: 72 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 20 20 20  r context?..
8db0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
8dc0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
8dd0: 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 7d 20 74  $fullVarName]} t 8de0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 8df0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 8e00: 4e 4f 54 45 3a 20 41 70 70 65 6e 64 20 61 20 73 NOTE: Append a s 8e10: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 74 cript fragment t 8e20: 6f 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 61 o the result tha 8e30: 74 20 77 69 6c 6c 20 63 6f 72 72 65 63 74 6c 79 t will correctly 8e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 8e50: 20 20 20 20 63 6f 70 79 20 61 6e 79 20 63 6f 6e copy any con 8e60: 74 61 69 6e 65 64 20 76 61 6c 75 65 20 74 6f 20 tained value to 8e70: 61 6e 6f 74 68 65 72 20 69 6e 74 65 72 70 72 65 another interpre 8e80: 74 65 72 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 ter context... 8e90: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8ea0: 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 append resu 8eb0: 6c 74 20 5c 6e 20 22 73 65 74 20 22 20 24 66 75 lt \n "set "$fu
8ec0: 6c 6c 56 61 72 4e 61 6d 65 20 22 20 5c 7b 22 20  llVarName " \{"
8ed0: 5b 73 65 74 20 24 66 75 6c 6c 56 61 72 4e 61 6d  [set $fullVarNam 8ee0: 65 5d 20 5c 7d 0d 0a 20 20 20 20 20 20 20 20 7d e] \}.. } 8ef0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 8f00: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 8f10: 54 45 3a 20 49 66 20 74 68 65 20 72 65 73 75 6c TE: If the resul 8f20: 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f t contains one o 8f30: 72 20 6d 6f 72 65 20 73 63 72 69 70 74 20 66 72 r more script fr 8f40: 61 67 6d 65 6e 74 73 2c 20 61 70 70 65 6e 64 20 agments, append 8f50: 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 a.. # 8f60: 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20 20 20 20 20 newline... 8f70: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 8f80: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 72 65 tring length$re
8f90: 73 75 6c 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20  sult] > 0} then
8fa0: 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  {..        appen
8fb0: 64 20 72 65 73 75 6c 74 20 5c 6e 0d 0a 20 20 20  d result \n..
8fc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
8fd0: 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result.. 8fe0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 8ff0: 20 6d 6f 76 65 53 79 73 74 65 6d 44 61 74 61 53 moveSystemDataS 9000: 51 4c 69 74 65 44 6c 6c 43 6f 6e 66 69 67 20 7b QLiteDllConfig { 9010: 20 7b 72 65 73 74 6f 72 65 20 66 61 6c 73 65 7d {restore false} 9020: 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d {verbose false} 9030: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set 9040: 64 69 72 65 63 74 6f 72 79 20 5b 6f 62 6a 65 63 directory [objec 9050: 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61 t invoke AppDoma 9060: 69 6e 20 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e in CurrentDomain 9070: 2e 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d 0d .BaseDirectory]. 9080: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st 9090: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72 ring length$dir
90a0: 65 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68  ectory] == 0} th
90b0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
90c0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then 90d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 90e0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
90f0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
9100: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
9110: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d   "---- skipped m
9120: 6f 76 69 6e 67 20 5c 22 53 79 73 74 65 6d 2e 44  oving \"System.D
9130: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63  ata.SQLite.dll.c
9140: 6f 6e 66 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 20  onfig\", " \..
9150: 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20              "no
9160: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 5c 6e  base directory\n
9170: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  "]..        }..
9180: 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20         return..
9190: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
91a0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 31 29 20  set fileName(1)
91b0: 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20  [file normalize
91c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69  \..          [fi
91d0: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f  le join $directo 91e0: 72 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ry System.Data.S 91f0: 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 QLite.dll.config 9200: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 ]].... set 9210: 66 69 6c 65 4e 61 6d 65 28 32 29 20 5b 61 70 70 fileName(2) [app 9220: 65 6e 64 41 72 67 73 20 24 66 69 6c 65 4e 61 6d endArgs$fileNam
9230: 65 28 31 29 20 2e 6d 6f 76 65 64 5d 0d 0a 0d 0a  e(1) .moved]....
9240: 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 74 6f        if {$resto 9250: 72 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 re} then {.. 9260: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 9270: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 28 32 ists$fileName(2
9280: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
9290: 20 20 20 20 20 20 66 69 6c 65 20 72 65 6e 61 6d        file renam
92a0: 65 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 24  e $fileName(2)$
92b0: 66 69 6c 65 4e 61 6d 65 28 31 29 0d 0a 0d 0a 20  fileName(1)....
92c0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65           if {$ve 92d0: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 rbose} then {.. 92e0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 92f0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
9300: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
9310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9320: 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 5c 22 22 20  "---- moved \""
9330: 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 22 5c 22  $fileName(2) "\" 9340: 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 to \"" \.. 9350: 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65$file
9360: 4e 61 6d 65 28 31 29 20 5c 22 5c 6e 5d 0d 0a 20  Name(1) \"\n]..
9370: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
9380: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
9390: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72          if {$ver 93a0: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 bose} then {.. 93b0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 93c0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
93d0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
93e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
93f0: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76  ---- skipped mov
9400: 69 6e 67 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ing \"" $fileNam 9410: 65 28 32 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 e(2) \.. 9420: 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 "\", it 9430: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e does not exist\n 9440: 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d "].. }. 9450: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 9460: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 9470: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 9480: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 ists$fileName(1
9490: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
94a0: 20 20 20 20 20 20 66 69 6c 65 20 72 65 6e 61 6d        file renam
94b0: 65 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 24  e $fileName(1)$
94c0: 66 69 6c 65 4e 61 6d 65 28 32 29 0d 0a 0d 0a 20  fileName(2)....
94d0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65           if {$ve 94e0: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 rbose} then {.. 94f0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 9500: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
9510: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9530: 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 5c 22 22 20  "---- moved \""
9540: 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 22 5c 22  $fileName(1) "\" 9550: 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 to \"" \.. 9560: 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65$file
9570: 4e 61 6d 65 28 32 29 20 5c 22 5c 6e 5d 0d 0a 20  Name(2) \"\n]..
9580: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
9590: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
95a0: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72          if {$ver 95b0: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 bose} then {.. 95c0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 95d0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
95e0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
9600: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76  ---- skipped mov
9610: 69 6e 67 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ing \"" $fileNam 9620: 65 28 31 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 e(1) \.. 9630: 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 "\", it 9640: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e does not exist\n 9650: 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d "].. }. 9660: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 9670: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 9680: 20 20 20 70 72 6f 63 20 67 65 74 41 70 70 44 6f proc getAppDo 9690: 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20 7b 20 7b mainPreamble { { 96a0: 70 72 65 66 69 78 20 22 22 7d 20 7b 73 75 66 66 prefix ""} {suff 96b0: 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 ix ""} } {.. 96c0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 96d0: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur 96e0: 65 20 72 65 74 75 72 6e 73 20 61 20 74 65 73 74 e returns a test 96f0: 20 73 65 74 75 70 20 73 63 72 69 70 74 20 66 72 setup script fr 9700: 61 67 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 agment suitable 9710: 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 for.. # 9720: 20 20 20 65 76 61 6c 75 61 74 69 6f 6e 20 62 79 evaluation by 9730: 20 61 6e 20 69 6e 74 65 72 70 72 65 74 65 72 20 an interpreter 9740: 63 72 65 61 74 65 64 20 69 6e 20 61 6e 20 69 73 created in an is 9750: 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 olated applicati 9760: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 on.. # 9770: 20 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65 20 73 domain. The s 9780: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 cript fragment b 9790: 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77 69 eing returned wi 97a0: 6c 6c 20 62 65 20 73 75 72 72 6f 75 6e 64 65 64 ll be surrounded 97b0: 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 by.. # 97c0: 20 20 20 74 68 65 20 70 72 65 66 69 78 20 61 6e the prefix an 97d0: 64 20 73 75 66 66 69 78 20 22 73 63 72 69 70 74 d suffix "script 97e0: 20 66 72 61 67 6d 65 6e 74 73 22 20 73 70 65 63 fragments" spec 97f0: 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c ified by our cal 9800: 6c 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 ler,.. # 9810: 20 20 20 20 69 66 20 61 6e 79 2e 20 20 54 68 65 if any. The 9820: 20 65 6e 74 69 72 65 20 73 63 72 69 70 74 20 62 entire script b 9830: 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77 69 eing returned wi 9840: 6c 6c 20 62 65 20 73 75 62 73 74 69 74 75 74 65 ll be substitute 9850: 64 20 76 69 61 0d 0a 20 20 20 20 20 20 23 20 20 d via.. # 9860: 20 20 20 20 20 5b 73 75 62 73 74 5d 2c 20 69 6e [subst], in 9870: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of 9880: 6f 75 72 20 63 61 6c 6c 65 72 2c 20 62 65 66 6f our caller, befo 9890: 72 65 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 re being returne 98a0: 64 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 d... # 98b0: 20 20 54 68 69 73 20 73 74 65 70 20 69 73 20 6e This step is n 98c0: 65 63 65 73 73 61 72 79 20 73 6f 20 74 68 61 74 ecessary so that 98d0: 20 73 6f 6d 65 20 6c 69 6d 69 74 65 64 20 63 6f some limited co 98e0: 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61 74 69 6f ntext informatio 98f0: 6e 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 n,.. # 9900: 20 20 70 72 69 6d 61 72 69 6c 79 20 72 65 6c 61 primarily rela 9910: 74 65 64 20 74 6f 20 74 68 65 20 74 65 73 74 69 ted to the testi 9920: 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73 2c 20 ng directories, 9930: 63 61 6e 20 62 65 20 74 72 61 6e 73 66 65 72 72 can be transferr 9940: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # 9950: 20 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 to the interpr 9960: 65 74 65 72 20 69 6e 20 74 68 65 20 69 73 6f 6c eter in the isol 9970: 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e ated application 9980: 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 domain, making 9990: 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 it.. # 99a0: 20 20 61 62 6c 65 20 74 6f 20 73 75 63 63 65 73 able to succes 99b0: 73 66 75 6c 6c 79 20 72 75 6e 20 74 65 73 74 73 sfully run tests 99c0: 20 74 68 61 74 20 72 65 71 75 69 72 65 20 6f 6e that require on 99d0: 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 e or more of the 99e0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 99f0: 66 69 6c 65 73 20 69 6e 20 6f 6e 65 20 6f 66 20 files in one of 9a00: 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72 65 the testing dire 9a10: 63 74 6f 72 69 65 73 2e 20 20 43 61 6c 6c 65 72 ctories. Caller 9a20: 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 69 6e s should keep in 9a30: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 9a40: 6d 69 6e 64 20 74 68 61 74 20 74 68 65 20 74 65 mind that the te 9a50: 73 74 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 st script fragme 9a60: 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 nt being returne 9a70: 64 20 63 61 6e 6e 6f 74 20 72 65 6c 79 20 6f 6e d cannot rely on 9a80: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 9a90: 61 6e 79 20 73 63 72 69 70 74 20 6c 69 62 72 61 any script libra 9aa0: 72 79 20 70 72 6f 63 65 64 75 72 65 73 20 74 68 ry procedures th 9ab0: 61 74 20 61 72 65 20 6e 6f 74 20 70 72 6f 76 69 at are not provi 9ac0: 64 65 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 ded by the Eagle 9ad0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 9ae0: 6c 69 62 72 61 72 79 20 70 61 63 6b 61 67 65 20 library package 9af0: 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61 67 6c (i.e. "init.eagl 9b00: 65 22 29 2c 20 69 6e 63 6c 75 64 69 6e 67 20 74 e"), including t 9b10: 68 6f 73 65 20 70 72 6f 76 69 64 65 64 20 62 79 hose provided by 9b20: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 9b30: 74 68 65 20 45 61 67 6c 65 20 74 65 73 74 20 70 the Eagle test p 9b40: 61 63 6b 61 67 65 2c 20 75 6e 6c 65 73 73 20 74 ackage, unless t 9b50: 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 he file containi 9b60: 6e 67 20 74 68 65 6d 20 69 73 20 6c 6f 61 64 65 ng them is loade 9b70: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 9b80: 20 6d 61 6e 75 61 6c 6c 79 20 76 69 61 20 73 6f manually via so 9b90: 6d 65 20 6f 74 68 65 72 20 6d 65 63 68 61 6e 69 me other mechani 9ba0: 73 6d 20 28 65 2e 67 2e 20 62 79 20 69 6e 63 6c sm (e.g. by incl 9bb0: 75 64 69 6e 67 20 61 70 70 72 6f 70 72 69 61 74 uding appropriat 9bc0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 9bd0: 20 5b 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 [package requir 9be0: 65 5d 20 6f 72 20 5b 73 6f 75 72 63 65 5d 20 63 e] or [source] c 9bf0: 6f 6d 6d 61 6e 64 73 20 69 6e 20 74 68 65 20 70 ommands in the p 9c00: 72 65 66 69 78 20 6f 72 20 73 75 66 66 69 78 0d refix or suffix. 9c10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 9c20: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73 29 cript fragments) 9c30: 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20 76 61 72 . Also, all var 9c40: 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 iable references 9c50: 20 61 6e 64 20 61 6c 6c 20 6e 65 73 74 65 64 0d and all nested. 9c60: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 9c70: 6f 6d 6d 61 6e 64 73 20 28 69 2e 65 2e 20 74 68 ommands (i.e. th 9c80: 6f 73 65 20 69 6e 20 73 71 75 61 72 65 20 62 72 ose in square br 9c90: 61 63 6b 65 74 73 29 20 63 6f 6e 74 61 69 6e 65 ackets) containe 9ca0: 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 0d 0a d in the final.. 9cb0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 63 # sc 9cc0: 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 77 69 ript fragment wi 9cd0: 6c 6c 20 65 6e 64 20 75 70 20 62 65 69 6e 67 20 ll end up being 9ce0: 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68 65 evaluated in the 9cf0: 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 0d context of the. 9d00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 9d10: 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70 72 65 74 alling interpret 9d20: 65 72 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 74 er and not the t 9d30: 61 72 67 65 74 20 69 6e 74 65 72 70 72 65 74 65 arget interprete 9d40: 72 20 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 r created in the 9d50: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 9d60: 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 isolated applica 9d70: 74 69 6f 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c 65 tion domain unle 9d80: 73 73 20 74 68 65 20 64 6f 6c 6c 61 72 20 73 69 ss the dollar si 9d90: 67 6e 73 20 61 6e 64 2f 6f 72 20 73 71 75 61 72 gns and/or squar 9da0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 9db0: 20 62 72 61 63 6b 65 74 73 20 61 72 65 20 73 70 brackets are sp 9dc0: 65 63 69 61 6c 6c 79 20 71 75 6f 74 65 64 20 77 ecially quoted w 9dd0: 69 74 68 20 62 61 63 6b 73 6c 61 73 68 65 73 2e ith backslashes. 9de0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 9df0: 20 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c return [uplevel 9e00: 20 31 20 5b 6c 69 73 74 20 73 75 62 73 74 20 5b 1 [list subst [ 9e10: 61 70 70 65 6e 64 41 72 67 73 20 24 70 72 65 66 appendArgs$pref
9e20: 69 78 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  ix {..        #.
9e30: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
9e40: 20 54 68 65 20 5c 5b 6f 62 6a 65 63 74 5c 5d 20   The $object$
9e50: 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20 6d  command may be m
9e60: 69 73 73 69 6e 67 20 69 6e 20 73 6f 6d 65 20 45  issing in some E
9e70: 61 67 6c 65 20 63 6f 72 65 0d 0a 20 20 20 20 20  agle core..
9e80: 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61     #       libra
9e90: 72 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ry configuration
9ea0: 73 2e 20 20 43 6c 6f 6e 69 6e 67 20 61 6e 64 20  s.  Cloning and
9eb0: 75 73 69 6e 67 20 74 68 65 20 70 72 6f 63 65 64  using the proced
9ec0: 75 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ure..        #
9ed0: 20 20 20 20 20 5c 5b 63 68 61 6e 67 65 4e 61 74       $changeNat 9ee0: 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e iveRuntimeOption 9ef0: 5c 5d 20 6d 61 79 20 68 65 6c 70 20 74 6f 20 6d$ may help to m
9f00: 69 74 69 67 61 74 65 20 74 68 69 73 2e 0d 0a 20  itigate this...
9f10: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
9f20: 20 20 70 72 6f 63 20 63 68 61 6e 67 65 4e 61 74    proc changeNat
9f30: 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  iveRuntimeOption
9f40: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
9f50: 7b 5b 69 6e 66 6f 20 61 72 67 73 20 63 68 61 6e  {[info args chan
9f60: 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f  geNativeRuntimeO
9f70: 70 74 69 6f 6e 5d 7d 20 5c 0d 0a 20 20 20 20 20  ption]} \..
9f80: 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f 20 62 6f         {[info bo
9f90: 64 79 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52  dy changeNativeR
9fa0: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d 7d 0d 0a  untimeOption]}..
9fb0: 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20  ..        catch
9fc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 61  {..          cha
9fd0: 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65  ngeNativeRuntime
9fe0: 4f 70 74 69 6f 6e 20 5b 68 61 73 52 75 6e 74 69  Option [hasRunti
9ff0: 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d  meOption native]
a000: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
a010: 20 20 20 7d 20 5b 67 65 74 54 65 73 74 4f 76 65     } [getTestOve
a020: 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20 5b  rridesPreamble [
a030: 6c 69 73 74 20 70 61 74 68 20 74 65 73 74 5f 63  list path test_c
a040: 68 61 6e 6e 65 6c 5d 5d 20 24 73 75 66 66 69 78  hannel]] $suffix a050: 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ]]].. }..... a060: 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 45 proc tryCopyE a070: 78 74 65 72 6e 61 6c 46 69 6c 65 20 7b 0d 0a 20 xternalFile {.. a080: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e fileN a090: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 ame {platform "" a0a0: 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 } {newFileName " a0b0: 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 "} {verbose fals a0c0: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se a0d0: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 t sourceFileName a0e0: 20 5b 67 65 74 45 78 74 65 72 6e 61 6c 46 69 6c [getExternalFil a0f0: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d eName$fileName]
a100: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
a110: 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75  file exists $sou a120: 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 rceFileName]} th a130: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if a140: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e {$verbose} then
a150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
a160: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan a170: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs a180: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. a190: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 "---- skipped c a1a0: 6f 70 79 69 6e 67 20 65 78 74 65 72 6e 61 6c 20 opying external a1b0: 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 file \""$source
a1c0: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  FileName \..
a1d0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69            "\", i
a1e0: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
a1f0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  \n"]..        }.
a200: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d  .        return.
a210: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
a220: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
a230: 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d  ngth $newFileNam a240: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. a250: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 set targ a260: 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 etFileName [getB a270: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e inaryFileName$n
a280: 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74  ewFileName $plat a290: 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 form].. } e a2a0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 lse {.. s a2b0: 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d et targetFileNam a2c0: 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 e [getBinaryFile a2d0: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 Name$fileName $a2e0: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 platform].. a2f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 }.... set a300: 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 20 targetDirectory a310: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 [file dirname$t
a320: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a  argetFileName]..
a330: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
a340: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  ch {..        if
a350: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
a360: 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79  $targetDirectory a370: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. a380: 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 file mkdir a390: 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79$targetDirectory
a3a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
a3b0: 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d       file copy -
a3c0: 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c  force $sourceFil a3d0: 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c eName$targetFil
a3e0: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20  eName..      }]
a3f0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
a400: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t a410: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app a420: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a430: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 "---- cop a440: 69 65 64 20 65 78 74 65 72 6e 61 6c 20 66 69 6c ied external fil a450: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 e from \""$sour
a460: 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74  ceFileName "\" t
a470: 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  o \"" \..
a480: 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c 65       $targetFile a490: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 Name \"\n].. a4a0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. a4b0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
a4c0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
a4d0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
a4e0: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65       "---- faile
a4f0: 64 20 74 6f 20 63 6f 70 79 20 65 78 74 65 72 6e  d to copy extern
a500: 61 6c 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22  al file from \""
a510: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName a520: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. a530: 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 "\" to \""$targ
a540: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d  etFileName \"\n]
a550: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
a560: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
a570: 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20  yCopyBinaryFile
a580: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  {..            f
a590: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
a5a0: 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61  m ""} {newFileNa
a5b0: 6d 65 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20  me ""} {verbose
a5c0: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
a5d0: 20 20 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65    set sourceFile
a5e0: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46  Name [getBinaryF
a5f0: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam a600: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a e$platform]....
a610: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
a620: 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46   exists $sourceF a630: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { a640: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 .. if {$v
a650: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
a660: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
a670: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel a680: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. a690: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- a6a0: 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 -- skipped copyi a6b0: 6e 67 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c ng binary file \ a6c0: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ""$sourceFileNa
a6d0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
a6e0: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73      "\", it does
a6f0: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
a700: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
a710: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20     return..
a720: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
a730: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $a740: 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 newFileName] > 0 a750: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. a760: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile a770: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 Name [getBuildFi a780: 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e leName$newFileN
a790: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a  ame $platform].. a7a0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. a7b0: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 set targ a7c0: 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 etFileName [getB a7d0: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 uildFileName$fi
a7e0: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d  leName $platform a7f0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... a800: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 44 69 set targetDi a810: 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 rectory [file di a820: 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c rname$targetFil
a830: 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
a840: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
a850: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
a860: 20 65 78 69 73 74 73 20 24 74 61 72 67 65 74 44   exists $targetD a870: 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 irectory]} then a880: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c {.. fil a890: 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 e mkdir$targetD
a8a0: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..
a8b0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6c    }..        fil
a8c0: 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73  e copy -force $s a8d0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 ourceFileName$t
a8e0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20  argetFileName..
a8f0: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68       }] == 0} th
a900: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
a910: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan a920: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs a930: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " a940: 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 69 6e 61 ---- copied bina a950: 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 ry file from \"" a960: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
a970: 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20   "\" to \"" \..
a980: 20 20 20 20 20 20 20 20 20 20 20 24 74 61 72 67             $targ a990: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d etFileName \"\n] a9a0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { a9b0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs a9c0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
a9d0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
a9e0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
a9f0: 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20   failed to copy
aa00: 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f 6d  binary file from
aa10: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65   \"" $sourceFile aa20: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. aa30: 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 "\" to \""$
aa40: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c  targetFileName \
aa50: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  "\n]..      }..
aa60: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
aa70: 63 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69  c tryCopyBuildFi
aa80: 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  le {..
aa90: 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74    fileName {plat
aaa0: 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c  form ""} {newFil
aab0: 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65 72 62 6f  eName ""} {verbo
aac0: 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  se false} } {..
aad0: 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 46       set sourceF
aae0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c  ileName [getBuil
aaf0: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  dFileName $fileN ab00: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
ab10: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69  ..      if {![fi
ab20: 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63  le exists $sourc ab30: 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e eFileName]} then ab40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { ab50: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
ab60: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
ab70: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe ab80: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. ab90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " aba0: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 ---- skipped cop abb0: 79 69 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 ying build file abc0: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e \""$sourceFileN
abd0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
abe0: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65       "\", it doe
abf0: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d  s not exist\n"].
ac00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
ac10: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20      return..
ac20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
ac30: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
ac40: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20  $newFileName] > ac50: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. ac60: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c set targetFil ac70: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 eName [getBinary ac80: 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c FileName$newFil
ac90: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d  eName $platform] aca0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { acb0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 .. set ta acc0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 rgetFileName [ge acd0: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName ace0: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66$fileName $platf acf0: 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d orm].. }... ad00: 0a 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 . set targe ad10: 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 tDirectory [file ad20: 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 dirname$target
ad30: 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  FileName]....
ad40: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
ad50: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66  .        if {![f
ad60: 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67  ile exists $targ ad70: 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 etDirectory]} th ad80: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. ad90: 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 file mkdir$targ
ada0: 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  etDirectory..
adb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
adc0: 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65  file copy -force
add0: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName ade0: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
adf0: 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d  ..      }] == 0}
ae00: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
ae10: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c ae20: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr ae30: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. ae40: 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 "---- copied b ae50: 75 69 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c uild file from \ ae60: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ""$sourceFileNa
ae70: 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d  me "\" to \"" \.
ae80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 61  .            $ta ae90: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c rgetFileName \"\ aea0: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 n].. } else aeb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput aec0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
aed0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
aee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
aef0: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70  -- failed to cop
af00: 79 20 62 75 69 6c 64 20 66 69 6c 65 20 66 72 6f  y build file fro
af10: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c  m \"" $sourceFil af20: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. af30: 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 "\" to \"" af40: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20$targetFileName
af50: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  \"\n]..      }..
af60: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
af70: 6f 63 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61  oc tryDeleteBina
af80: 72 79 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d  ryFile { fileNam
af90: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
afa0: 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20  {verbose false}
afb0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66  } {..      set f
afc0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61  ileName [getBina
afd0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file afe0: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
aff0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66  ...      if {![f
b000: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file b010: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. b020: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 if {$verb
b030: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ose} then {..
b040: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: b050: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap b060: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. b070: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- b080: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting b090: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 binary file \"" b0a0: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
b0c0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
b0d0: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
b0e0: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
b0f0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  n..      }....
b100: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
b110: 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c  file delete $fil b120: 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 eName}] == 0} th b130: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp b140: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
b150: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
b160: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
b170: 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 69 6e  ---- deleted bin
b180: 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69  ary file \"" $fi b190: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. b1a0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. b1b0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
b1c0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
b1d0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
b1e0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69         "---- fai
b1f0: 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 69  led to delete bi
b200: 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66  nary file \"" $f b210: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 ileName \"\n].. b220: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... b230: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 65 .. proc tryDe b240: 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20 7b 20 leteBuildFile { b250: 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f fileName {platfo b260: 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 rm ""} {verbose b270: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. b280: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b set fileName [ b290: 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName b2a0: 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74$fileName $plat b2b0: 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 form].... i b2c0: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 f {![file exists b2d0: 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65$fileName]} the
b2e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
b2f0: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20  {$verbose} then b300: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu b310: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
b320: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
b330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
b340: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65  "---- skipped de
b350: 6c 65 74 69 6e 67 20 62 75 69 6c 64 20 66 69 6c  leting build fil
b360: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName b370: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. b380: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f "\", it does no b390: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 t exist\n"].. b3a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. b3b0: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d return.. }. b3c0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 ... if {[ca b3d0: 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 tch {file delete b3e0: 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20$fileName}] ==
b3f0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
b400: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test b410: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append b420: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. b430: 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 "---- delete b440: 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 d build file \"" b450: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d$fileName \"\n]
b460: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
b470: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
b480: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel b490: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. b4a0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- b4b0: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet b4c0: 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 e build file \"" b4d0: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d$fileName \"\n]
b4e0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
b4f0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
b500: 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b 0d  yCopyAssembly {.
b510: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c  .            fil
b520: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20  eName {platform
b530: 22 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7b  ""} {pdb true} {
b540: 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d  verbose false} }
b550: 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 43 6f 70   {..      tryCop
b560: 79 42 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65  yBuildFile $file b570: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 20 22 Name$platform "
b580: 22 20 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20 20  " $verbose.... b590: 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 if {$pdb} th
b5a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72  en {..        tr
b5b0: 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 5b  yCopyBuildFile [
b5c0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
b5d0: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
b5e0: 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61  rootname $fileNa b5f0: 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74 66 me] .pdb]$platf
b600: 6f 72 6d 20 22 22 20 24 76 65 72 62 6f 73 65 0d  orm "" $verbose. b610: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. b620: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 .... proc try b630: 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 7b DeleteAssembly { b640: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 .. fi b650: 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d leName {platform b660: 20 22 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 ""} {pdb true} b670: 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 {verbose false} b680: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 } {.. tryDe b690: 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 leteBinaryFile$
b6a0: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  fileName $platfo b6b0: 72 6d 20 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20 rm$verbose....
b6c0: 20 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74       if {$pdb} t b6d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t b6e0: 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 ryDeleteBinaryFi b6f0: 6c 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c le [appendArgs \ b700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f b710: 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 ile rootname$fi
b720: 6c 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70  leName] .pdb] $p b730: 6c 61 74 66 6f 72 6d 20 24 76 65 72 62 6f 73 65 latform$verbose
b740: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
b750: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
b760: 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 7b 20  yLoadAssembly {
b770: 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f  fileName {platfo
b780: 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20  rm ""} } {..
b790: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
b7a0: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
b7b0: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61  e $fileName$pla
b7c0: 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20  tform]....
b7d0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
b7e0: 20 20 20 20 20 20 73 65 74 20 61 73 73 65 6d 62        set assemb
b7f0: 6c 79 20 5b 6f 62 6a 65 63 74 20 6c 6f 61 64 20  ly [object load
b800: 2d 6c 6f 61 64 74 79 70 65 20 46 69 6c 65 20 2d  -loadtype File -
b810: 61 6c 69 61 73 20 24 66 69 6c 65 4e 61 6d 65 5d  alias $fileName] b820: 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d .. }] == 0} b830: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. b840: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO b850: 54 45 3a 20 4e 6f 77 2c 20 61 64 64 20 74 68 65 TE: Now, add the b860: 20 6e 65 63 65 73 73 61 72 79 20 74 65 73 74 20 necessary test b870: 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 constraint... b880: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. b890: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 66 addConstraint [f b8a0: 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 ile rootname [fi b8b0: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
b8c0: 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  e]]....        #
b8d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
b8e0: 3a 20 47 72 61 62 20 74 68 65 20 69 6d 61 67 65  : Grab the image
b8f0: 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e   runtime version
b900: 20 66 72 6f 6d 20 74 68 65 20 61 73 73 65 6d 62   from the assemb
b910: 6c 79 20 62 65 63 61 75 73 65 0d 0a 20 20 20 20  ly because..
b920: 20 20 20 20 23 20 20 20 20 20 20 20 73 65 76 65      #       seve
b930: 72 61 6c 20 74 65 73 74 73 20 72 65 6c 79 20 6f  ral tests rely o
b940: 6e 20 69 74 20 68 61 76 69 6e 67 20 61 20 63 65  n it having a ce
b950: 72 74 61 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 20  rtain value...
b960: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b970: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b   addConstraint [
b980: 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65  appendArgs [file
b990: 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d   tail $fileName] b9a0: 20 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 _ \.. b9b0: 20 20 5b 24 61 73 73 65 6d 62 6c 79 20 49 6d 61 [$assembly Ima
b9c0: 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
b9d0: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  ]]....        #.
b9e0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
b9f0: 20 52 65 74 75 72 6e 20 74 68 65 20 66 75 6c 6c   Return the full
ba00: 20 70 61 74 68 20 6f 66 20 74 68 65 20 6c 6f 61   path of the loa
ba10: 64 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20  ded file...
ba20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
ba30: 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  turn $fileName.. ba40: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... ba50: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. ba60: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 }..... proc i ba70: 73 53 51 4c 69 74 65 52 65 61 64 79 20 7b 7d 20 sSQLiteReady {} ba80: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. ba90: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 # NOTE: This p baa0: 72 6f 63 65 64 75 72 65 20 6d 75 73 74 20 72 65 rocedure must re bab0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e turn non-zero on bac0: 6c 79 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 ly if the SQLite bad0: 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 23 native.. # bae0: 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 20 61 library a baf0: 6e 64 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 nd the System.Da bb00: 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 ta.SQLite manage bb10: 64 20 61 73 73 65 6d 62 6c 79 20 61 72 65 20 6c d assembly are l bb20: 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 oaded.. # bb30: 20 20 20 20 20 61 6e 64 20 72 65 61 64 79 20 66 and ready f bb40: 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 or use by the te bb50: 73 74 20 73 75 69 74 65 2e 20 20 43 75 72 72 65 st suite. Curre bb60: 6e 74 6c 79 2c 20 74 68 69 73 20 70 72 6f 63 65 ntly, this proce bb70: 64 75 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 dure.. # bb80: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 63 61 should be ca bb90: 6c 6c 65 64 20 6f 6e 6c 79 20 61 66 74 65 72 20 lled only after bba0: 74 68 65 20 5b 74 72 79 4c 6f 61 64 41 73 73 65 the [tryLoadAsse bbb0: 6d 62 6c 79 5d 20 70 72 6f 63 65 64 75 72 65 20 mbly] procedure bbc0: 68 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 has.. # bbd0: 20 20 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 been called t bbe0: 6f 20 70 72 6f 62 65 20 66 6f 72 20 74 68 65 20 o probe for the bbf0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi bc00: 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d te managed assem bc10: 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 bly.. # bc20: 20 20 20 61 6e 64 20 74 68 65 20 5b 63 68 65 63 and the [chec bc30: 6b 46 6f 72 53 51 4c 69 74 65 5d 20 70 72 6f 63 kForSQLite] proc bc40: 65 64 75 72 65 20 68 61 73 20 62 65 65 6e 20 63 edure has been c bc50: 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66 alled to probe f bc60: 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 or.. # bc70: 20 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 74 the SQLite nat bc80: 69 76 65 20 6c 69 62 72 61 72 79 3b 20 6f 74 68 ive library; oth bc90: 65 72 77 69 73 65 2c 20 74 68 69 73 20 70 72 6f erwise, this pro bca0: 63 65 64 75 72 65 20 77 69 6c 6c 20 73 69 6d 70 cedure will simp bcb0: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ly.. # bcc0: 20 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 always return bcd0: 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a zero... #.. bce0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 return [ex bcf0: 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b 68 pr {.. [h bd00: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 aveConstraint Sy bd10: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite bd20: 5d 20 26 26 20 5b 68 61 76 65 43 6f 6e 73 74 72 ] && [haveConstr bd30: 61 69 6e 74 20 53 51 4c 69 74 65 5d 0d 0a 20 20 aint SQLite].. bd40: 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c }].. }... bd50: 0d 0a 20 20 20 20 70 72 6f 63 20 6d 61 74 63 68 .. proc match bd60: 50 6c 61 74 66 6f 72 6d 20 7b 20 70 6c 61 74 66 Platform { platf bd70: 6f 72 6d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 orm } {.. # bd80: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: bd90: 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 An empty string bda0: 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d for the platform bdb0: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 means that the bdc0: 62 75 69 6c 64 20 69 73 20 6e 6f 74 0d 0a 20 20 build is not.. bdd0: 20 20 20 20 23 20 20 20 20 20 20 20 5b 70 72 69 # [pri bde0: 6d 61 72 69 6c 79 5d 20 61 20 6e 61 74 69 76 65 marily] a native bdf0: 20 62 75 69 6c 64 3b 20 74 68 65 72 65 66 6f 72 build; therefor be00: 65 2c 20 69 74 20 61 6c 77 61 79 73 20 6d 61 74 e, it always mat be10: 63 68 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ches... #.. be20: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin be30: 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f g length$platfo
be40: 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  rm] == 0} then {
be50: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
be60: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a   true..      }..
be70: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
be80: 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68   # NOTE: Does th
be90: 65 20 73 70 65 63 69 66 69 65 64 20 70 6c 61 74  e specified plat
bea0: 66 6f 72 6d 20 6d 61 74 63 68 20 75 70 20 74 6f  form match up to
beb0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
bec0: 63 65 73 73 3f 0d 0a 20 20 20 20 20 20 23 0d 0a  cess?..      #..
bed0: 20 20 20 20 20 20 69 66 20 7b 24 70 6c 61 74 66        if {$platf bee0: 6f 72 6d 20 65 71 20 5b 6d 61 63 68 69 6e 65 54 orm eq [machineT bef0: 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c oPlatform$::tcl
bf00: 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e  _platform(machin
bf10: 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e)]} then {..
bf20: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
bf30: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
bf40: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
bf50: 54 45 3a 20 54 68 65 20 73 70 65 63 69 66 69 65  TE: The specifie
bf60: 64 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73 20  d platform does
bf70: 6e 6f 74 20 6d 61 74 63 68 20 75 70 20 77 69 74  not match up wit
bf80: 68 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a  h the platform..
bf90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f        #       fo
bfa0: 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  r the current pr
bfb0: 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d  ocess...      #.
bfc0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61  .      return fa
bfd0: 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  lse..    }.....
bfe0: 20 20 20 70 72 6f 63 20 68 61 76 65 53 51 4c 69     proc haveSQLi
bff0: 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20  teObjectCommand
c000: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
c010: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20       # NOTE: Is
c020: 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d  the [object] com
c030: 6d 61 6e 64 20 63 75 72 72 65 6e 74 6c 79 20 61  mand currently a
c040: 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20  vailable?..
c050: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
c060: 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68   [expr {[llength
c070: 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20   [info commands
c080: 6f 62 6a 65 63 74 5d 5d 20 3e 20 30 7d 5d 0d 0a  object]] > 0}]..
c090: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
c0a0: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  oc checkForSQLit
c0b0: 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 7b  eObjectCommand {
c0c0: 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20   channel } {..
c0d0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann c0e0: 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e el "---- checkin c0f0: 67 20 66 6f 72 20 5c 22 6f 62 6a 65 63 74 5c 22 g for \"object\" c100: 20 63 6f 6d 6d 61 6e 64 20 75 73 61 67 65 2e 2e command usage.. c110: 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 . ".... if c120: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : c130: 3a 6e 6f 28 73 71 6c 69 74 65 4f 62 6a 65 63 74 :no(sqliteObject c140: 43 6f 6d 6d 61 6e 64 29 5d 20 26 26 20 5c 0d 0a Command)] && \.. c150: 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53 [haveS c160: 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 QLiteObjectComma c170: 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 nd]} then {.. c180: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
c190: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20  nel yes\n..
c1a0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
c1b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
c1c0: 4e 4f 54 45 3a 20 55 6e 6c 65 73 73 20 77 65 20  NOTE: Unless we
c1d0: 61 72 65 20 66 6f 72 62 69 64 64 65 6e 20 66 72  are forbidden fr
c1e0: 6f 6d 20 64 6f 69 6e 67 20 73 6f 2c 20 61 64 64  om doing so, add
c1f0: 20 73 6f 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74   some constraint
c200: 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
c210: 20 20 20 74 68 61 74 20 77 69 6c 6c 20 61 6c 6c     that will all
c220: 6f 77 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 74  ow most of the t
c230: 65 73 74 20 73 75 69 74 65 20 74 6f 20 72 75 6e  est suite to run
c240: 20 28 69 2e 65 2e 20 74 68 6f 73 65 0d 0a 20 20   (i.e. those..
c250: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
c260: 73 74 73 20 74 68 61 74 20 64 6f 20 6e 6f 74 20  sts that do not
c270: 64 69 72 65 63 74 6c 79 20 72 65 6c 79 20 75 70  directly rely up
c280: 6f 6e 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20  on the [object]
c290: 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 20  command)...
c2a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
c2b0: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
c2c0: 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 41  ::no(shimSQLiteA
c2d0: 73 73 65 6d 62 6c 79 43 6f 6e 73 74 72 61 69 6e  ssemblyConstrain
c2e0: 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ts)]} then {..
c2f0: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
c300: 72 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a 20 20  raint SQLite..
c310: 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
c320: 72 61 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65  raint SQLiteInte
c330: 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20 61  rop..          a
c340: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73  ddConstraint Sys
c350: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d  tem.Data.SQLite.
c360: 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f  .          addCo
c370: 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e  nstraint System.
c380: 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72  Data.SQLite.Encr
c390: 79 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  yption..
c3a0: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
c3b0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
c3c0: 74 65 2e 4c 69 6e 71 0d 0a 0d 0a 20 20 20 20 20  te.Linq....
c3d0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
c3e0: 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  nt [appendArgs \
c3f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
c400: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
c410: 74 65 2e 64 6c 6c 5f 76 20 5b 67 65 74 42 75 69  te.dll_v [getBui
c420: 6c 64 43 6c 72 56 65 72 73 69 6f 6e 5d 5d 0d 0a  ldClrVersion]]..
c430: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
c440: 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
c450: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d  exists ::no(shim
c460: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
c470: 74 61 6e 74 43 6f 6e 73 74 72 61 69 6e 74 73 29  tantConstraints)
c480: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
c490: 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 65 66       foreach def
c4a0: 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73  ineConstant [lis
c4b0: 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
c4c0: 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e     INTEROP_EXTEN
c4d0: 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49  SION_FUNCTIONS I
c4e0: 4e 54 45 52 4f 50 5f 46 54 53 35 5f 45 58 54 45  NTEROP_FTS5_EXTE
c4f0: 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20  NSION \..
c500: 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 4a         INTEROP_J
c510: 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 20 49  SON1_EXTENSION I
c520: 4e 54 45 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c  NTEROP_PERCENTIL
c530: 45 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20  E_EXTENSION \..
c540: 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54               INT
c550: 45 52 4f 50 5f 52 45 47 45 58 50 5f 45 58 54 45  EROP_REGEXP_EXTE
c560: 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 54 45  NSION INTEROP_TE
c570: 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a  ST_EXTENSION \..
c580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e                IN
c590: 54 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45 58 54  TEROP_TOTYPE_EXT
c5a0: 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 56  ENSION INTEROP_V
c5b0: 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 5c 0d 0a  IRTUAL_TABLE \..
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 55 53                US
c5d0: 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 5d 20 7b  E_INTEROP_DLL] {
c5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 64  ..            ad
c5f0: 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
c600: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
c610: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e             defin
c620: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
c630: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 20 24 64  .Data.SQLite. $d c640: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 5d 0d 0a efineConstant].. c650: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. c660: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... c670: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi c680: 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c sts ::no(shimSQL c690: 69 74 65 56 69 73 75 61 6c 53 74 75 64 69 6f 43 iteVisualStudioC c6a0: 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 onstraints)]} th c6b0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. c6c0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 addConstraint [a c6d0: 70 70 65 6e 64 41 72 67 73 20 76 69 73 75 61 6c ppendArgs visual c6e0: 53 74 75 64 69 6f 20 5b 67 65 74 42 75 69 6c 64 Studio [getBuild c6f0: 59 65 61 72 5d 5d 0d 0a 20 20 20 20 20 20 20 20 Year]].. c700: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 }.... tpu c710: 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e ts$channel no\n
c720: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
c730: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68  .....    proc ch
c740: 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d  angeNativeRuntim
c750: 65 4f 70 74 69 6f 6e 20 7b 20 6e 61 74 69 76 65  eOption { native
c760: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b   } {..      if {
c770: 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63  [llength [info c
c780: 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 5d 5d 20  ommands debug]]
c790: 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  > 0 && \..
c7a0: 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e      [llength [in
c7b0: 66 6f 20 73 75 62 63 6f 6d 6d 61 6e 64 73 20 64  fo subcommands d
c7c0: 65 62 75 67 20 72 75 6e 74 69 6d 65 6f 70 74 69  ebug runtimeopti
c7d0: 6f 6e 5d 5d 20 3e 20 30 20 26 26 20 5b 63 61 74  on]] > 0 && [cat
c7e0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 64 65  ch {..        de
c7f0: 62 75 67 20 72 75 6e 74 69 6d 65 6f 70 74 69 6f  bug runtimeoptio
c800: 6e 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65  n [expr {$native c810: 20 3f 20 22 61 64 64 22 20 3a 20 22 72 65 6d 6f ? "add" : "remo c820: 76 65 22 7d 5d 20 6e 61 74 69 76 65 0d 0a 20 20 ve"}] native.. c830: 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 }] == 0} the c840: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret c850: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. c860: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ c870: 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 haveSQLiteObject c880: 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5b 63 61 74 Command] && [cat c890: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 ch {.. ob c8a0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 ject invoke Inte c8b0: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 rpreter.GetActiv c8c0: 65 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 e [expr {$native
c8d0: 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   ? \..
c8e0: 20 20 22 41 64 64 52 75 6e 74 69 6d 65 4f 70 74    "AddRuntimeOpt
c8f0: 69 6f 6e 22 20 3a 20 22 52 65 6d 6f 76 65 52 75  ion" : "RemoveRu
c900: 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 7d 5d 20 6e  ntimeOption"}] n
c910: 61 74 69 76 65 0d 0a 20 20 20 20 20 20 7d 5d 20  ative..      }]
c920: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
c930: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
c940: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  e..      }....
c950: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
c960: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
c970: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c  proc checkForSQL
c980: 69 74 65 42 75 69 6c 64 73 20 7b 20 63 68 61 6e  iteBuilds { chan
c990: 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c 73  nel {select fals
c9a0: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
c9b0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
c9c0: 68 65 63 6b 20 66 6f 72 20 65 76 65 72 79 20 70  heck for every p
c9d0: 6f 73 73 69 62 6c 65 20 76 61 6c 69 64 20 63 6f  ossible valid co
c9e0: 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 76 61 6c  mbination of val
c9f0: 75 65 73 20 75 73 65 64 20 77 68 65 6e 0d 0a 20  ues used when..
ca00: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63       #       loc
ca10: 61 74 69 6e 67 20 6f 75 74 20 74 68 65 20 62 75  ating out the bu
ca20: 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63  ild output direc
ca30: 74 6f 72 79 2c 20 73 68 6f 77 69 6e 67 20 65 61  tory, showing ea
ca40: 63 68 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20  ch available..
ca50: 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c      #       buil
ca60: 64 20 76 61 72 69 61 74 69 6f 6e 20 61 6c 6f 6e  d variation alon
ca70: 67 20 74 68 65 20 77 61 79 2e 0d 0a 20 20 20 20  g the way...
ca80: 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61    #..      forea
ca90: 63 68 20 6e 61 74 69 76 65 20 5b 6c 69 73 74 20  ch native [list
caa0: 66 61 6c 73 65 20 74 72 75 65 5d 20 7b 0d 0a 20  false true] {..
cab0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 79         foreach y
cac0: 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 61  ear [getBuildYea
cad0: 72 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  rs] {..
cae0: 20 66 6f 72 65 61 63 68 20 63 6f 6e 66 69 67 75   foreach configu
caf0: 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64  ration [getBuild
cb00: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20  Configurations]
cb10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
cb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
cb30: 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74  NOTE: Figure out
cb40: 20 74 68 65 20 65 66 66 65 63 74 69 76 65 20 62   the effective b
cb50: 75 69 6c 64 20 70 6c 61 74 66 6f 72 6d 2e 20 20  uild platform.
cb60: 54 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20  This is..
cb70: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 61 73       #       bas
cb80: 65 64 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72  ed on whether or
cb90: 20 6e 6f 74 20 61 20 5b 70 72 69 6d 61 72 69 6c   not a [primaril
cba0: 79 5d 20 6e 61 74 69 76 65 20 62 75 69 6c 64 0d  y] native build.
cbb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20  .            #
cbc0: 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 75 73       is being us
cbd0: 65 64 2e 20 20 46 6f 72 20 5b 70 72 69 6d 61 72  ed.  For [primar
cbe0: 69 6c 79 5d 20 6e 6f 6e 2d 6e 61 74 69 76 65 20  ily] non-native
cbf0: 62 75 69 6c 64 73 2c 0d 0a 20 20 20 20 20 20 20  builds,..
cc00: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69       #       thi
cc10: 73 20 77 69 6c 6c 20 62 65 20 61 6e 20 65 6d 70  s will be an emp
cc20: 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20  ty string...
cc30: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
cc40: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66         set platf
cc50: 6f 72 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61  orm [getBuildPla
cc60: 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 5d 0d 0a  tform $native].. cc70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp cc80: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
cc90: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
ccb0: 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
ccc0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
ccd0: 65 20 62 75 69 6c 64 20 5c 22 22 20 5b 65 78 70  e build \"" [exp
cce0: 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r \..
ccf0: 20 20 20 20 20 7b 24 6e 61 74 69 76 65 20 3f 20       {$native ? cd00: 22 6e 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d "native/" : ""}] cd10: 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 [expr {[string cd20: 6c 65 6e 67 74 68 20 5c 0d 0a 20 20 20 20 20 20 length \.. cd30: 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66$platf
cd40: 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65  orm] > 0 ? [appe
cd50: 6e 64 41 72 67 73 20 24 70 6c 61 74 66 6f 72 6d  ndArgs $platform cd60: 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 /] : ""}]$year
cd70: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
cd80: 20 20 20 20 2f 20 24 63 6f 6e 66 69 67 75 72 61      / $configura cd90: 74 69 6f 6e 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a tion "\"... "].. cda0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. cdb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N cdc0: 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 OTE: Build the f cdd0: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 64 ully qualified d cde0: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 irectory where t cdf0: 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 he necessary.. ce00: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # ce10: 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 components for ce20: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL ce30: 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20 66 6f ite should be fo ce40: 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 und... ce50: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. ce60: 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b set directory [ ce70: 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f joinBuildDirecto ce80: 72 79 20 24 6e 61 74 69 76 65 20 5c 0d 0a 20 20 ry$native \..
ce90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67                [g
cea0: 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63  etBuildBaseDirec
ceb0: 74 6f 72 79 5d 20 24 79 65 61 72 20 24 70 6c 61  tory] $year$pla
cec0: 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61  tform $configura ced0: 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 tion].... cee0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. cef0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 20 74 # NOTE: Do t cf00: 68 65 20 6e 65 63 65 73 73 61 72 79 20 66 69 6c he necessary fil cf10: 65 73 20 65 78 69 73 74 3f 20 20 43 75 72 72 65 es exist? Curre cf20: 6e 74 6c 79 2c 20 6e 6f 20 6f 74 68 65 72 20 73 ntly, no other s cf30: 74 65 70 73 0d 0a 20 20 20 20 20 20 20 20 20 20 teps.. cf40: 20 20 23 20 20 20 20 20 20 20 61 72 65 20 74 61 # are ta cf50: 6b 65 6e 20 74 6f 20 76 65 72 69 66 79 20 74 68 ken to verify th cf60: 69 73 20 62 75 69 6c 64 20 69 73 20 61 63 74 75 is build is actu cf70: 61 6c 6c 79 20 76 69 61 62 6c 65 2e 0d 0a 20 20 ally viable... cf80: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. cf90: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 if {[is cfa0: 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 24 BuildAvailable$
cfb0: 6e 61 74 69 76 65 20 24 64 69 72 65 63 74 6f 72  native $director cfc0: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. cfd0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. cfe0: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT cff0: 45 3a 20 57 68 65 6e 20 69 6e 20 22 73 65 6c 65 E: When in "sele d000: 63 74 22 20 6d 6f 64 65 2c 20 61 75 74 6f 6d 61 ct" mode, automa d010: 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 tically select t d020: 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20 20 20 he first.. d030: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # d040: 61 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 20 available build d050: 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 of System.Data.S d060: 51 4c 69 74 65 20 61 6e 64 20 74 68 65 6e 20 72 QLite and then r d070: 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 20 20 20 eturn.. d080: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6d 6d # imm d090: 65 64 69 61 74 65 6c 79 2e 0d 0a 20 20 20 20 20 ediately... d0a0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. d0b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 73 if {$s
d0c0: 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 50  elect && [matchP
d0d0: 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72  latform $platfor d0e0: 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 m]} then {.. d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. d100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 # d110: 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 6c 79 20 NOTE: Manually d120: 6f 76 65 72 72 69 64 65 20 61 6c 6c 20 74 68 65 override all the d130: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 build directory d140: 20 73 65 6c 65 63 74 69 6f 6e 0d 0a 20 20 20 20 selection.. d150: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # d160: 20 20 20 20 72 65 6c 61 74 65 64 20 74 65 73 74 related test d170: 20 73 65 74 74 69 6e 67 73 20 69 6e 20 6f 72 64 settings in ord d180: 65 72 20 74 6f 20 66 6f 72 63 65 20 74 68 69 73 er to force this d190: 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 build.. d1a0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # d1b0: 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 of System.Data.S d1c0: 51 4c 69 74 65 20 74 6f 20 62 65 20 75 73 65 64 QLite to be used d1d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... d1e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. d1f0: 20 20 20 20 20 20 69 66 20 7b 21 5b 63 68 61 6e if {![chan d200: 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f geNativeRuntimeO d210: 70 74 69 6f 6e 20 24 6e 61 74 69 76 65 5d 7d 20 ption$native]}
d220: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
d230: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
d240: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append d250: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. d260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e "n d270: 6f 2c 20 66 61 69 6c 65 64 20 74 6f 20 22 20 5b o, failed to " [ d280: 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 expr {$native ?
d290: 22 61 64 64 22 20 3a 20 22 72 65 6d 6f 76 65 22  "add" : "remove"
d2a0: 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  }] \..
d2b0: 20 20 20 20 20 20 20 20 20 20 20 20 22 20 74 68              " th
d2c0: 65 20 5c 22 6e 61 74 69 76 65 5c 22 20 72 75 6e  e \"native\" run
d2d0: 74 69 6d 65 20 6f 70 74 69 6f 6e 5c 6e 22 5d 0d  time option\n"].
d2e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
d2f0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
d300: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
d310: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
d320: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65          set ::te
d330: 73 74 5f 79 65 61 72 20 24 79 65 61 72 0d 0a 20  st_year $year.. d340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 s d350: 65 74 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f et ::test_platfo d360: 72 6d 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 rm$platform..
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
d380: 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75  t ::test_configu
d390: 72 61 74 69 6f 6e 20 24 63 6f 6e 66 69 67 75 72  ration $configur d3a0: 61 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 ation.... d3b0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
d3c0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
d3d0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
d3e0: 20 20 20 20 20 20 20 20 20 20 20 22 79 65 73 2c             "yes,
d3f0: 20 73 65 6c 65 63 74 65 64 20 28 22 20 5b 65 78   selected (" [ex
d400: 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e  pr {$native ? "n d410: 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5c ative/" : ""}] \ d420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. d430: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b 73 74 [expr {[st d440: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 ring length$pla
d450: 74 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 70  tform] > 0 ? [ap
d460: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
d470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d480: 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22  $platform /] : " d490: 22 7d 5d 20 24 79 65 61 72 20 2f 20 24 63 6f 6e "}]$year / $con d4a0: 66 69 67 75 72 61 74 69 6f 6e 20 22 29 5c 6e 22 figuration ")\n" d4b0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... d4c0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true d4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. d4e0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. d4f0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs d500: 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a$channel yes\n..
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
d520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
d530: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
d540: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan d550: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 nel no\n.. d560: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. d570: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. d580: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... d590: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. d5a0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr d5b0: 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 oc checkForSQLit d5c0: 65 52 65 6c 65 61 73 65 73 20 7b 20 63 68 61 6e eReleases { chan d5d0: 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c 73 nel {select fals d5e0: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. d5f0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C d600: 68 65 63 6b 20 66 6f 72 20 70 61 73 74 20 72 65 heck for past re d610: 6c 65 61 73 65 73 20 6f 66 20 53 79 73 74 65 6d leases of System d620: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 69 6e 20 .Data.SQLite in d630: 74 68 65 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 the directory.. d640: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con d650: 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 22 53 tained in the "S d660: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit d670: 65 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 e" environment v d680: 61 72 69 61 62 6c 65 2c 20 69 66 0d 0a 20 20 20 ariable, if.. d690: 20 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65 # prese d6a0: 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 nt... #.. d6b0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex d6c0: 69 73 74 73 20 3a 3a 65 6e 76 28 53 79 73 74 65 ists ::env(Syste d6d0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 5d 20 m.Data.SQLite)] d6e0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. d6f0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
d700: 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74  ::env(System.Dat
d710: 61 2e 53 51 4c 69 74 65 29 5d 20 3e 20 30 7d 20  a.SQLite)] > 0}
d720: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
d730: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
d740: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c  E: Build the ful
d750: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 64 69 72  ly qualified dir
d760: 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65  ectory where the
d770: 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20   necessary..
d780: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70      #       comp
d790: 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65  onents for Syste
d7a0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68  m.Data.SQLite sh
d7b0: 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a  ould be found...
d7c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
d7d0: 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79     set directory
d7e0: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
d7f0: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
d800: 20 20 20 20 20 20 20 20 20 20 20 20 24 3a 3a 65              $::e d810: 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 nv(System.Data.S d820: 51 4c 69 74 65 29 20 5b 67 65 74 52 65 6c 65 61 QLite) [getRelea d830: 73 65 56 65 72 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a seVersion]]].... d840: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
d850: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
d860: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
d870: 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67    "---- checking
d880: 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61   for System.Data
d890: 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 73 65 20  .SQLite release
d8a0: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
d8b0: 20 20 20 24 64 69 72 65 63 74 6f 72 79 20 22 5c     $directory "\ d8c0: 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 "... "].... d8d0: 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 73 if {[isReleas d8e0: 65 41 76 61 69 6c 61 62 6c 65 20 24 64 69 72 65 eAvailable$dire
d8f0: 63 74 6f 72 79 20 70 6c 61 74 66 6f 72 6d 5d 7d  ctory platform]}
d900: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
d910: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
d920: 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] d930: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. d940: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 set p d950: 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d latform unknown. d960: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... d970: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 73 if {$s
d980: 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 50  elect && [matchP
d990: 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72  latform $platfor d9a0: 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 m]} then {.. d9b0: 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 62 75 set ::bu d9c0: 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 20 24 64 ild_directory$d
d9d0: 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20  irectory....
d9e0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c d9f0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr da00: 67 73 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 gs "yes, selecte da10: 64 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 d ("$platform "
da20: 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  )\n"]....
da30: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
da40: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
da50: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
da60: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel da70: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 [appendArgs "ye da80: 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 s ("$platform "
da90: 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  )\n"]..
daa0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
dab0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
dac0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n dad0: 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 o\n.... dae0: 20 66 6f 72 65 61 63 68 20 70 61 74 68 20 5b 6c foreach path [l daf0: 73 6f 72 74 20 2d 64 65 63 72 65 61 73 69 6e 67 sort -decreasing db00: 20 5b 66 69 6c 65 20 6c 69 73 74 20 24 64 69 72 [file list$dir
db10: 65 63 74 6f 72 79 20 2a 5d 5d 20 7b 0d 0a 20 20  ectory *]] {..
db20: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66            if {[f
db30: 69 6c 65 20 65 78 69 73 74 73 20 24 70 61 74 68  ile exists $path db40: 5d 20 26 26 20 5b 66 69 6c 65 20 69 73 64 69 72 ] && [file isdir db50: 65 63 74 6f 72 79 20 24 70 61 74 68 5d 7d 20 74 ectory$path]} t
db60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
db70: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan db80: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs db90: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. dba0: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check dbb0: 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 ing for System.D dbc0: 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 ata.SQLite relea dbd0: 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 se \"" \.. dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 24 70 61 74$pat
dbf0: 68 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20  h "\"... "]....
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
dc10: 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c  {[isReleaseAvail
dc20: 61 62 6c 65 20 24 70 61 74 68 20 70 6c 61 74 66  able $path platf dc30: 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 orm]} then {.. dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if dc50: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length dc60: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30$platform] == 0
dc70: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
dc90: 70 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e  platform unknown
dca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
dcb0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
dcc0: 20 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65         if {$sele dcd0: 63 74 20 26 26 20 5b 6d 61 74 63 68 50 6c 61 74 ct && [matchPlat dce0: 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 7d form$platform]}
dcf0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
dd00: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a             set :
dd10: 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79  :build_directory
dd20: 20 24 70 61 74 68 0d 0a 0d 0a 20 20 20 20 20 20   $path.... dd30: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput dd40: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
dd50: 6e 64 41 72 67 73 20 22 79 65 73 2c 20 73 65 6c  ndArgs "yes, sel
dd60: 65 63 74 65 64 20 28 22 20 24 70 6c 61 74 66 6f  ected (" $platfo dd70: 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 rm ")\n"].... dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r dd90: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. dda0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el ddb0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. ddc0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
ddd0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
dde0: 67 73 20 22 79 65 73 20 28 22 20 24 70 6c 61 74  gs "yes (" $plat ddf0: 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 form ")\n"].. de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 } de20: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. de30: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
de40: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20  hannel no\n..
de50: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
de60: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
de70: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
de80: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
de90: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
dea0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app deb0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. dec0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 6e 76 "---- env ded0: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c ironment variabl dee0: 65 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e e \"System.Data. def0: 53 51 4c 69 74 65 5c 22 20 69 73 20 6e 6f 74 20 SQLite\" is not df00: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. df10: 20 22 73 65 74 2c 20 73 6b 69 70 70 69 6e 67 20 "set, skipping df20: 63 68 65 63 6b 20 66 6f 72 20 72 65 6c 65 61 73 check for releas df30: 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 20 20 20 20 20 es...\n"].. df40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu df50: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. df60: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 .... proc che df70: 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 ckForSQLiteLibra df80: 72 79 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b ry { channel } { df90: 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 .. tputs$c
dfa0: 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65  hannel "---- che
dfb0: 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 65  cking for SQLite
dfc0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 2e 2e   core library...
dfd0: 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   "....      if {
dfe0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
dff0: 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
e000: 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
e010: 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
e020: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
e030: 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69  ite.SQLite3 SQLi
e040: 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  teVersion..
e050: 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30   } version] == 0
e060: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
e070: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
e080: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
e090: 65 20 72 65 74 75 72 6e 65 64 20 76 65 72 73 69  e returned versi
e0a0: 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66  on was null.  If
e0b0: 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73   so, make it eas
e0c0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
e0d0: 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20     to spot...
e0e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
e0f0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
e100: 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20  th $version] == e110: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. e120: 20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e set version e130: 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d null.. } e140: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. e150: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A e160: 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72 79 20 ttempt to query e170: 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 the Fossil sourc e180: 65 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 e identifier for e190: 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 the SQLite.. e1a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 72 # cor e1b0: 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 e library... e1c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i e1d0: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. e1e0: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in e1f0: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non e200: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. e210: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D e220: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit e230: 65 33 20 53 51 4c 69 74 65 53 6f 75 72 63 65 49 e3 SQLiteSourceI e240: 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 6f 75 d.. } sou e250: 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a rceId]} then {.. e260: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. e270: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 # NOTE: W e280: 65 20 66 61 69 6c 65 64 20 74 6f 20 71 75 65 72 e failed to quer e290: 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 y the Fossil sou e2a0: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 2e 0d rce identifier.. e2b0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. e2c0: 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 set sour e2d0: 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 ceId unknown.. e2e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... e2f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # e300: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t e310: 68 65 20 72 65 74 75 72 6e 65 64 20 46 6f 73 73 he returned Foss e320: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 il source identi e330: 66 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e 20 20 fier was null. e340: 49 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 If.. # e350: 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 so, make it e360: 65 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 easy to spot... e370: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. e380: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le e390: 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d 20 ngth$sourceId]
e3a0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
e3b0: 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72          set sour
e3c0: 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20  ceId null..
e3d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
e3e0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
e3f0: 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69  E: Yes, the SQLi
e400: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library
e410: 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 76  appears to be av
e420: 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20  ailable...
e430: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64    #..        add
e440: 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74  Constraint SQLit
e450: 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e....        tpu
e460: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app e470: 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 endArgs "yes (" e480: 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73 6f$version " " $so e490: 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 urceId ")\n"].. e4a0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. e4b0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
e4c0: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..
e4d0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
e4e0: 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72     proc checkFor
e4f0: 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 7b 20  SQLiteInterop {
e500: 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20  channel } {..
e510: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe e520: 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 l "---- checking e530: 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e 74 65 for SQLite inte e540: 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 rop assembly... e550: 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ".... if {[ e560: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. e570: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - e580: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic e590: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. e5a0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi e5b0: 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 72 te.SQLite3 Inter e5c0: 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 opVersion.. e5d0: 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 } version] == 0 e5e0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. e5f0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N e600: 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th e610: 65 20 72 65 74 75 72 6e 65 64 20 76 65 72 73 69 e returned versi e620: 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 on was null. If e630: 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 so, make it eas e640: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # e650: 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 to spot... e660: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. e670: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng e680: 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 th$version] ==
e690: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
e6a0: 20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e       set version
e6b0: 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d   null..        }
e6c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
e6d0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
e6e0: 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72 79 20  ttempt to query
e6f0: 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 63  the Fossil sourc
e700: 65 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72  e identifier for
e710: 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20   the SQLite..
e720: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 72       #       cor
e730: 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  e library...
e740: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
e750: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
e760: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
e770: 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
e780: 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
e790: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
e7a0: 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
e7b0: 65 33 20 49 6e 74 65 72 6f 70 53 6f 75 72 63 65  e3 InteropSource
e7c0: 49 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 6f  Id..        } so
e7d0: 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b 0d  urceId]} then {.
e7e0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
e7f0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
e800: 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 75 65  We failed to que
e810: 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f  ry the Fossil so
e820: 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 2e  urce identifier.
e830: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
e840: 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75           set sou
e850: 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a 20  rceId unknown..
e860: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
e870: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
e880: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
e890: 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 6f 73  the returned Fos
e8a0: 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74  sil source ident
e8b0: 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e 20  ifier was null.
e8c0: 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20   If..        #
e8d0: 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69 74       so, make it
e8e0: 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d 0a   easy to spot...
e8f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
e900: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
e910: 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d  ength $sourceId] e920: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. e930: 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 set sou e940: 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 rceId null.. e950: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... e960: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO e970: 54 45 3a 20 42 65 66 6f 72 65 20 61 63 74 75 61 TE: Before actua e980: 6c 6c 79 20 61 64 64 69 6e 67 20 74 68 65 20 74 lly adding the t e990: 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 est constraint, e9a0: 6d 61 6b 65 20 73 75 72 65 20 74 68 65 0d 0a 20 make sure the.. e9b0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 # v e9c0: 65 72 73 69 6f 6e 20 69 73 20 76 61 6c 69 64 20 ersion is valid e9d0: 28 69 2e 65 2e 20 6e 6f 74 20 6a 75 73 74 20 74 (i.e. not just t e9e0: 68 61 74 20 77 65 20 63 6f 75 6c 64 20 71 75 65 hat we could que e9f0: 72 79 20 69 74 29 2e 0d 0a 20 20 20 20 20 20 20 ry it)... ea00: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { ea10: 24 76 65 72 73 69 6f 6e 20 6e 65 20 22 6e 75 6c$version ne "nul
ea20: 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  l"} then {..
ea30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
ea40: 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20     # NOTE: Yes,
ea50: 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 65 72  the SQLite inter
ea60: 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 70 70 65  op assembly appe
ea70: 61 72 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61  ars to be availa
ea80: 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ble...
ea90: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64  #..          add
eaa0: 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74  Constraint SQLit
eab0: 65 49 6e 74 65 72 6f 70 0d 0a 0d 0a 20 20 20 20  eInterop....
eac0: 20 20 20 20 20 20 73 65 74 20 61 6e 73 77 65 72        set answer
ead0: 20 79 65 73 0d 0a 20 20 20 20 20 20 20 20 7d 20   yes..        }
eae0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
eaf0: 20 20 73 65 74 20 61 6e 73 77 65 72 20 6e 6f 0d    set answer no.
eb00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
eb10: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha eb20: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs eb30: 20 24 61 6e 73 77 65 72 20 22 20 28 22 20 24 76$answer " (" $v eb40: 65 72 73 69 6f 6e 20 22 20 22 20 24 73 6f 75 72 ersion " "$sour
eb50: 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 20  ceId ")\n"]..
eb60: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
eb70: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan eb80: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 nel no\n.. eb90: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... eba0: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 proc checkForSQ ebb0: 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 LiteDefineConsta ebc0: 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20 6e 61 6d nt { channel nam ebd0: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 e } {.. tpu ebe0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
ebf0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
ec00: 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b       "---- check
ec10: 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44  ing for System.D
ec20: 61 74 61 2e 53 51 4c 69 74 65 20 64 65 66 69 6e  ata.SQLite defin
ec30: 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22 22 20 24  e constant \"" $ec40: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 name \.. ec50: 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 "\"... "].... ec60: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch ec70: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec ec80: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags ec90: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. eca0: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System ecb0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL ecc0: 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 74 ite3 DefineConst ecd0: 61 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 64 65 ants.. } de ece0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3d fineConstants] = ecf0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. ed00: 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 if {[lsearc ed10: 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 h -exact -nocase ed20: 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74$defineConstant
ed30: 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d 31 7d 20  s $name] != -1} ed40: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. ed50: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # ed60: 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 69 73 NOTE: Yes, this ed70: 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 define constant ed80: 20 77 61 73 20 65 6e 61 62 6c 65 64 20 77 68 65 was enabled whe ed90: 6e 20 74 68 65 20 6d 61 6e 61 67 65 64 0d 0a 20 n the managed.. eda0: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # edb0: 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20 63 6f assembly was co edc0: 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 mpiled... edd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. ede0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 addConstraint [a edf0: 70 70 65 6e 64 41 72 67 73 20 64 65 66 69 6e 65 ppendArgs define ee00: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e Constant.System. ee10: 44 61 74 61 2e 53 51 4c 69 74 65 2e 20 24 6e 61 Data.SQLite.$na
ee20: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me]....
ee30: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel ee40: 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d yes\n.. } ee50: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. ee60: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
ee70: 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20  l no\n..
ee80: 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
ee90: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
eea0: 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c   $channel error\ eeb0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 n.. }.. eec0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g eed0: 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 etDateTimeFormat eee0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. eef0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th ef00: 69 73 20 70 72 6f 63 65 64 75 72 65 20 73 69 6d is procedure sim ef10: 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68 65 20 ply returns the ef20: 22 64 65 66 61 75 6c 74 22 20 44 61 74 65 54 69 "default" DateTi ef30: 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 64 0d 0a me format used.. ef40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79 # by ef50: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. ef60: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. ef70: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist ef80: 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 s ::datetime_for ef90: 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 mat] && \.. efa0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len efb0: 67 74 68 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f gth$::datetime_
efc0: 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 68 65  format] > 0} the
efd0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
efe0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
eff0: 52 65 74 75 72 6e 20 74 68 65 20 6d 61 6e 75 61  Return the manua
f000: 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 20 76  lly overridden v
f010: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 44 61 74  alue for the Dat
f020: 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d 0a 20  eTime format...
f030: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f040: 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 74 65    return $::date f050: 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20 20 20 time_format.. f060: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. f070: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f080: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 61 # NOTE: Return a f090: 6e 20 49 53 4f 38 36 30 31 20 44 61 74 65 54 69 n ISO8601 DateTi f0a0: 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70 61 74 me format compat f0b0: 69 62 6c 65 20 77 69 74 68 20 53 51 4c 69 74 65 ible with SQLite f0c0: 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ,.. # f0d0: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S f0e0: 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 69 74 61 QLite, and suita f0f0: 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d 74 72 ble for round-tr f100: 69 70 70 69 6e 67 20 77 69 74 68 20 74 68 65 0d ipping with the. f110: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # f120: 20 44 61 74 65 54 69 6d 65 20 63 6c 61 73 73 20 DateTime class f130: 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b of the framework f140: 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65 . If this value f150: 20 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a 20 20 is changed,.. f160: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 # va f170: 72 69 6f 75 73 20 74 65 73 74 73 20 6d 61 79 20 rious tests may f180: 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 23 fail... # f190: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return f1a0: 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a "yyyy-MM-dd HH: f1b0: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 0d mm:ss.FFFFFFFK". f1c0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. f1d0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e 75 .... proc enu f1e0: 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 7b 20 merableToList { f1f0: 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b 0d 0a enumerable } {.. f200: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 set result f210: 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 [list].... f220: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len f230: 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c 65 5d gth$enumerable]
f240: 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d 65 72   == 0 || $enumer f250: 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 7d 20 able eq "null"} f260: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. f270: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a return$result..
f280: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
f290: 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
f2a0: 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65 6e 75  -alias item $enu f2b0: 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 20 20 merable {.. f2c0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l f2d0: 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e 20 30 ength$item] > 0
f2e0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
f2f0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
f300: 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74 72 69  lt [$item ToStri f310: 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ng].. }.. f320: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... f330: 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d return$result.
f340: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
f350: 72 6f 63 20 63 61 74 63 68 41 6e 64 52 65 74 75  roc catchAndRetu
f360: 72 6e 20 7b 20 73 63 72 69 70 74 20 7b 73 74 61  rn { script {sta
f370: 63 6b 54 72 61 63 65 20 66 61 6c 73 65 7d 20 7b  ckTrace false} {
f380: 73 74 72 69 63 74 20 74 72 75 65 7d 20 7d 20 7b  strict true} } {
f390: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
f3a0: 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 74   # NOTE: Evaluat
f3b0: 65 20 74 68 65 20 73 63 72 69 70 74 20 70 72 6f  e the script pro
f3c0: 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c  vided by our cal
f3d0: 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63 6f 6e  ler in their con
f3e0: 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 20 20  text,..      #
f3f0: 20 20 20 20 20 63 61 70 74 75 72 69 6e 67 20 62       capturing b
f400: 6f 74 68 20 74 68 65 20 72 65 73 75 6c 74 20 61  oth the result a
f410: 6e 64 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f  nd the return co
f420: 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  de...      #..
f430: 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b 63 61      set code [ca
f440: 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 24  tch {uplevel 1 $f450: 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74 5d 0d script} result]. f460: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. f470: 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 74 68 # NOTE: Did th f480: 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 65 e script provide f490: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 d by our caller f4a0: 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 65 72 72 NOT raise an err f4b0: 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 or?.. #.. f4c0: 20 20 20 20 69 66 20 7b 24 73 74 72 69 63 74 20 if {$strict
f4d0: 26 26 20 24 63 6f 64 65 20 3d 3d 20 30 20 7c 7c  && $code == 0 || f4e0: 20 21 24 73 74 72 69 63 74 20 26 26 20 24 63 6f !$strict && $co f4f0: 64 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 7b 0d de != 1} then {. f500: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. f510: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 # NOTE: Succ f520: 65 73 73 2e 20 20 52 65 74 75 72 6e 20 61 20 6c ess. Return a l f530: 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74 ist with the ret f540: 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65 urn code and the f550: 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 result... f560: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret f570: 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 urn [list$code
f580: 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20  $result].. f590: 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 63 6b } elseif {$stack
f5a0: 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  Trace} then {..
f5b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f5c0: 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72    # NOTE: Failur
f5d0: 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 20 77  e.  Our caller w
f5e0: 61 6e 74 73 20 61 20 66 75 6c 6c 20 73 74 61 63  ants a full stac
f5f0: 6b 20 74 72 61 63 65 20 28 69 66 20 61 70 70 6c  k trace (if appl
f600: 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20 20 20  icable),..
f610: 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72 6e    #       return
f620: 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65   a list with the
f630: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64   return code and
f640: 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 72 62   the result verb
f650: 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23  atim...        #
f660: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
f670: 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65   [list $code$re
f680: 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65  sult]..      } e
f690: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
f6a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
f6b0: 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 72 20  : Failure.  Our
f6c0: 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f 74 20  caller does not
f6d0: 77 61 6e 74 20 61 20 66 75 6c 6c 20 73 74 61 63  want a full stac
f6e0: 6b 20 74 72 61 63 65 20 28 69 66 0d 0a 20 20 20  k trace (if..
f6f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70       #       app
f700: 6c 69 63 61 62 6c 65 29 2c 20 72 65 74 75 72 6e  licable), return
f710: 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65   a list with the
f720: 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20 74 68   return code, th
f730: 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  e error..
f740: 20 23 20 20 20 20 20 20 20 63 6f 64 65 20 66 6f   #       code fo
f750: 72 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65  r the interprete
f760: 72 2c 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72  r, and the error
f770: 20 6d 65 73 73 61 67 65 20 75 70 20 74 6f 20 74   message up to t
f780: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
f790: 20 20 20 20 70 6f 69 6e 74 20 77 68 65 72 65 20      point where
f7a0: 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 20  the stack trace
f7b0: 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d 0a 20  should start...
f7c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
f7d0: 20 20 73 65 74 20 69 6e 64 65 78 20 5b 73 74 72    set index [str
f7e0: 69 6e 67 20 66 69 72 73 74 20 22 20 20 20 61 74  ing first "   at
f7f0: 20 22 20 24 72 65 73 75 6c 74 5d 3b 20 23 20 48   " $result]; # H f800: 41 43 4b 3a 20 52 65 6c 69 61 62 6c 65 3f 0d 0a ACK: Reliable?.. f810: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return f820: 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 3a 3a [list$code $:: f830: 65 72 72 6f 72 43 6f 64 65 20 5b 65 78 70 72 20 errorCode [expr f840: 7b 24 69 6e 64 65 78 20 21 3d 20 2d 31 20 3f 20 {$index != -1 ?
f850: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
f860: 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 73 74 72  string trim [str
f870: 69 6e 67 20 72 61 6e 67 65 20 24 72 65 73 75 6c  ing range $resul f880: 74 20 30 20 24 69 6e 64 65 78 5d 5d 20 3a 20 24 t 0$index]] : $f890: 72 65 73 75 6c 74 7d 5d 5d 0d 0a 20 20 20 20 20 result}]].. f8a0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... f8b0: 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c 65 43 53 proc compileCS f8c0: 68 61 72 70 57 69 74 68 20 7b 0d 0a 20 20 20 20 harpWith {.. f8d0: 20 20 20 20 20 20 20 20 74 65 78 74 20 6d 65 6d text mem f8e0: 6f 72 79 20 73 79 6d 62 6f 6c 73 20 73 74 72 69 ory symbols stri f8f0: 63 74 20 72 65 73 75 6c 74 73 56 61 72 4e 61 6d ct resultsVarNam f900: 65 20 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20 e errorsVarName f910: 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 20 20 20 fileNames.. f920: 20 20 20 20 20 20 20 61 72 67 73 20 7d 20 7b 0d args } {. f930: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. f940: 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 77 65 # NOTE: Since we f950: 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 75 73 are going to us f960: 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20 6e 61 e this method na f970: 6d 65 20 61 20 6c 6f 74 2c 20 61 73 73 69 67 6e me a lot, assign f980: 20 69 74 20 74 6f 20 61 0d 0a 20 20 20 20 20 20 it to a.. f990: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable f9a0: 20 66 69 72 73 74 2e 0d 0a 20 20 20 20 20 20 23 first... # f9b0: 0d 0a 20 20 20 20 20 20 73 65 74 20 61 64 64 20 .. set add f9c0: 52 65 66 65 72 65 6e 63 65 64 41 73 73 65 6d 62 ReferencedAssemb f9d0: 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20 20 20 lies.Add.... f9e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT f9f0: 45 3a 20 43 72 65 61 74 65 20 74 68 65 20 62 61 E: Create the ba fa00: 73 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 se command to ev fa10: 61 6c 75 61 74 65 20 61 6e 64 20 61 64 64 20 74 aluate and add t fa20: 68 65 20 70 72 6f 70 65 72 74 79 20 73 65 74 74 he property sett fa30: 69 6e 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20 ings.. # fa40: 20 20 20 20 74 68 61 74 20 61 72 65 20 61 6c 6d that are alm fa50: 6f 73 74 20 61 6c 77 61 79 73 20 6e 65 65 64 65 ost always neede fa60: 64 20 62 79 20 6f 75 72 20 75 6e 69 74 20 74 65 d by our unit te fa70: 73 74 73 20 28 69 2e 65 2e 20 74 68 65 20 53 79 sts (i.e. the Sy fa80: 73 74 65 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 stem.. # fa90: 20 20 20 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 and System.D faa0: 61 74 61 20 61 73 73 65 6d 62 6c 79 20 72 65 66 ata assembly ref fab0: 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20 20 20 erences)... fac0: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f #.. set co fad0: 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 5c 0d 0a 20 mmand [list \.. fae0: 20 20 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 compile faf0: 43 53 68 61 72 70 20 24 74 65 78 74 20 24 6d 65 CSharp$text $me fb00: 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73 mory$symbols $s fb10: 74 72 69 63 74 20 72 65 73 75 6c 74 73 20 65 72 trict results er fb20: 72 6f 72 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 rors \.. fb30: 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e 64 6c$add System.dl
fb40: 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e 44 61  l $add System.Da fb50: 74 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 ta.dll$add Syst
fb60: 65 6d 2e 54 72 61 6e 73 61 63 74 69 6f 6e 73 2e  em.Transactions.
fb70: 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  dll \..
fb80: 20 24 61 64 64 20 53 79 73 74 65 6d 2e 58 6d 6c   $add System.Xml fb90: 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 .dll].... # fba0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: fbb0: 41 64 64 20 61 6c 6c 20 74 68 65 20 70 72 6f 76 Add all the prov fbc0: 69 64 65 64 20 66 69 6c 65 20 6e 61 6d 65 73 20 ided file names fbd0: 61 73 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 as assembly refe fbe0: 72 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20 20 23 rences... # fbf0: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 .. foreach fc00: 66 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 fileName$fileNa
fc10: 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 6c  mes {..        l
fc20: 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24  append command $fc30: 61 64 64 20 5b 67 65 74 42 69 6e 61 72 79 46 69 add [getBinaryFi fc40: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 leName$fileName
fc50: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
fc60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
fc70: 4f 54 45 3a 20 41 64 64 20 74 68 65 20 65 78 74  OTE: Add the ext
fc80: 72 61 20 61 72 67 75 6d 65 6e 74 73 2c 20 69 66  ra arguments, if
fc90: 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 63 6f 6d   any, to the com
fca0: 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65  mand to evaluate
fcb0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
fcc0: 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 63    eval lappend c
fcd0: 6f 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a 0d 0a  ommand $args.... fce0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # fcf0: 20 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74 68 65 NOTE: Alias the fd00: 20 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 6c 20 compiler local fd10: 72 65 73 75 6c 74 73 20 61 6e 64 20 65 72 72 6f results and erro fd20: 72 73 20 76 61 72 69 61 62 6c 65 73 20 74 6f 20 rs variables to fd30: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # fd40: 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 variable name fd50: 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 s provided by ou fd60: 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 r caller... fd70: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s fd80: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 72 65 tring length$re
fd90: 73 75 6c 74 73 56 61 72 4e 61 6d 65 5d 20 3e 20  sultsVarName] >
fda0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
fdb0: 20 20 20 75 70 76 61 72 20 31 20 24 72 65 73 75     upvar 1 $resu fdc0: 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 73 75 6c ltsVarName resul fdd0: 74 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ts.. }.... fde0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string fdf0: 20 6c 65 6e 67 74 68 20 24 65 72 72 6f 72 73 56 length$errorsV
fe00: 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65  arName] > 0} the
fe10: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76  n {..        upv
fe20: 61 72 20 31 20 24 65 72 72 6f 72 73 56 61 72 4e  ar 1 $errorsVarN fe30: 61 6d 65 20 65 72 72 6f 72 73 0d 0a 20 20 20 20 ame errors.. fe40: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. fe50: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 # NOTE: Ev fe60: 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e 73 74 aluate the const fe70: 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65 43 ructed [compileC fe80: 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20 61 Sharp] command a fe90: 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d 0a 20 nd return the.. fea0: 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 # res feb0: 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ult... #.. fec0: 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d 61 eval$comma
fed0: 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  nd..    }.....
fee0: 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79 44    proc isMemoryD
fef0: 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b  b { fileName } {
ff00: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
ff10: 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20   # NOTE: Is the
ff20: 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62 61  specified databa
ff30: 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 65 61  se file name rea
ff40: 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  lly an in-memory
ff50: 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 20 20   database?..
ff60: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
ff70: 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e 61  n [expr {$fileNa ff80: 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a 22 me eq ":memory:" ff90: 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. ffa0: 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 [string range$
ffb0: 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20 65  fileName 0 12] e
ffc0: 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 3a  q "file::memory:
ffd0: 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  "}]..    }.....
ffe0: 20 20 20 70 72 6f 63 20 69 73 54 61 62 6c 65 49     proc isTableI
fff0: 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61 72 4e  nDb { name {varN
10000 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20  ame db} } {..
10010 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
10020 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65  TE: Refer to the
10030 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61   specified varia
10040 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20  ble (e.g. "db")
10050 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f  in the context o
10060 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20  f our..      #
10070 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 49 74       caller.  It
10080 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 64 61   contains the da
10090 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
100a0 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20 77 69  n handle that wi
100b0 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20  ll be..      #
100c0 20 20 20 20 20 75 73 65 64 20 74 6f 20 65 78 65       used to exe
100d0 63 75 74 65 20 74 68 65 20 71 75 65 72 79 20 75  cute the query u
100e0 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
100f0 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61   if the named ta
10100 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20  ble is..      #
10110 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e        present in
10120 20 74 68 61 74 20 64 61 74 61 62 61 73 65 2e 0d   that database..
10130 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
10140 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 10150 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a db.... #.. 10160 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 10170 65 20 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 e the sqlite_mas 10180 74 65 72 20 74 61 62 6c 65 20 74 6f 20 64 65 74 ter table to det 10190 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61 ermine if the na 101a0 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 med table is.. 101b0 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 73 # pres 101c0 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 ent in the datab 101d0 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ase... #.. 101e0 20 20 20 20 20 73 65 74 20 73 71 6c 20 7b 0d 0a set sql {.. 101f0 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20 43 SELECT C 10200 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 73 71 6c OUNT(*) FROM sql 10210 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 ite_master WHERE 10220 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65 27 20 type = 'table' 10230 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d 0a 20 AND name = ?;.. 10240 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 10250 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 10260 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f Return non-zero 10270 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 if the named ta 10280 62 6c 65 20 69 73 20 70 72 65 73 65 6e 74 2e 0d ble is present.. 10290 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 102a0 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a return [expr {.. 102b0 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 [sql exe 102c0 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 cute -execute sc 102d0 61 6c 61 72 20 24 64 62 20 24 73 71 6c 20 5b 6c alar$db $sql [l 102e0 69 73 74 20 70 61 72 61 6d 31 20 53 74 72 69 6e ist param1 Strin 102f0 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d 0a 20 g$name]] > 0..
10300 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a       }]..    }..
10310 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 69 6d  ...    proc trim
10320 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d 0a 20  Sql { sql } {..
10330 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72 65 67       return [reg
10340 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c 73 2b  sub -all -- {\s+
10350 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24  } [string trim $10360 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20 20 7d sql] " "].. } 10370 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 78 ..... proc ex 10380 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c 20 7b ecuteSql { sql { 10390 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20 7b 66 execute none} {f 103a0 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66 69 6c ormat none} {fil 103b0 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 eName ""} } {.. 103c0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 103d0 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d length$fileNam
103e0 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 73  e] == 0} then {s
103f0 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d 65 6d  et fileName :mem
10400 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73 65 74  ory:}..      set
10410 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 22  upDb $fileName " 10420 22 20 22 22 20 22 22 20 22 22 20 22 22 20 66 61 " "" "" "" "" fa 10430 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20 lse false false 10440 66 61 6c 73 65 20 64 62 20 74 72 75 65 0d 0a 0d false db true... 10450 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 . try {.. 10460 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75 70 return [up 10470 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 5c 0d level 1 [list \. 10480 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c . sql 10490 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 execute -execut 104a0 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f 72 6d e$execute -form
104b0 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62 20 24  at $format$db $104c0 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 66 sql]].. } f 104d0 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 inally {.. 104e0 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c cleanupDb$fil
104f0 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 20 66  eName db false f
10500 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 20 20  alse false..
10510 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
10520 20 20 20 70 72 6f 63 20 68 61 73 4e 6f 46 6c 61     proc hasNoFla
10530 67 73 20 7b 20 76 61 72 4e 61 6d 65 20 6e 6f 6e  gs { varName non
10540 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76  e } {..      upv
10550 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 66 6c  ar 1 $varName fl 10560 61 67 73 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 ags.... if 10570 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 66 {![info exists f 10580 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 lags]} then {.. 10590 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 105a0 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ue.. }.... 105b0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 105c0 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 length$flags]
105d0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
105e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
105f0 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  e..      }....
10600 20 20 20 20 69 66 20 7b 24 6e 6f 6e 65 20 26 26      if {$none && 10610 20 24 66 6c 61 67 73 20 65 71 20 22 4e 6f 6e 65$flags eq "None
10620 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  "} then {..
10630 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
10640 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
10650 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20   return false..
10660 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
10670 63 20 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46  c getConnectionF
10680 6c 61 67 73 20 7b 20 66 69 6c 65 4e 61 6d 65 20  lags { fileName
10690 66 6c 61 67 73 20 7b 71 75 69 65 74 20 66 61 6c  flags {quiet fal
106a0 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
106b0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
106c0 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 63 68  Figure out which
106d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e   database file n
106e0 61 6d 65 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f  ame or connectio
106f0 6e 20 73 74 72 69 6e 67 20 74 68 65 73 65 0d 0a  n string these..
10700 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
10710 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77  nnection flags w
10720 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 61 70 70  ill actually app
10730 6c 79 20 74 6f 2e 20 20 54 68 69 73 20 69 73 20  ly to.  This is
10740 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 0d 0a 20  not necessary..
10750 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20       #       in
10760 71 75 69 65 74 20 6d 6f 64 65 20 62 65 63 61 75  quiet mode becau
10770 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74  se this informat
10780 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ion is only used
10790 20 66 6f 72 20 6c 6f 67 67 69 6e 67 0d 0a 20 20   for logging..
107a0 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20      #       and
107b0 72 65 70 6f 72 74 69 6e 67 20 70 75 72 70 6f 73  reporting purpos
107c0 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  es...      #..
107d0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 107e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 107f0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 10800 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e gth$fileName] >
10810 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
10820 20 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61        set databa
10830 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  se [appendArgs "
10840 66 69 6c 65 20 6e 61 6d 65 20 5c 22 22 20 24 66  file name \"" $f 10850 69 6c 65 4e 61 6d 65 20 5c 22 5d 0d 0a 20 20 20 ileName \"].. 10860 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 10870 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 info exists ::da 10880 74 61 53 6f 75 72 63 65 5d 20 26 26 20 5c 0d 0a taSource] && \.. 10890 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 61 72 ![ar 108a0 72 61 79 20 65 78 69 73 74 73 20 3a 3a 64 61 74 ray exists ::dat 108b0 61 53 6f 75 72 63 65 5d 7d 20 74 68 65 6e 20 7b aSource]} then { 108c0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 108d0 64 61 74 61 62 61 73 65 20 5b 61 70 70 65 6e 64 database [append 108e0 41 72 67 73 20 22 64 61 74 61 20 73 6f 75 72 63 Args "data sourc 108f0 65 20 5c 22 22 20 24 3a 3a 64 61 74 61 53 6f 75 e \""$::dataSou
10900 72 63 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20  rce \"]..
10910 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
10920 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73       set databas
10930 65 20 3c 75 6e 6b 6e 6f 77 6e 3e 0d 0a 20 20 20  e <unknown>..
10940 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
10950 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
10960 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28    # NOTE: Show (
10970 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6c 6f 63  and log) the loc
10980 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  al connection fl
10990 61 67 73 20 61 6e 64 20 74 68 65 20 61 73 73 6f  ags and the asso
109a0 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 23 20  ciated..      #
109b0 20 20 20 20 20 20 64 61 74 61 20 73 6f 75 72 63        data sourc
109c0 65 20 6f 72 20 66 69 6c 65 20 6e 61 6d 65 2e 0d  e or file name..
109d0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
109e0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 109f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 10a00 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 10a10 3a 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61 :no(emitLocalFla 10a20 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 gs)] && \.. 10a30 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 (![info e 10a40 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 4c xists ::no(emitL 10a50 6f 63 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29 ocalFlagsIfNone) 10a60 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] || \.. 10a70 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 ![hasNoFlag 10a80 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d s flags false])} 10a90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 10aa0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
10ab0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
10ac0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
10ad0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 63 61        "---- loca
10ae0 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  l connection fla
10af0 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61  gs for " $databa 10b00 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 se \.. 10b10 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 " are: " [ex 10b20 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 pr {![hasNoFlags 10b30 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 flags false] ? 10b40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10b50 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 [appendArgs \" 10b60 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e$flags \"] : "<n
10b70 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20  one>"}] \n]..
10b80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
10b90 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
10ba0 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28    # NOTE: Show (
10bb0 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 73 68 61  and log) the sha
10bc0 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  red connection f
10bd0 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  lags...      #..
10be0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 10bf0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 10c00 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 10c10 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec 10c20 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 6d 2e t invoke System. 10c30 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi 10c40 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 53 68 61 teConnection Sha 10c50 72 65 64 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 redFlags.. 10c60 20 20 7d 20 73 68 61 72 65 64 46 6c 61 67 73 5d } sharedFlags] 10c70 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 10c80 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 10c90 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 10ca0 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 29 emitSharedFlags) 10cb0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 10cc0 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 (![info ex 10cd0 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 ists ::no(emitSh 10ce0 61 72 65 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29 aredFlagsIfNone) 10cf0 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] || \.. 10d00 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c ![hasNoFl 10d10 61 67 73 20 73 68 61 72 65 64 46 6c 61 67 73 20 ags sharedFlags 10d20 74 72 75 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a true])} then {.. 10d30 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 10d40 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
10d50 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
10d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
10d70 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 63 6f   "---- shared co
10d80 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66  nnection flags f
10d90 6f 72 20 22 20 24 64 61 74 61 62 61 73 65 20 5c  or " $database \ 10da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10db0 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 70 72 " are: " [expr 10dc0 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 73 {![hasNoFlags s 10dd0 68 61 72 65 64 46 6c 61 67 73 20 74 72 75 65 5d haredFlags true] 10de0 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ? \.. 10df0 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 [appendArg 10e00 73 20 5c 22 20 24 73 68 61 72 65 64 46 6c 61 67 s \"$sharedFlag
10e10 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22  s \"] : "<none>"
10e20 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  }] \n]..
10e30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
10e40 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
10e50 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
10e60 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61 72  ts ::no(emitShar
10e70 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a  edFlags)] && \..
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b                ![
10e90 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
10ea0 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73  (emitSharedFlags
10eb0 49 66 55 6e 61 76 61 69 6c 61 62 6c 65 29 5d 7d  IfUnavailable)]}
10ec0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
10ed0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 10ee0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 10ef0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 10f00 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 10f10 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f shared connectio 10f20 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 n flags for "$d
10f30 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20  atabase \..
10f40 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65             " are
10f50 3a 20 3c 75 6e 61 76 61 69 6c 61 62 6c 65 3e 5c  : <unavailable>\
10f60 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
10f70 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
10f80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
10f90 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
10fa0 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68  how (and log) th
10fb0 65 20 64 65 74 65 63 74 65 64 20 67 6c 6f 62 61  e detected globa
10fc0 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  l connection fla
10fd0 67 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20  gs, if any...
10fe0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
10ff0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 11000 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i 11010 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 11020 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73 29 emitGlobalFlags) 11030 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 11040 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 (![info exis 11050 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f 62 ts ::no(emitGlob 11060 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d 20 alFlagsIfNone)] 11070 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 || \.. 11080 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 ![hasNoFlags 11090 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 ::connection_fla 110a0 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e gs false])} then 110b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 110c0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
110d0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
110e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
110f0 20 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f   "---- global co
11100 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61  nnection flags a
11110 72 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  re: " \..
11120 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 21 5b         [expr {![
11130 68 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e  hasNoFlags ::con
11140 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 66 61  nection_flags fa
11150 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20  lse] ? \..
11160 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41          [appendA
11170 72 67 73 20 5c 22 20 24 3a 3a 63 6f 6e 6e 65 63  rgs \" $::connec 11180 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 22 5d 20 3a tion_flags \"] : 11190 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d "<none>"}] \n]. 111a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 111b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 111c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 111d0 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 67 there are any g 111e0 6c 6f 62 61 6c 20 28 70 65 72 20 74 65 73 74 20 lobal (per test 111f0 72 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 run) connection 11200 66 6c 61 67 73 20 63 75 72 72 65 6e 74 6c 79 0d flags currently. 11210 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 11220 65 74 2c 20 75 73 65 20 74 68 65 6d 20 6e 6f 77 et, use them now 11230 20 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e (i.e. by combin 11240 69 6e 67 20 74 68 65 6d 20 77 69 74 68 20 74 68 ing them with th 11250 65 20 6f 6e 65 73 20 66 6f 72 20 74 68 69 73 0d e ones for this. 11260 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 11270 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 onnection)... 11280 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 11290 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 [info exists ::c 112a0 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d onnection_flags] 112b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 112c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 112d0 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 6e 64 OTE: Combine and 112e0 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68 65 20 /or replace the 112f0 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags 11300 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 20 74 and then show t 11310 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 11320 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e 0d 0a new value... 11330 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 11340 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 63 6f set flags [co 11350 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c 61 67 mbineFlags$flag
11360 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f  s $::connection_ 11370 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 flags].... 11380 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 11390 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c OTE: Show (and l 113a0 6f 67 29 20 74 68 65 20 6e 65 77 20 65 66 66 65 og) the new effe 113b0 63 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e ctive connection 113c0 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20 flags... 113d0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 113e0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
113f0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
11400 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
11410 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46 6c  o(emitCombinedFl
11420 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  ags)] && \..
11430 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66            (![inf
11440 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d  o exists ::no(em
11450 69 74 43 6f 6d 62 69 6e 65 64 46 6c 61 67 73 49  itCombinedFlagsI
11460 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20  fNone)] || \..
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68               ![h
11480 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20  asNoFlags flags
11490 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d  false])} then {.
114a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
114b0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 114c0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 114d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 114e0 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e 65 64 "---- combined 114f0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 11500 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 s for "$databas
11510 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
11520 20 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65       " are: " [e
11530 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67  xpr {![hasNoFlag
11540 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f  s flags false] ?
11550 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
11560 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20      [appendArgs
11570 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20  \" $flags \"] : 11580 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a "<none>"}] \n].. 11590 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 115a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 115b0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 115c0 24 66 6c 61 67 73 0d 0a 20 20 20 20 7d 0d 0a 0c$flags..    }...
115d0 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 46 6c  ..    proc getFl
115e0 61 67 73 50 72 6f 70 65 72 74 79 20 7b 20 7b 66  agsProperty { {f
115f0 6c 61 67 73 20 22 22 7d 20 7b 71 75 69 65 74 20  lags ""} {quiet
11600 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
11610 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
11620 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 61  E: Determine wha
11630 74 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 28  t the combined (
11640 67 6c 6f 62 61 6c 20 61 6e 64 20 6c 6f 63 61 6c  global and local
11650 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20  ) connection..
11660 20 20 20 20 23 20 20 20 20 20 20 20 66 6c 61 67      #       flag
11670 73 20 73 68 6f 75 6c 64 20 62 65 2c 20 70 6f 73  s should be, pos
11680 73 69 62 6c 79 20 71 75 69 65 74 6c 79 2e 0d 0a  sibly quietly...
11690 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
116a0 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 6f 6e  et flags [getCon
116b0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 22 20  nectionFlags ""
116c0 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a  $flags$quiet]..
116d0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
116e0 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 6f 20 67   # NOTE: If no g
116f0 6c 6f 62 61 6c 20 6f 72 20 6c 6f 63 61 6c 20 63  lobal or local c
11700 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20  onnection flags
11710 77 65 72 65 20 73 70 65 63 69 66 69 65 64 2c 20  were specified,
11720 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
11730 20 20 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65     default conne
11740 63 74 69 6f 6e 20 66 6c 61 67 73 20 73 68 6f 75  ction flags shou
11750 6c 64 20 62 65 20 75 73 65 64 3b 20 74 68 65 72  ld be used; ther
11760 65 66 6f 72 65 2c 20 72 65 74 75 72 6e 0d 0a 20  efore, return..
11770 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 20       #       an
11780 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69 6e 20  empty string in
11790 74 68 61 74 20 63 61 73 65 2e 0d 0a 20 20 20 20  that case...
117a0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
117b0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66  string length $f 117c0 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e lags] == 0} then 117d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 117e0 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a rn "".. }.. 117f0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 11800 20 23 20 4e 4f 54 45 3a 20 49 6e 20 6f 72 64 65 # NOTE: In orde 11810 72 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68 r to check if th 11820 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 e default connec 11830 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 20 62 tion flags are b 11840 65 69 6e 67 20 75 73 65 64 0d 0a 20 20 20 20 20 eing used.. 11850 20 23 20 20 20 20 20 20 20 69 74 20 69 73 20 6e # it is n 11860 65 63 65 73 73 61 72 79 20 74 6f 20 61 74 74 65 ecessary to atte 11870 6d 70 74 20 61 20 63 6f 6e 76 65 72 73 69 6f 6e mpt a conversion 11880 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 65 to the actual e 11890 6e 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 20 20 numerated.. 118a0 20 23 20 20 20 20 20 20 20 74 79 70 65 2e 20 20 # type. 118b0 46 61 69 6c 69 6e 67 20 74 68 61 74 2c 20 74 68 Failing that, th 118c0 65 20 63 68 65 63 6b 20 61 67 61 69 6e 73 74 20 e check against 118d0 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 the default valu 118e0 65 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 e will be.. 118f0 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 # skipped 11900 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 11910 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 11920 20 20 20 20 20 20 20 20 73 65 74 20 65 72 72 6f set erro 11930 72 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f 52 45 r null; # IGNORE 11940 44 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a D.... obj 11950 65 63 74 20 69 6e 76 6f 6b 65 20 55 74 69 6c 69 ect invoke Utili 11960 74 79 20 54 72 79 50 61 72 73 65 46 6c 61 67 73 ty TryParseFlags 11970 45 6e 75 6d 20 22 22 20 5c 0d 0a 20 20 20 20 20 Enum "" \.. 11980 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 11990 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 119a0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 ConnectionFlags 119b0 22 22 20 24 66 6c 61 67 73 20 6e 75 6c 6c 20 74 ""$flags null t
119c0 72 75 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rue \..
119d0 20 20 20 74 72 75 65 20 65 72 72 6f 72 0d 0a 20     true error..
119e0 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 7d 20 74       } value]} t
119f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
11a00 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
11a10 3a 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  : Attempting to
11a20 70 61 72 73 65 20 74 68 65 20 63 6f 6e 6e 65 63  parse the connec
11a30 74 69 6f 6e 20 66 6c 61 67 73 20 63 61 75 73 65  tion flags cause
11a40 64 20 61 20 73 63 72 69 70 74 0d 0a 20 20 20 20  d a script..
11a50 20 20 20 20 23 20 20 20 20 20 20 20 65 72 72 6f      #       erro
11a60 72 2e 20 20 45 6d 69 74 20 61 20 77 61 72 6e 69  r.  Emit a warni
11a70 6e 67 20 74 6f 20 74 68 65 20 74 65 73 74 20 6c  ng to the test l
11a80 6f 67 20 66 69 6c 65 20 61 6e 64 20 63 6f 6e 74  og file and cont
11a90 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 23 20  inue..        #
11aa0 20 20 20 20 20 20 75 73 69 6e 67 20 61 6e 20 65        using an e
11ab0 6d 74 70 79 20 73 74 72 69 6e 67 20 69 6e 73 74  mtpy string inst
11ac0 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ead...        #.
11ad0 0a 20 20 20 20 20 20 20 20 74 6c 6f 67 20 5b 61  .        tlog [a
11ae0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
11af0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
11b00 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
11b10 6f 20 70 61 72 73 65 20 63 6f 6e 6e 65 63 74 69  o parse connecti
11b20 6f 6e 20 66 6c 61 67 73 2c 20 65 72 72 6f 72 3a  on flags, error:
11b30 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
11b40 20 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e    \n\t $value \n 11b50 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ].... set 11b60 20 76 61 6c 75 65 20 22 22 0d 0a 20 20 20 20 20 value "".. 11b70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 11b80 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 11b90 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 the combined fla 11ba0 67 73 20 73 74 72 69 6e 67 20 63 6f 75 6c 64 20 gs string could 11bb0 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 62 65 20 not actually be 11bc0 63 6f 6e 76 65 72 74 65 64 0d 0a 20 20 20 20 20 converted.. 11bd0 20 23 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 # to the 11be0 65 6e 75 6d 65 72 61 74 65 64 20 74 79 70 65 20 enumerated type 11bf0 69 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c it is the defaul 11c00 74 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 6a 75 t value, then ju 11c10 73 74 20 75 73 65 0d 0a 20 20 20 20 20 20 23 20 st use.. # 11c20 20 20 20 20 20 20 69 74 20 76 65 72 62 61 74 69 it verbati 11c30 6d 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 m; otherwise, ju 11c40 73 74 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 st return an emp 11c50 74 79 20 73 74 72 69 6e 67 2e 20 20 49 6e 20 74 ty string. In t 11c60 68 61 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 hat.. # 11c70 20 20 20 63 61 73 65 2c 20 74 68 65 20 64 65 66 case, the def 11c80 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 ault connection 11c90 66 6c 61 67 73 20 77 69 6c 6c 20 62 65 20 75 73 flags will be us 11ca0 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 11cb0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 11cc0 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d length$value] =
11cd0 3d 20 30 20 7c 7c 20 24 76 61 6c 75 65 20 6e 65  = 0 || $value ne 11ce0 20 22 44 65 66 61 75 6c 74 22 7d 20 74 68 65 6e "Default"} then 11cf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 11d00 20 20 20 20 20 20 20 23 20 57 41 52 4e 49 4e 47 # WARNING 11d10 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 : This returns t 11d20 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 he string value 11d30 6f 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 of the combined 11d40 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a 20 20 20 20 flags, not.. 11d50 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 74 # t 11d60 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 76 61 he enumerated va 11d70 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 62 79 lue. This is by 11d80 20 64 65 73 69 67 6e 20 61 6e 64 20 73 68 6f 75 design and shou 11d90 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 ld not.. 11da0 23 20 20 20 20 20 20 20 20 20 20 62 65 20 63 68 # be ch 11db0 61 6e 67 65 64 20 77 69 74 68 6f 75 74 20 63 61 anged without ca 11dc0 72 65 66 75 6c 20 63 6f 6e 73 69 64 65 72 61 74 reful considerat 11dd0 69 6f 6e 20 28 65 2e 67 2e 20 69 74 20 77 6f 75 ion (e.g. it wou 11de0 6c 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ld.. # 11df0 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 74 prevent t 11e00 68 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 he SQLiteConnect 11e10 69 6f 6e 20 63 6c 61 73 73 20 66 72 6f 6d 20 61 ion class from a 11e20 6c 6c 6f 77 69 6e 67 20 69 6e 76 61 6c 69 64 0d llowing invalid. 11e30 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 11e40 20 20 20 20 5b 22 6d 61 67 69 63 61 6c 22 5d 20 ["magical"] 11e50 6d 65 74 61 2d 66 6c 61 67 73 29 2e 0d 0a 20 20 meta-flags)... 11e60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 11e70 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 return [appendA 11e80 72 67 73 20 22 46 6c 61 67 73 3d 22 20 24 66 6c rgs "Flags="$fl
11e90 61 67 73 20 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d  ags \;]..      }
11ea0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
11eb0 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20   ""..    }.....
11ec0 20 20 20 70 72 6f 63 20 65 6e 61 62 6c 65 53 68     proc enableSh
11ed0 61 72 65 64 43 61 63 68 65 20 7b 20 63 68 61 6e  aredCache { chan
11ee0 6e 65 6c 20 65 6e 61 62 6c 65 20 7b 71 75 69 65  nel enable {quie
11ef0 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
11f00 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
11f10 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
11f20 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
11f30 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
11f40 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
11f50 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
11f60 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
11f70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  \..            s
11f80 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68  qlite3_enable_sh
11f90 61 72 65 64 5f 63 61 63 68 65 20 5b 65 78 70 72  ared_cache [expr
11fa0 20 69 6e 74 28 24 65 6e 61 62 6c 65 29 5d 0d 0a   int($enable)].. 11fb0 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 } result] 11fc0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 11fd0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
11fe0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
11ff0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 12000 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 12010 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12020 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 "---- call sqli 12030 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 te3_enable_share 12040 64 5f 63 61 63 68 65 28 22 20 24 65 6e 61 62 6c d_cache("$enabl
12050 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
12060 20 20 20 22 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24     ")... ok: " $12070 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 result \n].. 12080 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 12090 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 lse {.. i 120a0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
120b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
120c0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 120d0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 120e0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 120f0 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61 call sqlite3_ena 12100 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 ble_shared_cache 12110 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 ("$enable \..
12120 20 20 20 20 20 20 20 20 20 20 20 20 22 29 2e 2e              ")..
12130 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  . error: " \n\t
12140 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 12150 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 12160 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 12170 72 6f 63 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 roc setupDb {.. 12180 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e fileN 12190 61 6d 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 ame {mode ""} {d 121a0 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 ateTimeFormat "" 121b0 7d 20 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 } {dateTimeKind 121c0 22 22 7d 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a ""} {flags ""}.. 121d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 65 78 74 {ext 121e0 72 61 20 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 ra ""} {qualify 121f0 74 72 75 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 true} {delete tr 12200 75 65 7d 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d ue} {uri false}. 12210 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 74 65 . {te 12220 6d 70 6f 72 61 72 79 20 74 72 75 65 7d 20 7b 76 mporary true} {v 12230 61 72 4e 61 6d 65 20 64 62 7d 20 7b 71 75 69 65 arName db} {quie 12240 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. 12250 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 12260 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 65 20 OTE: First, see 12270 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 if our caller ha 12280 73 20 72 65 71 75 65 73 74 65 64 20 61 6e 20 69 s requested an i 12290 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 n-memory databas 122a0 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 122b0 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 set isMemory 122c0 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c [isMemoryDb$fil
122d0 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
122e0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
122f0 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65   For now, all te
12300 73 74 20 64 61 74 61 62 61 73 65 73 20 75 73 65  st databases use
12310 64 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  d by the test su
12320 69 74 65 20 61 72 65 20 70 6c 61 63 65 64 0d 0a  ite are placed..
12330 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
12340 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database
12350 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61 63 68  directory.  Each
12360 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 72 65   database and re
12370 6c 61 74 65 64 20 66 69 6c 65 73 0d 0a 20 20 20  lated files..
12380 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20     #       used
12390 62 79 20 61 20 74 65 73 74 20 73 68 6f 75 6c 64  by a test should
123a0 20 62 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62   be cleaned up b
123b0 79 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e  y that test usin
123c0 67 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  g the..      #
123d0 20 20 20 20 20 22 63 6c 65 61 6e 75 70 44 62 22       "cleanupDb"
123e0 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f   procedure, belo
123f0 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  w...      #..
12400 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72     if {!$isMemor 12410 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 74 y &&$qualify} t
12420 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
12430 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
12440 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61 62  e join [getDatab
12450 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b 66  aseDirectory] [f
12460 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61  ile tail $fileNa 12470 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d me]].. }... 12480 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 12490 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 # NOTE: By defau 124a0 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70 lt, delete any p 124b0 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 re-existing data 124c0 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61 base with the sa 124d0 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 me file.. # 124e0 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66 20 69 name if i 124f0 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78 69 73 t currently exis 12500 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ts... #.. 12510 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f if {!$isMemo
12520 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26  ry && $delete && 12530 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 [file exists$f
12540 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
12550 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
12560 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
12570 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 61  empt to delete a
12580 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20  ny pre-existing
12590 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68  database with th
125a0 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20  e same file..
125b0 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d       #       nam
125c0 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
125d0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
125e0 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $125f0 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d fileName} error] 12600 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12610 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 12620 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 # NOTE: We some 12630 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 how failed to de 12640 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 lete the file, r 12650 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... 12660 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 12670 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
12680 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12690 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 126a0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 126b0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 126c0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 126d0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 126e0 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 o delete databas 126f0 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 e file \""$file
12700 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
12710 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69          "\" duri
12720 6e 67 20 73 65 74 75 70 2c 20 65 72 72 6f 72 3a  ng setup, error:
12730 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ 12740 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 12750 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 12760 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 12770 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 12780 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 fer to the speci 12790 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 fied variable (e 127a0 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 .g. "db") in the 127b0 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d context of our. 127c0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 127d0 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 aller. The hand 127e0 6c 65 20 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 le to the opened 127f0 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c 20 62 database will b 12800 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d e stored there.. 12810 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 12820 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
12830 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a   db....      #..
12840 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74        # NOTE: St
12850 61 72 74 20 62 75 69 6c 64 69 6e 67 20 74 68 65  art building the
12860 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
12870 6e 67 2e 20 20 54 68 65 20 6f 6e 6c 79 20 72 65  ng.  The only re
12880 71 75 69 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a  quired portion..
12890 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66        #       of
128a0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
128b0 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 64 61  string is the da
128c0 74 61 20 73 6f 75 72 63 65 2c 20 77 68 69 63 68  ta source, which
128d0 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20   contains the..
128e0 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74       #       dat
128f0 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20  abase file name
12900 69 74 73 65 6c 66 2e 20 20 49 66 20 6f 75 72 20  itself.  If our
12910 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 74 6f 20  caller wants to
12920 75 73 65 20 61 20 55 52 49 20 61 73 0d 0a 20 20  use a URI as..
12930 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
12940 64 61 74 61 20 73 6f 75 72 63 65 2c 20 75 73 65  data source, use
12950 20 74 68 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e   the FullUri con
12960 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70  nection string p
12970 72 6f 70 65 72 74 79 20 74 6f 0d 0a 20 20 20 20  roperty to..
12980 20 20 23 20 20 20 20 20 20 20 70 72 65 76 65 6e    #       preven
12990 74 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63  t the data sourc
129a0 65 20 73 74 72 69 6e 67 20 66 72 6f 6d 20 62 65  e string from be
129b0 69 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20  ing mangled...
129c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
129d0 7b 24 75 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20  {$uri} then {.. 129e0 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 set conne 129f0 63 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 ction {FullUri=$
12a00 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20  {fileName}}..
12a10 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
12a20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74       set connect
12a30 69 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72 63 65  ion {Data Source
12a40 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20  =${fileName}}.. 12a50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 12a60 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 12a70 20 53 69 6e 63 65 20 74 68 69 73 20 70 72 6f 63 Since this proc 12a80 65 64 75 72 65 20 68 61 73 20 6e 6f 20 73 70 65 edure has no spe 12a90 63 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f cial knowledge o 12aa0 66 20 77 68 61 74 20 74 68 65 20 64 65 66 61 75 f what the defau 12ab0 6c 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 lt.. # 12ac0 20 20 73 65 74 74 69 6e 67 20 69 73 20 66 6f 72 setting is for 12ad0 20 74 68 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 the ToFullPath 12ae0 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 12af0 67 20 70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 g propery, alway 12b00 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 12b10 20 61 64 64 20 74 68 65 20 76 61 6c 75 65 20 77 add the value w 12b20 65 20 6b 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 e know about to 12b30 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 the connection s 12b40 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d tring... #. 12b50 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f . append co 12b60 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c nnection {;ToFul 12b70 6c 50 61 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d lPath=${qualify}
12b80 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
12b90 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f      # NOTE: If o
12ba0 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66  ur caller specif
12bb0 69 65 64 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f  ied a journal mo
12bc0 64 65 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65  de, add the nece
12bd0 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20  ssary portion..
12be0 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20       #       of
12bf0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  the connection s
12c00 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20  tring now...
12c10 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
12c20 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d  string length $m 12c30 6f 64 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ode] > 0} then { 12c40 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append 12c50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f connection {;Jo 12c60 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 urnal Mode=${mod
12c70 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  e}}..      }....
12c80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
12c90 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61   NOTE: If our ca
12ca0 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61  ller specified a
12cb0 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
12cc0 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73  , add the necess
12cd0 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ary..      #
12ce0 20 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68     portion of th
12cf0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
12d00 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20  ing now...
12d10 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
12d20 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74  ring length $dat 12d30 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 eTimeFormat] > 0 12d40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12d50 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect 12d60 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f ion {;DateTimeFo 12d70 72 6d 61 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 rmat=${dateTimeF
12d80 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d  ormat}}..      }
12d90 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
12da0 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75     # NOTE: If ou
12db0 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69  r caller specifi
12dc0 65 64 20 61 20 44 61 74 65 54 69 6d 65 4b 69 6e  ed a DateTimeKin
12dd0 64 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73  d, add the neces
12de0 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20  sary portion..
12df0 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74      #       of t
12e00 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
12e10 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ring now...
12e20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
12e30 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 61  tring length $da 12e40 74 65 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d teTimeKind] > 0} 12e50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12e60 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti 12e70 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e on {;DateTimeKin 12e80 64 3d 24 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 d=${dateTimeKind
12e90 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  }}..      }....
12ea0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
12eb0 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74  NOTE: Figure out
12ec0 20 77 68 61 74 20 74 68 65 20 66 69 6e 61 6c 20   what the final
12ed0 66 6c 61 67 73 20 66 6f 72 20 74 68 69 73 20 63  flags for this c
12ee0 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65 65 64 20 74  onnection need t
12ef0 6f 20 62 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  o be...      #..
12f00 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20        set flags
12f10 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  [getConnectionFl
12f20 61 67 73 20 24 66 69 6c 65 4e 61 6d 65 20 24 66  ags $fileName$f
12f30 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a  lags $quiet].... 12f40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 12f50 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 NOTE: If our ca 12f60 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 73 ller specified s 12f70 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ome SQLiteConnec 12f80 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 20 74 tionFlags, add t 12f90 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 12fa0 20 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 necessary port 12fb0 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 ion of the conne 12fc0 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 ction string now 12fd0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 12fe0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 12ff0 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 ngth$flags] > 0
13000 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13010 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74    append connect
13020 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c  ion {;Flags=${fl 13030 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a ags}}.. }.. 13040 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 13050 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 # NOTE: If our 13060 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified 13070 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c 6f 61 an extra payloa 13080 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 d to the connect 13090 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ion.. # 130a0 20 20 20 73 74 72 69 6e 67 2c 20 61 70 70 65 6e string, appen 130b0 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 d it now... 130c0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 130d0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 tring length$ex
130e0 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  tra] > 0} then {
130f0 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  ..        append
13100 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24   connection \; $13110 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a extra.. }.. 13120 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 13130 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68 # NOTE: Open th 13140 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 e database conne 13150 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 ction now, placi 13160 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61 ng the opaque ha 13170 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 ndle value.. 13180 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 # into t 13190 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63 he variable spec 131a0 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c ified by our cal 131b0 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 131c0 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c set db [sql 131d0 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69 open -type SQLi 131e0 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65 te [subst$conne
131f0 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20  ction]]....
13200 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
13210 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20  : Configure the
13220 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
13230 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 6c  ory for the newl
13240 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73  y opened databas
13250 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
13260 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20   connection now
13270 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65  unless our calle
13280 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20  r forbids it...
13290 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
132a0 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 20   {$temporary && 132b0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 132c0 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 44 no(setTemporaryD 132d0 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e irectory)]} then 132e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20 {.. sql 132f0 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70 execute$db [app
13300 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
13310 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 74         "PRAGMA t
13320 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
13330 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 65  ory = \"" [getTe
13340 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79  mporaryDirectory
13350 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d  ] \"\;]..      }
13360 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
13370 20 20 20 23 20 4e 4f 54 45 3a 20 50 65 72 66 6f     # NOTE: Perfo
13380 72 6d 20 61 6e 79 20 65 78 74 72 61 20 70 65 72  rm any extra per
13390 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 65 74 75  -connection setu
133a0 70 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20  p for the newly
133b0 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20 20 23 20  opened..      #
133c0 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 6e        database n
133d0 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61  ow unless our ca
133e0 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e  ller forbids it.
133f0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
13400 20 73 65 74 20 65 78 65 63 75 74 65 4f 6e 53 65   set executeOnSe
13410 74 75 70 20 5b 67 65 74 45 78 65 63 75 74 65 4f  tup [getExecuteO
13420 6e 53 65 74 75 70 5d 0d 0a 0d 0a 20 20 20 20 20  nSetup]....
13430 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
13440 67 74 68 20 24 65 78 65 63 75 74 65 4f 6e 53 65  gth $executeOnSe 13450 74 75 70 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 tup] > 0 && \.. 13460 20 20 20 20 20 20 20 20 20 21 5b 69 6e 66 6f 20 ![info 13470 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65 63 exists ::no(exec 13480 75 74 65 4f 6e 53 65 74 75 70 29 5d 7d 20 74 68 uteOnSetup)]} th 13490 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 134a0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 134b0 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6d 61 This command ma 134c0 79 20 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72 y raise an error 134d0 3b 20 69 66 20 73 6f 2c 20 74 68 61 74 20 69 73 ; if so, that is 134e0 20 66 69 6e 65 2c 20 61 73 0d 0a 20 20 20 20 20 fine, as.. 134f0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 65 # the e 13500 6e 63 6c 6f 73 69 6e 67 20 74 65 73 74 20 77 69 nclosing test wi 13510 6c 6c 20 74 68 65 6e 20 66 61 69 6c 2e 20 20 54 ll then fail. T 13520 68 65 20 5b 73 75 62 73 74 5d 20 63 6f 6d 6d 61 he [subst] comma 13530 6e 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 nd is.. # 13540 20 20 20 20 20 20 20 75 73 65 64 20 6f 6e 20 74 used on t 13550 68 65 20 53 51 4c 20 69 6e 20 63 61 73 65 20 69 he SQL in case i 13560 74 20 6e 65 65 64 73 20 74 6f 20 72 65 66 65 72 t needs to refer 13570 20 74 6f 20 73 74 61 74 65 20 69 6e 20 6f 75 72 to state in our 13580 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 13590 20 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 context... 135a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 135b0 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b ql execute$db [
135c0 73 75 62 73 74 20 24 65 78 65 63 75 74 65 4f 6e  subst $executeOn 135d0 53 65 74 75 70 5d 0d 0a 20 20 20 20 20 20 7d 0d Setup].. }. 135e0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 135f0 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 # NOTE: Always 13600 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f 6e 6e return the conn 13610 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75 70 ection handle up 13620 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 on success... 13630 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 13640 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a 0c rn$db..    }...
13650 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62  ..    proc getDb
13660 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61  Connection { {va
13670 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20  rName db} } {..
13680 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
13690 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
136a0 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
136b0 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22  iable (e.g. "db"
136c0 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  ) in the context
136d0 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23   of our..      #
136e0 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20         caller.
136f0 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68  The handle to th
13700 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69  e database previ
13710 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61  ously opened via
13720 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
13730 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72      [setupDb] pr
13740 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62  ocedure should b
13750 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d  e stored there..
13760 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
13770 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 13780 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a db.... #.. 13790 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 137a0 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 41 is returns the A 137b0 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e 65 63 DO.NET IDbConnec 137c0 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e 73 74 tion object inst 137d0 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a 20 20 ance for the.. 137e0 20 20 20 20 23 20 20 20 20 20 20 20 73 70 65 63 # spec 137f0 69 66 69 65 64 20 64 61 74 61 62 73 65 20 68 61 ified databse ha 13800 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 65 74 ndle. Since get 13810 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 63 74 ting this object 13820 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a 20 20 relies upon.. 13830 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 13840 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 72 65 e internals, gre 13850 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62 at care should b 13860 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f 69 64 e taken to avoid 13870 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d 0a 20 disposing of.. 13880 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69 # thi 13890 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 68 65 s object or othe 138a0 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 69 74 rwise putting it 138b0 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c 69 64 into an invalid 138c0 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 state... # 138d0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 138e0 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68 o exists db]} th 138f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 13900 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 13910 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 13920 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 13930 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c 61 ublic -objectfla 13940 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 2d 61 gs +NoDispose -a 13950 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 lias \.. 13960 20 20 20 20 20 20 49 6e 74 65 72 70 72 65 74 65 Interprete 13970 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e r.GetActive.conn 13980 65 63 74 69 6f 6e 73 20 49 74 65 6d 20 24 64 62 ections Item$db
13990 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75  ..        } resu
139a0 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
139b0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
139c0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
139d0 20 53 75 63 63 65 73 73 2c 20 72 65 74 75 72 6e   Success, return
139e0 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65   the opaque obje
139f0 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  ct handle...
13a00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13a10 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c     return $resul 13a20 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 t.. } els 13a30 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 e {.. # 13a40 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 13a50 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 65 70 TE: Failure, rep 13a60 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 ort why... 13a70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 13a80 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
13a90 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
13aa0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
13ab0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
13ac0 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74  G: failed to get
13ad0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
13ae0 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  le for database
13af0 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
13b00 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65 72       $db "\", er 13b10 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 ror: " \n\t$res
13b20 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
13b30 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
13b40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
13b50 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72  NOTE: Failure, r
13b60 65 74 75 72 6e 20 61 6e 20 6f 62 76 69 6f 75 73  eturn an obvious
13b70 6c 79 20 69 6e 76 61 6c 69 64 20 6f 70 61 71 75  ly invalid opaqu
13b80 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e  e object handle.
13b90 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
13ba0 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
13bb0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 66  }.....    proc f
13bc0 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20  reeDbConnection
13bd0 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65  { {varName conne
13be0 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20  ction} } {..
13bf0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
13c00 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20  E: Refer to the
13c10 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62  specified variab
13c20 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 63  le (e.g. "connec
13c30 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d 0a 20  tion") in the..
13c40 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
13c50 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c  text of our call
13c60 65 72 2e 20 20 54 68 65 20 6f 70 61 71 75 65 20  er.  The opaque
13c70 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 6f  object handle fo
13c80 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a 20 20  r an ADO.NET..
13c90 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e      #       conn
13ca0 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c  ection previousl
13cb0 79 20 72 65 74 75 72 6e 65 64 20 62 79 20 5b 67  y returned by [g
13cc0 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20  etDbConnection]
13cd0 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20  should be..
13ce0 20 23 20 20 20 20 20 20 20 73 74 6f 72 65 64 20   #       stored
13cf0 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d  there...      #.
13d00 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $13d10 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 varName connecti 13d20 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 on.... #.. 13d30 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att 13d40 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65 20 74 empt to remove t 13d50 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 he opaque object 13d60 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65 handle from the 13d70 20 69 6e 74 65 72 70 72 65 74 65 72 0d 0a 20 20 interpreter.. 13d80 20 20 20 20 23 20 20 20 20 20 20 20 6e 6f 77 2e # now. 13d90 20 20 54 68 69 73 20 5b 6f 62 6a 65 63 74 20 64 This [object d 13da0 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77 69 6c ispose] call wil 13db0 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 64 l not actually d 13dc0 69 73 70 6f 73 65 20 6f 66 20 74 68 65 0d 0a 20 ispose of the.. 13dd0 20 20 20 20 20 23 20 20 20 20 20 20 20 75 6e 64 # und 13de0 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74 20 62 erlying object b 13df0 65 63 61 75 73 65 20 74 68 65 20 2b 4e 6f 44 69 ecause the +NoDi 13e00 73 70 6f 73 65 20 66 6c 61 67 20 77 61 73 20 73 spose flag was s 13e10 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20 20 20 et on it.. 13e20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 63 # during c 13e30 72 65 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f reation of the o 13e40 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e paque object han 13e50 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 dle... #.. 13e60 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 13e70 78 69 73 74 73 20 63 6f 6e 6e 65 63 74 69 6f 6e xists connection 13e80 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 13e90 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 [catch {object 13ea0 20 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e 65 63 dispose$connec
13eb0 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20 74 68  tion} error]} th
13ec0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
13ed0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
13ee0 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c   We somehow fail
13ef0 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65  ed to remove the
13f00 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72 74 20   handle, report
13f10 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  why...        #.
13f20 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $13f30 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 13f40 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 13f50 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 13f60 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 13f70 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e 65 63 to remove connec 13f80 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22 22 20 tion handle \"" 13f90 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20$connection \..
13fa0 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
13fb0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 13fc0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 13fd0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 13fe0 20 70 72 6f 63 20 61 64 64 44 62 43 6f 6e 6e 65 proc addDbConne 13ff0 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63 74 69 ction { connecti 14000 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 on {varName db} 14010 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 14020 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 # NOTE: Refe 14030 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 r to the specifi 14040 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 ed variable (e.g 14050 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 . "db") in the c 14060 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 ontext of our.. 14070 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c # cal 14080 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ler... #.. 14090 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
140a0 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20  rName db....
140b0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
140c0 45 3a 20 43 72 65 61 74 65 20 61 20 63 6f 72 72  E: Create a corr
140d0 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 65 64 20  ectly formatted
140e0 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74  name for the dat
140f0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
14100 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20   to..      #
14110 20 20 20 62 65 20 61 64 64 65 64 20 74 6f 20 74     be added to t
14120 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 65 64 20  he list managed
14130 62 79 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74  by the Eagle int
14140 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20  erpreter...
14150 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62   #..      set db
14160 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
14170 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
14180 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 45  c \..          E
14190 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73  agle._Components
141a0 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d 61 74 4f  .Private.FormatO
141b0 70 73 20 44 61 74 61 62 61 73 65 4f 62 6a 65 63  ps DatabaseObjec
141c0 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74 69 6f  tName $connectio 141d0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 n \.. S 141e0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 QLiteConnection 141f0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 [object invoke I 14200 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 nterpreter.GetAc 14210 74 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d tive NextId]]... 14220 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 14230 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 # NOTE: Add the 14240 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect 14250 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 79 20 ion provided by 14260 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f 20 74 68 our caller to th 14270 65 20 6c 69 73 74 0d 0a 20 20 20 20 20 20 23 20 e list.. # 14280 20 20 20 20 20 20 6f 66 20 74 68 6f 73 65 20 6b of those k 14290 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61 67 6c nown to the Eagl 142a0 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a e interpreter... 142b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 6f #.. o 142c0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 142d0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 ags +NonPublic I 142e0 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 nterpreter.GetAc 142f0 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 tive.connections 14300 20 41 64 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 Add \.. 14310 20 20 24 64 62 20 24 63 6f 6e 6e 65 63 74 69 6f$db $connectio 14320 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 n.. }..... 14330 20 70 72 6f 63 20 67 65 74 52 6f 77 73 46 72 6f proc getRowsFro 14340 6d 44 61 74 61 54 61 62 6c 65 20 7b 20 64 61 74 mDataTable { dat 14350 61 54 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 aTable } {.. 14360 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69 73 74 set rows [list 14370 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 75 ].. set cou 14380 6e 74 20 5b 24 64 61 74 61 54 61 62 6c 65 20 43 nt [$dataTable C
14390 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d 0a 0d  olumns.Count]...
143a0 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20  .      for {set
143b0 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 78  index 0} {$index 143c0 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 <$count} {incr
143d0 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20   index} {..
143e0 20 20 20 73 65 74 20 64 61 74 61 43 6f 6c 75 6d     set dataColum
143f0 6e 20 5b 24 64 61 74 61 54 61 62 6c 65 20 2d 61  n [$dataTable -a 14400 6c 69 61 73 20 43 6f 6c 75 6d 6e 73 2e 67 65 74 lias Columns.get 14410 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 20 _Item$index]..
14420 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 73         set names
14430 28 24 69 6e 64 65 78 29 20 5b 24 64 61 74 61 43  ($index) [$dataC
14440 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61 6d 65  olumn ColumnName
14450 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
14460 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
14470 63 68 20 2d 61 6c 69 61 73 20 64 61 74 61 52 6f  ch -alias dataRo
14480 77 20 5b 73 65 74 20 64 61 74 61 52 6f 77 73 20  w [set dataRows
14490 5b 24 64 61 74 61 54 61 62 6c 65 20 52 6f 77 73  [$dataTable Rows 144a0 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 ]] {.. se 144b0 74 20 72 6f 77 20 5b 6c 69 73 74 5d 0d 0a 0d 0a t row [list].... 144c0 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 for {set 144d0 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 index 0} {$inde
144e0 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63  x < $count} {inc 144f0 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 r index} {.. 14500 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 set value 14510 5b 24 64 61 74 61 52 6f 77 20 2d 63 72 65 61 74 [$dataRow -creat
14520 65 20 2d 61 6c 69 61 73 20 67 65 74 5f 49 74 65  e -alias get_Ite
14530 6d 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20 20 20  m $index].... 14540 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 14550 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 ng length$value
14560 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20  ] > 0 && \..
14570 20 20 20 20 20 20 20 20 20 20 21 5b 6f 62 6a 65            ![obje
14580 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 76 65 72  ct invoke Conver
14590 74 20 49 73 44 42 4e 75 6c 6c 20 24 76 61 6c 75  t IsDBNull $valu 145a0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 145b0 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 145c0 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 row [list$names
145d0 28 24 69 6e 64 65 78 29 20 5b 24 76 61 6c 75 65  ($index) [$value
145e0 20 54 6f 53 74 72 69 6e 67 5d 5d 0d 0a 20 20 20   ToString]]..
145f0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
14600 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70  .            lap
14610 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 20 24  pend row [list $14620 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 5d 0d 0a names($index)]..
14630 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
14640 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
14650 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 73 20 24    lappend rows $14660 72 6f 77 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a row.. }.... 14670 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 6f return$ro
14680 77 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  ws..    }.....
14690 20 20 70 72 6f 63 20 64 75 6d 70 52 6f 77 73 46    proc dumpRowsF
146a0 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b 20 63  romDataTable { c
146b0 68 61 6e 6e 65 6c 20 72 6f 77 73 20 7d 20 7b 0d  hannel rows } {.
146c0 0a 20 20 20 20 20 20 73 65 74 20 73 65 71 75 65  .      set seque
146d0 6e 63 65 20 31 0d 0a 0d 0a 20 20 20 20 20 20 66  nce 1....      f
146e0 6f 72 65 61 63 68 20 72 6f 77 20 24 72 6f 77 73  oreach row $rows 146f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 14700 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
14710 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
14720 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 73 65        [expr {$se 14730 71 75 65 6e 63 65 20 3e 20 31 20 3f 20 22 5c 6e quence > 1 ? "\n 14740 22 20 3a 20 22 22 7d 5d 20 22 2d 2d 2d 2d 20 52 " : ""}] "---- R 14750 4f 57 20 23 22 20 24 73 65 71 75 65 6e 63 65 20 OW #"$sequence
14760 3a 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  :\n]....
14770 66 6f 72 65 61 63 68 20 70 61 69 72 20 24 72 6f  foreach pair $ro 14780 77 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 w {.. i 14790 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61 69 f {[llength$pai
147a0 72 5d 20 3e 3d 20 32 7d 20 74 68 65 6e 20 7b 0d  r] >= 2} then {.
147b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
147c0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 147d0 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20 20 endArgs \t \.. 147e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c [l 147f0 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 ist [lindex$pai
14800 72 20 30 5d 5d 20 22 3a 20 22 20 5b 6c 69 73 74  r 0]] ": " [list
14810 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 20 31   [lindex $pair 1 14820 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. 14830 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6c 6c 65 } elseif {[lle 14840 6e 67 74 68 20 24 70 61 69 72 5d 20 3d 3d 20 31 ngth$pair] == 1
14850 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
14860 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 14870 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 14880 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \t \.. 14890 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c 69 [list [li 148a0 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d 20 22 ndex$pair 0]] "
148b0 3a 20 3c 6e 75 6c 6c 3e 5c 6e 22 5d 0d 0a 20 20  : <null>\n"]..
148c0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
148d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
148e0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 74 3c  uts $channel \t< 148f0 65 6d 70 74 79 3e 5c 6e 3b 20 23 20 4e 4f 54 45 empty>\n; # NOTE 14900 3a 20 4e 6f 20 64 61 74 61 3f 0d 0a 20 20 20 20 : No data?.. 14910 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 14920 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e }.... in 14930 63 72 20 73 65 71 75 65 6e 63 65 0d 0a 20 20 20 cr sequence.. 14940 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 14950 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 proc cleanup 14960 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 76 Db { fileName {v 14970 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f 6c 6c arName db} {coll 14980 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 6c 69 ect true} {quali 14990 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 20 20 fy true}.. 149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b { 149b0 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d 20 7b delete true} } { 149c0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 149d0 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 149e0 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65 to force all pe 149f0 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20 nding "garbage" 14a00 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f objects to be co 14a10 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20 llected,.. 14a20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e # includin 14a30 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65 g SQLite stateme 14a40 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f nts and backup o 14a50 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f bjects; this sho 14a60 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20 uld allow.. 14a70 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64 # the und 14a80 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 erlying database 14a90 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65 file to be dele 14aa0 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ted... #.. 14ab0 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 if {$collec
14ac0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
14ad0 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67     collectGarbag
14ae0 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  e $::test_channe 14af0 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 l.. }.... 14b00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 14b10 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 OTE: Refer to th 14b20 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 e specified vari 14b30 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 able (e.g. "db") 14b40 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 in the context 14b50 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 of our.. # 14b60 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 caller. T 14b70 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 he handle to the 14b80 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69 6f database previo 14b90 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 20 usly opened via 14ba0 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 14bb0 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72 6f [setupDb] pro 14bc0 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62 65 cedure should be 14bd0 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a stored there... 14be0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 #.. u 14bf0 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
14c00 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  db....      #..
14c10 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6c 6f       # NOTE: Clo
14c20 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  se the connectio
14c30 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  n to the databas
14c40 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73 68 6f  e now.  This sho
14c50 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a 20 20  uld allow us..
14c60 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 64      #       to d
14c70 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65 72 6c  elete the underl
14c80 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 69  ying database fi
14c90 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  le...      #..
14ca0 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
14cb0 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63 61 74  ists db] && [cat
14cc0 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64  ch {sql close $d 14cd0 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 b} error]} then 14ce0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 14cf0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We 14d00 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 somehow failed 14d10 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64 61 74 to close the dat 14d20 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20 77 68 abase, report wh 14d30 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 y... #.. 14d40 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
14d50 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
14d60 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
14d70 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
14d80 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
14d90 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73 65 20   close database
14da0 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65 72 72  \"" $db "\", err 14db0 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 14dc0 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f 72 \n\t$error
14dd0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d   \n]..      }...
14de0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
14df0 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73  # NOTE: First, s
14e00 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72  ee if our caller
14e10 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20 61   has requested a
14e20 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61  n in-memory data
14e30 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  base...      #..
14e40 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f        set isMemo
14e50 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24  ry [isMemoryDb $14e60 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 fileName].... 14e70 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 14e80 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 TE: Build the fu 14e90 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65 20 64 ll path to the d 14ea0 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d atabase file nam 14eb0 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c e. For now, all 14ec0 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23 20 20 test.. # 14ed0 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66 69 database fi 14ee0 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 les are stored i 14ef0 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 n the temporary 14f00 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 20 directory... 14f10 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 14f20 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75$isMemory && $qu 14f30 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 alify} then {.. 14f40 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e set fileN 14f50 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b ame [file join [ 14f60 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 getDatabaseDirec 14f70 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c tory] [file tail 14f80 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20$fileName]]..
14f90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
14fa0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
14fb0 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c  Check if the fil
14fc0 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d  e still exists..
14fd0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
14fe0 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26  if {!$isMemory & 14ff0 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b 66 69 &$delete && [fi
15000 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN 15010 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 15020 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 15030 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65 # NOTE: Skip de 15040 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 leting database 15050 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64 files if somebod 15060 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61 y sets the globa 15070 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 l.. # 15080 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f 20 70 variable to p 15090 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20 revent it... 150a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 150b0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 150c0 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44 62 46 ::no(cleanupDbF 150d0 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ile)]} then {.. 150e0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 150f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 15100 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 tempt to delete 15110 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61 73 the test databas 15120 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 e file now... 15130 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 15140 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 if {[set cod 15150 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 e [catch {file d 15160 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d elete$fileName}
15170 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b   error]]} then {
15180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
15190 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
151a0 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20  OTE: We somehow
151b0 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65  failed to delete
151c0 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72   the file, repor
151d0 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20  t why...
151e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
151f0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 15200 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 15210 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 15220 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 15230 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 15240 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 delete database 15250 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
15260 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
15270 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e         "\" durin
15280 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72  g cleanup, error
15290 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 152a0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 152b0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 152c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 152d0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 152e0 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 20 E: Show that we 152f0 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting 15300 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 the file... 15310 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 15320 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d set code 0... 15330 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 15340 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
15350 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
15370 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69  === WARNING: ski
15380 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 64 61  pped deleting da
15390 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20  tabase file \""
153a0 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  $fileName \.. 153b0 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 "\" d 153c0 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 uring cleanup\n" 153d0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 153e0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 153f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 15400 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c # NOTE: The fil 15410 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 e does not exist 15420 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 , success!.. 15430 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 15440 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 et code 0.. 15450 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 15460 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d rn$code..    }.
15470 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76  ....    proc sav
15480 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69  eEnvironmentVari
15490 61 62 6c 65 73 20 7b 20 6e 61 6d 65 73 20 7b 76  ables { names {v
154a0 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a  arName ""} } {..
154b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
154c0 20 4e 4f 54 45 3a 20 46 6f 72 20 65 61 63 68 20   NOTE: For each
154d0 6e 61 6d 65 2c 20 64 6f 65 73 20 74 68 65 20 6c  name, does the l
154e0 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  ive environment
154f0 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 3f 20  variable exist?
15500 20 49 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20   If..      #
15510 20 20 20 73 6f 2c 20 73 61 76 65 20 74 68 65 20     so, save the
15520 76 61 6c 75 65 20 66 6f 72 20 6c 61 74 65 72 3b  value for later;
15530 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65   otherwise, make
15540 20 73 75 72 65 20 74 68 65 20 73 61 76 65 64 0d   sure the saved.
15550 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76  .      #       v
15560 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 65 78  alue does not ex
15570 69 73 74 20 65 69 74 68 65 72 2e 20 20 54 68 65  ist either.  The
15580 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e   live environmen
15590 74 20 76 61 72 69 61 62 6c 65 73 0d 0a 20 20 20  t variables..
155a0 20 20 20 23 20 20 20 20 20 20 20 41 52 45 20 4e     #       ARE N
155b0 4f 54 20 63 68 61 6e 67 65 64 20 62 79 20 74 68  OT changed by th
155c0 69 73 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20  is procedure...
155d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
155e0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
155f0 20 24 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d   $varName] == 0} 15600 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15610 20 73 65 74 20 76 61 72 4e 61 6d 65 20 73 61 76 set varName sav 15620 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a edEnv.. }.. 15630 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 15640 24 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e$varName savedEn
15650 76 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61  v....      forea
15660 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b  ch name $names { 15670 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 .. if {[i 15680 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 nfo exists ::env 15690 28 24 6e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b ($name)]} then {
156a0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
156b0 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 20  savedEnv($name) 156c0 24 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 0d 0a 20$::env($name).. 156d0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 156e0 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 . unset 156f0 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 -nocomplain sav 15700 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 edEnv($name)..
15710 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
15720 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
15730 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
15740 69 73 20 73 65 6c 66 2d 63 6c 65 61 6e 69 6e 67  is self-cleaning
15750 2e 20 20 49 66 20 6e 6f 20 73 61 76 65 64 20 65  .  If no saved e
15760 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
15770 62 6c 65 73 20 6e 6f 77 0d 0a 20 20 20 20 20 20  bles now..
15780 23 20 20 20 20 20 20 20 65 78 69 73 74 2c 20 72  #       exist, r
15790 65 6d 6f 76 65 20 74 68 65 20 61 72 72 61 79 2e  emove the array.
157a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
157b0 20 69 66 20 7b 5b 61 72 72 61 79 20 73 69 7a 65   if {[array size
157c0 20 73 61 76 65 64 45 6e 76 5d 20 3d 3d 20 30 7d   savedEnv] == 0}
157d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
157e0 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
157f0 69 6e 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20  in savedEnv..
15800 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
15810 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65      proc restore
15820 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61  EnvironmentVaria
15830 62 6c 65 73 20 7b 20 6e 61 6d 65 73 20 7b 76 61  bles { names {va
15840 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20  rName ""} } {..
15850 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
15860 4e 4f 54 45 3a 20 46 6f 72 20 65 61 63 68 20 6e  NOTE: For each n
15870 61 6d 65 2c 20 64 6f 65 73 20 74 68 65 20 73 61  ame, does the sa
15880 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  ved environment
15890 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 3f 20  variable exist?
158a0 20 49 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20   If..      #
158b0 20 20 20 73 6f 2c 20 72 65 73 74 6f 72 65 20 74     so, restore t
158c0 68 65 20 73 61 76 65 64 20 76 61 6c 75 65 20 61  he saved value a
158d0 6e 64 20 75 6e 73 65 74 20 69 74 3b 20 6f 74 68  nd unset it; oth
158e0 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72  erwise, make sur
158f0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
15900 20 74 68 65 20 6c 69 76 65 20 65 6e 76 69 72 6f   the live enviro
15910 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 64  nment variable d
15920 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 65 69  oes not exist ei
15930 74 68 65 72 20 28 69 2e 65 2e 20 69 74 0d 0a 20  ther (i.e. it..
15940 20 20 20 20 20 23 20 20 20 20 20 20 20 77 61 73       #       was
15950 20 6e 6f 74 20 73 65 74 20 74 6f 20 62 65 67 69   not set to begi
15960 6e 20 77 69 74 68 29 2e 20 20 42 6f 74 68 20 73  n with).  Both s
15970 61 76 65 64 20 61 6e 64 20 6c 69 76 65 20 65 6e  aved and live en
15980 76 69 72 6f 6e 6d 65 6e 74 0d 0a 20 20 20 20 20  vironment..
15990 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c   #       variabl
159a0 65 73 20 41 52 45 20 63 68 61 6e 67 65 64 20 62  es ARE changed b
159b0 79 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65  y this procedure
159c0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
159d0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
159e0 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3d  ngth $varName] = 159f0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 15a00 20 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 set varName 15a10 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 savedEnv.. 15a20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 75 70 76 61 }.... upva 15a30 72 20 31 20 24 76 61 72 4e 61 6d 65 20 73 61 76 r 1$varName sav
15a40 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 66  edEnv....      f
15a50 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d  oreach name $nam 15a60 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 es {.. if 15a70 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 73 {[info exists s 15a80 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 5d 7d avedEnv($name)]}
15a90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
15aa0 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 24 6e 61     set ::env($na 15ab0 6d 65 29 20 24 73 61 76 65 64 45 6e 76 28 24 6e me)$savedEnv($n 15ac0 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 ame).. 15ad0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 15ae0 6e 20 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 n savedEnv($name
15af0 29 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  )..        } els
15b00 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75  e {..          u
15b10 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
15b20 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 0d 0a 20   ::env($name).. 15b30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 15b40 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 15b50 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 15b60 20 69 73 20 73 65 6c 66 2d 63 6c 65 61 6e 69 6e is self-cleanin 15b70 67 2e 20 20 49 66 20 6e 6f 20 73 61 76 65 64 20 g. If no saved 15b80 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 environment vari 15b90 61 62 6c 65 73 20 6e 6f 77 0d 0a 20 20 20 20 20 ables now.. 15ba0 20 23 20 20 20 20 20 20 20 65 78 69 73 74 2c 20 # exist, 15bb0 72 65 6d 6f 76 65 20 74 68 65 20 61 72 72 61 79 remove the array 15bc0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 15bd0 20 20 69 66 20 7b 5b 61 72 72 61 79 20 73 69 7a if {[array siz 15be0 65 20 73 61 76 65 64 45 6e 76 5d 20 3d 3d 20 30 e savedEnv] == 0 15bf0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 15c00 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c unset -nocompl 15c10 61 69 6e 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 ain savedEnv.. 15c20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 15c30 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 53 51 . proc saveSQ 15c40 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e LiteConnectionEn 15c50 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a vironment {} {.. 15c60 20 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61 upvar 1 sa 15c70 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d vedEnv savedEnv. 15c80 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 ... saveEnv 15c90 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 ironmentVariable 15ca0 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 15cb0 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61 67 DefaultFlag 15cc0 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 s_SQLiteConnecti 15cd0 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e 6e on No_SQLiteConn 15ce0 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 5d ectionNewParser] 15cf0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 \.. sa 15d00 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c vedEnv.. }... 15d10 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f .. proc resto 15d20 72 65 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 reSQLiteConnecti 15d30 6f 6e 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d onEnvironment {} 15d40 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 {.. upvar 15d50 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 1 savedEnv saved 15d60 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73 Env.... res 15d70 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 toreEnvironmentV 15d80 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c ariables [list \ 15d90 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65 66 61 .. Defa 15da0 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74 65 43 ultFlags_SQLiteC 15db0 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53 51 4c onnection No_SQL 15dc0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e 65 77 iteConnectionNew 15dd0 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20 20 20 20 Parser] \.. 15de0 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 savedEnv.. 15df0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 15e00 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f 6e 76 c saveSQLiteConv 15e10 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b ertEnvironment { 15e20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 } {.. upvar 15e30 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 1 savedEnv save 15e40 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 dEnv.... sa 15e50 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 veEnvironmentVar 15e60 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a iables [list \.. 15e70 20 20 20 20 20 20 20 20 20 20 55 73 65 5f 53 51 Use_SQ 15e80 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 LiteConvert_Defa 15e90 75 6c 74 44 62 54 79 70 65 20 55 73 65 5f 53 51 ultDbType Use_SQ 15ea0 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 61 LiteConvert_Defa 15eb0 75 6c 74 54 79 70 65 4e 61 6d 65 5d 20 5c 0d 0a ultTypeName] \.. 15ec0 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 45 savedE 15ed0 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 nv.. }..... 15ee0 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 53 51 proc restoreSQ 15ef0 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e 76 69 72 LiteConvertEnvir 15f00 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 onment {} {.. 15f10 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 upvar 1 saved 15f20 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a Env savedEnv.... 15f30 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 restoreEnv 15f40 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 ironmentVariable 15f50 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 15f60 20 20 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 Use_SQLiteC 15f70 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 onvert_DefaultDb 15f80 54 79 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 Type Use_SQLiteC 15f90 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 onvert_DefaultTy 15fa0 70 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 peName] \.. 15fb0 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 savedEnv.. 15fc0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 15fd0 63 20 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 c setupDbInterru 15fe0 70 74 43 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61 ptCallback { cha 15ff0 6e 6e 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 nnel log } {.. 16000 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
16010 65 6c 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67  el "---- setting
16020 20 75 70 20 64 65 62 75 67 67 65 72 20 69 6e 74   up debugger int
16030 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e  errupt callback.
16040 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66  .. "....      if
16050 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
16060 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d      saveEnvironm
16070 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69  entVariables [li
16080 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
16090 20 20 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72    quietFindInter
160a0 70 72 65 74 65 72 54 65 73 74 50 61 74 68 20 71  preterTestPath q
160b0 75 69 65 74 53 65 74 75 70 49 6e 74 65 72 70 72  uietSetupInterpr
160c0 65 74 65 72 54 65 73 74 50 61 74 68 5d 0d 0a 0d  eterTestPath]...
160d0 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0d 0a  .        try {..
160e0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
160f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 50         # NOTE: P
16100 72 65 76 65 6e 74 20 74 68 65 20 76 65 6e 64 6f  revent the vendo
16110 72 20 73 63 72 69 70 74 20 66 72 6f 6d 20 62 65  r script from be
16120 69 6e 67 20 6e 6f 69 73 79 20 77 68 65 6e 20 63  ing noisy when c
16130 72 65 61 74 69 6e 67 0d 0a 20 20 20 20 20 20 20  reating..
16140 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 69     #       the i
16150 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65  solated interpre
16160 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ter...
16170 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
16180 20 3a 3a 65 6e 76 28 71 75 69 65 74 46 69 6e 64   ::env(quietFind
16190 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50  InterpreterTestP
161a0 61 74 68 29 20 31 0d 0a 20 20 20 20 20 20 20 20  ath) 1..
161b0 20 20 73 65 74 20 3a 3a 65 6e 76 28 71 75 69 65    set ::env(quie
161c0 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65  tSetupInterprete
161d0 72 54 65 73 74 50 61 74 68 29 20 31 0d 0a 0d 0a  rTestPath) 1....
161e0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
161f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
16200 61 6b 65 20 73 75 72 65 20 74 68 65 20 73 63 72  ake sure the scr
16210 69 70 74 20 64 65 62 75 67 67 65 72 20 61 6e 64  ipt debugger and
16220 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e   the isolated in
16230 74 65 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20  terpreter..
16240 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65       #       are
16250 20 73 65 74 75 70 20 61 6e 64 20 72 65 61 64 79   setup and ready
16260 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20 20   for use...
16270 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16280 20 20 64 65 62 75 67 20 73 65 74 75 70 20 74 72    debug setup tr
16290 75 65 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20  ue true....
162a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
162b0 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74    # NOTE: Load t
162c0 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 61 63  he necessary pac
162d0 6b 61 67 65 73 20 69 6e 74 6f 20 74 68 65 20 69  kages into the i
162e0 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65  solated interpre
162f0 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ter...
16300 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62  #..          deb
16310 75 67 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20  ug eval {..
16320 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72         package r
16330 65 71 75 69 72 65 20 45 61 67 6c 65 0d 0a 20 20  equire Eagle..
16340 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
16350 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e  e require Eagle.
16360 4c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20  Library..
16370 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71       package req
16380 75 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d  uire Eagle.Test.
16390 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
163a0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
163b0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
163c0 6f 70 79 20 74 68 65 20 6e 65 63 65 73 73 61 72  opy the necessar
163d0 79 20 76 61 72 69 61 62 6c 65 73 20 69 6e 74 6f  y variables into
163e0 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e   the isolated in
163f0 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
16400 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
16410 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20     debug invoke
16420 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 68 61  0 set ::test_cha
16430 6e 6e 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23  nnel $channel; # 16440 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75 74 NOTE: For [tput 16450 73 5d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 64 s]... d 16460 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 ebug invoke 0 se 16470 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 6c 6f t ::test_log$lo
16480 67 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b  g; # NOTE: For [
16490 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20  tlog].....
164a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
164b0 20 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c   # NOTE: Install
164c0 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 63   the callback sc
164d0 72 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c 75  ript to be evalu
164e0 61 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f 6c  ated in the isol
164f0 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ated..
16500 23 20 20 20 20 20 20 20 69 6e 74 65 72 70 72 65  #       interpre
16510 74 65 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e  ter when this in
16520 74 65 72 70 72 65 74 65 72 20 69 73 20 69 6e 74  terpreter is int
16530 65 72 72 75 70 74 65 64 20 62 79 20 73 63 72 69  errupted by scri
16540 70 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  pt..          #
16550 20 20 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 69        cancellati
16560 6f 6e 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20  on, etc...
16570 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
16580 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20   debug callback
16590 61 70 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20 65  apply {{sender e
165a0 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } {..
165b0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
165c0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
165d0 20 74 68 69 73 20 64 65 62 75 67 67 65 72 20 63   this debugger c
165e0 61 6c 6c 62 61 63 6b 20 69 73 20 6f 6e 65 20 74  allback is one t
165f0 68 61 74 20 77 65 20 63 61 72 65 20 61 62 6f 75  hat we care abou
16600 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...
16610 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  #..            s
16620 65 74 20 69 6e 74 65 72 72 75 70 74 54 79 70 65  et interruptType
16630 73 20 5b 73 70 6c 69 74 20 5b 24 65 20 49 6e 74  s [split [$e Int 16640 65 72 72 75 70 74 54 79 70 65 5d 20 22 2c 20 22 erruptType] ", " 16650 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... 16660 20 69 66 20 7b 22 43 61 6e 63 65 6c 65 64 22 20 if {"Canceled" 16670 69 6e 20 24 69 6e 74 65 72 72 75 70 74 54 79 70 in$interruptTyp
16680 65 73 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20  es || \..
16690 20 20 20 20 20 20 20 20 20 22 55 6e 77 6f 75 6e           "Unwoun
166a0 64 22 20 69 6e 20 24 69 6e 74 65 72 72 75 70 74  d" in $interrupt 166b0 54 79 70 65 73 7d 20 74 68 65 6e 20 7b 0d 0a 20 Types} then {.. 166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 166d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 166e0 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20 NOTE: Make sure 166f0 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d the [object] com 16700 6d 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c mand is availabl 16710 65 2e 20 20 53 69 6e 63 65 0d 0a 20 20 20 20 20 e. Since.. 16720 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 16730 20 74 68 69 73 20 69 73 20 61 6e 20 69 73 6f 6c this is an isol 16740 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72 ated interpreter 16750 2c 20 63 68 65 63 6b 20 66 6f 72 20 69 74 20 74 , check for it t 16760 68 65 20 68 61 72 64 0d 0a 20 20 20 20 20 20 20 he hard.. 16770 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 16780 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ay... 16790 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 167a0 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 if {[llength 167b0 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 [info commands 167c0 6f 62 6a 65 63 74 5d 5d 20 3e 20 30 7d 20 74 68 object]] > 0} th 167d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 167e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 167f0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 16800 20 49 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 Iterate through 16810 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63 6f all database co 16820 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 nnections known 16830 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 to the.. 16840 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 16850 70 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74 parent interpret 16860 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 er... 16870 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 16880 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 object f 16890 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 oreach -alias pa 168a0 69 72 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b ir [object invok 168b0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 168c0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 168d0 20 20 20 20 20 20 20 20 20 20 20 24 65 20 49 6e$e In
168e0 74 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e 65 63  terpreter.connec
168f0 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20  tions] {..
16900 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
16910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16920 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
16930 20 74 6f 20 63 61 6e 63 65 6c 20 61 6e 79 20 53   to cancel any S
16940 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 72  QL queries in pr
16950 6f 67 72 65 73 73 20 6f 6e 0d 0a 20 20 20 20 20  ogress on..
16960 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
16970 20 20 20 20 20 74 68 69 73 20 64 61 74 61 62 61       this databa
16980 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
16990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
169a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
169b0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
169c0 68 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43  h {$pair Value.C 169d0 61 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74 ancel} error]} t 169e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 169f0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 16a00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
16a10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20   [appendArgs \n
16a20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
16a30 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
16a40 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
16a50 20 74 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79   to cancel query
16a60 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20   for " \..
16a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
16a80 20 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22    "connection \"
16a90 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c  " [$pair Key] "\ 16aa0 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 16ab0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16ac0 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72$err
16ad0 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
16ae0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20                }
16b10 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
16b20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 16b30 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 16b40 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a ppendArgs \n \.. 16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16b60 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 16b70 47 3a 20 63 61 6e 6e 6f 74 20 63 61 6e 63 65 6c G: cannot cancel 16b80 20 61 6e 79 20 71 75 65 72 69 65 73 3a 20 22 20 any queries: " 16b90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16ba0 20 20 20 20 20 20 20 22 74 68 65 20 5c 22 6f 62 "the \"ob 16bb0 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 69 ject\" command i 16bc0 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 5c s not available\ 16bd0 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n"].. 16be0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 16bf0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 16c00 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 66 69 6e }.. } fin 16c10 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 ally {.. 16c20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e restoreEnviron 16c30 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c mentVariables [l 16c40 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 16c50 20 20 20 20 20 71 75 69 65 74 46 69 6e 64 49 6e quietFindIn 16c60 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74 terpreterTestPat 16c70 68 20 71 75 69 65 74 53 65 74 75 70 49 6e 74 65 h quietSetupInte 16c80 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68 5d rpreterTestPath] 16c90 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 16ca0 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 } error] == 0 16cb0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 16cc0 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 16cd0 69 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 interruptCallbac 16ce0 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 20 k.sqlite3.... 16cf0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
16d00 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20  nel yes\n..
16d10 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
16d20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 16d30 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6e l [appendArgs "n 16d40 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 o, error: " \n\t 16d50 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
16d60 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
16d70 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70      proc cleanup
16d80 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20  File { fileName
16d90 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b  {collect true} {
16da0 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 7b  force false} } {
16db0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
16dc0 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
16dd0 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 65   to force all pe
16de0 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 20  nding "garbage"
16df0 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 6f  objects to be co
16e00 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 20  llected,..
16e10 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 6e  #       includin
16e20 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d 65  g SQLite stateme
16e30 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 6f  nts and backup o
16e40 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 6f  bjects; this sho
16e50 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 20  uld allow..
16e60 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e 64   #       the und
16e70 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65  erlying database
16e80 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c 65   file to be dele
16e90 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ted...      #..
16ea0 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63       if {$collec 16eb0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 16ec0 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 collectGarbag 16ed0 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 e$::test_channe
16ee0 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  l..      }....
16ef0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
16f00 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
16f10 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 69  e file still exi
16f20 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  sts...      #..
16f30 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
16f40 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] 16f50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 16f60 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 16f70 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 OTE: Skip deleti 16f80 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20 69 66 ng test files if 16f90 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 74 somebody sets t 16fa0 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 he global variab 16fb0 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 le.. # 16fc0 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74 20 69 to prevent i 16fd0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 16fe0 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 if {$forc
16ff0 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 73  e || ![info exis
17000 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 46  ts ::no(cleanupF
17010 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ile)]} then {..
17020 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
17030 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
17040 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20  tempt to delete
17050 74 68 65 20 74 65 73 74 20 66 69 6c 65 20 6e 6f  the test file no
17060 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  w...          #.
17070 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
17080 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20  set code [catch
17090 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69  {file delete $fi 170a0 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d 7d leName} error]]} 170b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 170c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 170d0 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 # NOTE: We s 170e0 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f omehow failed to 170f0 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 delete the file 17100 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... 17110 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 17120 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 17130 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
17140 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17160 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
17170 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 74  iled to delete t
17180 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 69  est file \"" $fi 17190 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. 171a0 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 "\" du 171b0 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 ring cleanup, er 171c0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
171d0 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
171e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
171f0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
17200 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
17210 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20  NOTE: Show that
17220 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74  we skipped delet
17230 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20  ing the file...
17240 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
17250 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30        set code 0
17260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70  ....          tp
17270 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 17280 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 17290 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 172a0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 172b0 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting 172c0 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 test file \""$
172d0 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
172e0 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75            "\" du
172f0 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d  ring cleanup\n"]
17300 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
17310 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
17320 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
17330 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c 65  # NOTE: The file
17340 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
17350 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 20   success!..
17360 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
17370 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 20  t code 0..
17380 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
17390 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d 0a  n $code.. }.. 173a0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 ... proc clea 173b0 6e 75 70 4d 65 6d 6f 72 79 20 7b 20 76 61 72 4e nupMemory { varN 173c0 61 6d 65 20 7b 71 75 69 65 74 20 66 61 6c 73 65 ame {quiet false 173d0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 } } {.. if 173e0 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 173f0 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d ctCommand] && \. 17400 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 17410 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 ng length$varNa
17420 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  me] > 0} then {.
17430 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
17440 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
17450 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
17460 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
17470 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20  . "connection")
17480 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  in the..
17490 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20  #       context
174a0 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 20  of our caller.
174b0 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63  The opaque objec
174c0 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e 0d  t handle for an.
174d0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
174e0 20 41 44 4f 2e 4e 45 54 20 63 6f 6e 6e 65 63 74   ADO.NET connect
174f0 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72  ion previously r
17500 65 74 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44  eturned by [getD
17510 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 20  bConnection]..
17520 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68        #       sh
17530 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74  ould be stored t
17540 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  here...        #
17550 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 20  ..        upvar
17560 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65  1 $varName conne 17570 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 ction.... 17580 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 17590 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 175a0 69 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 69 invoke$connecti
175b0 6f 6e 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79  on ReleaseMemory
175c0 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75  ..        } resu
175d0 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  lt]} then {..
175e0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 175f0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 17600 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
17610 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
17620 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
17640 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
17650 65 64 20 74 6f 20 72 65 6c 65 61 73 65 20 64 61  ed to release da
17660 74 61 62 61 73 65 20 6d 65 6d 6f 72 79 2c 20 65  tabase memory, e
17670 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20  rror: " \..
17680 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
17690 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 176a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 176b0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 176c0 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 if {[lleng 176d0 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 th [info command 176e0 73 20 64 65 62 75 67 5d 5d 20 3e 20 30 7d 20 74 s debug]] > 0} t 176f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 17700 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 17710 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 uplevel 1 17720 20 5b 6c 69 73 74 20 64 65 62 75 67 20 70 75 72 [list debug pur 17730 67 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 ge].. } r 17740 65 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a esult]} then {.. 17750 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
17760 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
17770 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
17780 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 17790 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 177b0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 177c0 61 69 6c 65 64 20 74 6f 20 70 75 72 67 65 20 63 ailed to purge c 177d0 61 6c 6c 20 66 72 61 6d 65 2c 20 65 72 72 6f 72 all frame, error 177e0 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 177f0 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 \n\t$res
17800 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
17810 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
17820 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
17830 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
17840 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69     uplevel 1 [li
17850 73 74 20 64 65 62 75 67 20 63 6c 65 61 6e 75 70  st debug cleanup
17860 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73  ]..        } res
17870 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ult]} then {..
17880 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 17890 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 178a0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
178b0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
178c0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
178e0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
178f0 6c 65 64 20 74 6f 20 63 6c 65 61 6e 75 70 20 69  led to cleanup i
17900 6e 74 65 72 70 72 65 74 65 72 2c 20 65 72 72 6f  nterpreter, erro
17910 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  r: " \..
17920 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 17930 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 17940 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 17950 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 17960 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 17970 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c uplevel 1 [l 17980 69 73 74 20 64 65 62 75 67 20 63 6f 6c 6c 65 63 ist debug collec 17990 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 t].. } re 179a0 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 sult]} then {.. 179b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
179c0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
179d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
179e0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 179f0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 17a10 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 17a20 69 6c 65 64 20 74 6f 20 63 6f 6c 6c 65 63 74 20 iled to collect 17a30 67 61 72 62 61 67 65 2c 20 65 72 72 6f 72 3a 20 garbage, error: 17a40 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 17a50 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
17a60 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
17a70 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
17a80 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
17a90 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70  ..    proc setup
17aa0 4d 65 6d 6f 72 79 43 6f 75 6e 74 65 72 73 20 7b  MemoryCounters {
17ab0 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20   varName } {..
17ac0 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
17ad0 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
17ae0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
17af0 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 17b00 61 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a 20 ame counter.... 17b10 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74 set count 17b20 65 72 28 31 29 20 5b 6f 62 6a 65 63 74 20 63 72 er(1) [object cr 17b30 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 eate -alias \.. 17b40 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 17b50 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 m.Diagnostics.Pe 17b60 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 rformanceCounter 17b70 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 Process \.. 17b80 20 20 20 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 "Working 17b90 20 53 65 74 22 20 5b 66 69 6c 65 20 72 6f 6f 74 Set" [file root 17ba0 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 name [file tail 17bb0 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a$::bin_file]]]..
17bc0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f  ..        set co
17bd0 75 6e 74 65 72 28 32 29 20 5b 6f 62 6a 65 63 74  unter(2) [object
17be0 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c   create -alias \
17bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
17c00 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73  stem.Diagnostics
17c10 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e  .PerformanceCoun
17c20 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20  ter Process \..
17c30 20 20 20 20 20 20 20 20 20 20 20 22 57 6f 72 6b             "Work
17c40 69 6e 67 20 53 65 74 20 50 65 61 6b 22 20 5b 66  ing Set Peak" [f
17c50 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69  ile rootname [fi
17c60 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66  le tail $::bin_f 17c70 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 ile]]].... 17c80 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 33 29 set counter(3) 17c90 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 [object create 17ca0 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 -alias \.. 17cb0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 System.Dia 17cc0 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d gnostics.Perform 17cd0 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 anceCounter Proc 17ce0 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ess \.. 17cf0 20 20 20 22 50 72 69 76 61 74 65 20 42 79 74 65 "Private Byte 17d00 73 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d s" [file rootnam 17d10 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a e [file tail$::
17d20 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 20 20 20  bin_file]]]..
17d30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
17d40 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a  turn ""..    }..
17d50 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f  ...    proc repo
17d60 72 74 4d 65 6d 6f 72 79 43 6f 75 6e 74 65 72 73  rtMemoryCounters
17d70 20 7b 20 63 68 61 6e 6e 65 6c 20 76 61 72 4e 61   { channel varNa
17d80 6d 65 20 70 72 65 66 69 78 20 7d 20 7b 0d 0a 20  me prefix } {..
17d90 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
17da0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
17db0 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
17dc0 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 17dd0 4e 61 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a Name counter.... 17de0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
17df0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
17e00 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
17e10 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 69    "---- " $prefi 17e20 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 x " counter \"" 17e30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 17e40 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 object invoke$c
17e50 6f 75 6e 74 65 72 28 31 29 20 43 6f 75 6e 74 65  ounter(1) Counte
17e60 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 65  rName] "\" value
17e70 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20   is " \..
17e80 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76       [object inv
17e90 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 31 29 20  oke $counter(1) 17ea0 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d RawValue] \n]... 17eb0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
17ec0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
17ed0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
17ee0 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66     "---- " $pref 17ef0 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 ix " counter \"" 17f00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17f10 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 [object invoke$
17f20 63 6f 75 6e 74 65 72 28 32 29 20 43 6f 75 6e 74  counter(2) Count
17f30 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75  erName] "\" valu
17f40 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20  e is " \..
17f50 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e        [object in
17f60 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 32 29  voke $counter(2) 17f70 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a RawValue] \n].. 17f80 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 17f90 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
17fa0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
17fb0 20 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65      "---- " $pre 17fc0 66 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 fix " counter \" 17fd0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 17fe0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 17ff0 24 63 6f 75 6e 74 65 72 28 33 29 20 43 6f 75 6e$counter(3) Coun
18000 74 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c  terName] "\" val
18010 75 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20  ue is " \..
18020 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69         [object i
18030 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 33  nvoke $counter(3 18040 29 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d ) RawValue] \n]. 18050 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 18060 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c .... proc col 18070 6c 65 63 74 47 61 72 62 61 67 65 20 7b 20 63 68 lectGarbage { ch 18080 61 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f annel {milliseco 18090 6e 64 73 20 31 30 30 30 7d 20 7b 71 75 69 65 74 nds 1000} {quiet 180a0 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 180b0 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 180c0 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d eObjectCommand]} 180d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 180e0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 180f0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 18100 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 invoke GC GetTot 18110 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a alMemory false.. 18120 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 } result 18130 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 18140 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
18150 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
18160 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
18170 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 18180 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 18190 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d "---- m 181a0 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 181b0 74 68 65 20 43 4c 52 20 62 65 66 6f 72 65 20 63 the CLR before c 181c0 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c ollection... " \ 181d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 181e0 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65$result " byte
181f0 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  s\n"]..
18200 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
18210 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
18220 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 18230 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 18240 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 18250 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 18260 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d d to get CLR mem 18270 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 ory usage, error 18280 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 18290 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
182a0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  t \n]..        }
182b0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
182c0 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
182d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
182e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
182f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
18300 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a  ############....
18310 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
18320 20 4e 4f 54 45 3a 20 52 65 70 65 61 74 65 64 6c   NOTE: Repeatedl
18330 79 20 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c  y attempt to col
18340 6c 65 63 74 20 67 61 72 62 61 67 65 20 75 6e 74  lect garbage unt
18350 69 6c 20 74 68 65 20 61 6c 6c 6f 74 74 65 64 20  il the allotted
18360 6e 75 6d 62 65 72 0d 0a 20 20 20 20 20 20 23 20  number..      #
18370 20 20 20 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65        of millise
18380 63 6f 6e 64 73 20 68 61 73 20 65 6c 61 70 73 65  conds has elapse
18390 64 2e 20 20 41 6c 77 61 79 73 20 61 74 74 65 6d  d.  Always attem
183a0 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61  pt to collect ga
183b0 72 62 61 67 65 0d 0a 20 20 20 20 20 20 23 20 20  rbage..      #
183c0 20 20 20 20 20 61 74 20 6c 65 61 73 74 20 6f 6e       at least on
183d0 63 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ce...      #..
183e0 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
183f0 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
18400 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
18410 20 20 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c     set start [cl
18420 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20  ock seconds]..
18430 20 20 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b        set stop [
18440 65 78 70 72 20 7b 24 73 74 61 72 74 20 2b 20 28  expr {$start + ( 18450 24 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20$milliseconds /
18460 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20  1000)}]....
18470 20 20 20 64 6f 20 7b 0d 0a 20 20 20 20 20 20 20     do {..
18480 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
18490 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
184a0 74 6f 20 66 6f 72 63 65 20 61 20 66 75 6c 6c 20  to force a full
184b0 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69  garbage collecti
184c0 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 6f 72 74 20  on now.  Report
184d0 61 6e 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23  any..          #
184e0 20 20 20 20 20 20 20 65 72 72 6f 72 20 74 68 61         error tha
184f0 74 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  t is encountered
18500 20 69 66 20 77 65 20 66 61 69 6c 2e 0d 0a 20 20   if we fail...
18510 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
18520 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
18530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  {..            o
18540 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC
18550 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 74  GetTotalMemory t
18560 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  rue..          }
18570 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
18580 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
18590 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 185a0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 185b0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 185c0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 185d0 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f full garbage co 185e0 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72 3a llection, error: 185f0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 18600 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f \n\t$erro
18610 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
18620 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
18630 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73  set now [clock s
18640 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20  econds]..
18650 20 7d 20 77 68 69 6c 65 20 7b 24 73 74 61 72 74   } while {$start 18660 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e 6f 77 <=$now && $now 18670 20 3c 20 24 73 74 6f 70 7d 0d 0a 20 20 20 20 20 <$stop}..
18680 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23   }....      ####
18690 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
186a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
186b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
186c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
186d0 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 69  #####....      i
186e0 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
186f0 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68  jectCommand]} th
18700 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
18710 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
18720 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
18730 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d  oke GC GetTotalM
18740 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20  emory false..
18750 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d       } result] =
18760 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
18770 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 18780 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 18790 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
187a0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
187b0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
187c0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f        "---- memo
187d0 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65  ry in use by the
187e0 20 43 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c 65   CLR after colle
187f0 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20  ction... " \..
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72                $r 18810 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 esult " bytes\n" 18820 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 18830 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 18840 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 18850 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
18860 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
18870 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
18880 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
18890 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20   get CLR memory
188a0 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20  usage, error: "
188b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
188c0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 188d0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 188e0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 188f0 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c . proc getSQL 18900 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 iteHandleCounts 18910 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 { channel {quiet 18920 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 18930 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c set result [l 18940 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ist].... if 18950 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 18960 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5b ectCommand] && [ 18970 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c haveConstraint \ 18980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18990 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 defineConstant.S 189a0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 189b0 65 2e 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d e.COUNT_HANDLE]} 189c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 189d0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 189e0 54 45 3a 20 41 64 64 20 65 61 63 68 20 63 72 69 TE: Add each cri 189f0 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 tical handle cou 18a00 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 nt to the result 18a10 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 ing list... 18a20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f #.. fo 18a30 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69 73 74 reach name [list 18a40 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75 6e 74 connectionCount 18a50 20 73 74 61 74 65 6d 65 6e 74 43 6f 75 6e 74 20 statementCount 18a60 62 61 63 6b 75 70 43 6f 75 6e 74 5d 20 7b 0d 0a backupCount] {.. 18a70 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 18a80 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 18a90 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 18aa0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 18ab0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 18ac0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 18ad0 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 ta.SQLite.Unsafe 18ae0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 24 6e NativeMethods$n
18af0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ame..          }
18b00 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68   value] == 0} th
18b10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
18b20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 18b30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 18b40 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
18b50 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
18b60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
18b70 20 20 20 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69       "---- criti
18b80 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74  cal handle count
18b90 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 69   \"" $name "\" i 18ba0 73 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a s "$value \n]..
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70  .            lap
18bd0 70 65 6e 64 20 72 65 73 75 6c 74 20 24 76 61 6c  pend result $val 18be0 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 ue.. } 18bf0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 18c00 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
18c10 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
18c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18c30 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
18c40 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 63   failed to get c
18c50 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63  ritical handle c
18c60 6f 75 6e 74 20 5c 22 22 20 5c 0d 0a 20 20 20 20  ount \"" \..
18c70 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d              $nam 18c80 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 e "\", error: " 18c90 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d 0d \n\t$value \n].
18ca0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
18cb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
18cc0 20 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65 74   elseif {!$quiet 18cd0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 18ce0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 18cf0 4f 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c 20 OTE: The actual 18d00 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 handle counts ar 18d10 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b e not available; 18d20 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 therefore, just 18d30 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 18d40 20 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 return an empt 18d50 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 y list... 18d60 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 18d70 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
18d80 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65   critical handle
18d90 20 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c 61   counts unavaila
18da0 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d  ble\n"..      }.
18db0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
18dc0 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a  $result.. }.. 18dd0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75 74 ... proc shut 18de0 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 downSQLite { cha 18df0 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 nnel {force fals 18e00 65 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d e} {quiet false} 18e10 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 18e20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b # NOTE: Mak 18e30 65 20 73 75 72 65 20 74 68 61 74 20 53 51 4c 69 e sure that SQLi 18e40 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 18e50 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 is completely sh 18e60 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 utdown. This.. 18e70 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is 18e80 75 73 65 64 20 62 79 20 74 65 73 74 73 20 74 68 used by tests th 18e90 61 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 at change config 18ea0 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 uration options 18eb0 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 and/or those.. 18ec0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 # that 18ed0 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 need to make su 18ee0 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e re logging is in 18ef0 69 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 itialized (i.e. 18f00 6a 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 just in case.. 18f10 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 18f20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 18f30 61 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c 69 ary was initiali 18f40 7a 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63 65 zed in the proce 18f50 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 ss prior to.. 18f60 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 # the S 18f70 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 QLiteLog class b 18f80 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 74 eing able to set 18f90 75 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 up its logging c 18fa0 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 allback)... 18fb0 20 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c # Normall 18fc0 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 6f y, this should o 18fd0 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 nly be performed 18fe0 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f if SQLite is lo 18ff0 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 aded and.. 19000 23 20 20 20 20 20 20 20 72 65 61 64 79 20 66 6f # ready fo 19010 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 r use by the tes 19020 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... 19030 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66 6f #.. if {$fo
19040 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65  rce || [isSQLite
19050 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Ready]} then {..
19060 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
19070 20 20 20 23 20 42 55 47 46 49 58 3a 20 4d 61 6b     # BUGFIX: Mak
19080 65 20 73 75 72 65 20 74 68 61 74 20 61 6e 79 20  e sure that any
19090 22 6c 65 61 6b 65 64 22 20 74 72 61 6e 73 61 63  "leaked" transac
190a0 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 63 6f 6e  tions and/or con
190b0 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  nections..
190c0 20 20 23 20 20 20 20 20 20 20 20 20 61 72 65 20    #         are
190d0 63 6c 65 61 6e 65 64 20 75 70 20 62 65 66 6f 72  cleaned up befor
190e0 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61  e calling the na
190f0 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75  tive shutdown fu
19100 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  nction...
19110 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65   #..        fore
19120 61 63 68 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ach transaction
19130 5b 69 6e 66 6f 20 74 72 61 6e 73 61 63 74 69 6f  [info transactio
19140 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ns] {..
19150 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74   if {[string mat
19160 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ch \..
19170 20 20 20 20 53 79 73 74 65 6d 23 44 61 74 61 23      System#Data#
19180 53 51 4c 69 74 65 23 53 51 4c 69 74 65 54 72 61  SQLite#SQLiteTra
19190 6e 73 61 63 74 69 6f 6e 23 2a 20 24 74 72 61 6e  nsaction#* $tran 191a0 73 61 63 74 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b saction]} then { 191b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 191c0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 191d0 20 20 20 20 20 20 20 20 20 20 73 71 6c 20 74 72 sql tr 191e0 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 ansaction rollba 191f0 63 6b 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 0d ck$transaction.
19200 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
19210 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  rror] == 0} then
19220 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
19230 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 19240 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 19250 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
19260 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
19270 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
19280 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72           "---- r
19290 6f 6c 6c 65 64 20 62 61 63 6b 20 6c 65 61 6b 65  olled back leake
192a0 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22  d transaction \"
192b0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
192c0 20 20 20 20 20 20 20 20 20 24 74 72 61 6e 73 61           $transa 192d0 63 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 20 ction \"\n].. 192e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 192f0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 19300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19310 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
19320 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19330 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 19340 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 19350 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 19360 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 19370 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 19380 6f 20 72 6f 6c 6c 62 61 63 6b 20 6c 65 61 6b 65 o rollback leake 19390 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 5c 22 d transaction \" 193a0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 193b0 20 20 20 20 20 20 20 20 20 24 74 72 61 6e 73 61$transa
193c0 63 74 69 6f 6e 20 22 5c 22 2c 20 65 72 72 6f 72  ction "\", error
193d0 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 193e0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 193f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 19400 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 19410 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 19420 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 foreach d 19430 62 20 5b 69 6e 66 6f 20 63 6f 6e 6e 65 63 74 69 b [info connecti 19440 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 ons] {.. 19450 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 if {[string ma 19460 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 tch \.. 19470 20 20 20 20 20 53 79 73 74 65 6d 23 44 61 74 61 System#Data 19480 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65 43 6f #SQLite#SQLiteCo 19490 6e 6e 65 63 74 69 6f 6e 23 2a 20 24 64 62 5d 7d nnection#*$db]}
194a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
194b0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
194c0 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20  {sql close $db} 194d0 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 error] == 0} the 194e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 194f0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
19500 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
19510 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 19520 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 19530 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 19540 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 19550 63 6c 6f 73 65 64 20 6c 65 61 6b 65 64 20 64 61 closed leaked da 19560 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 20 5c tabase \""$db \
19570 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
19580 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
19590 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
195a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
195b0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 195c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 195d0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
195e0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
195f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19600 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
19610 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65   failed to close
19620 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61 73 65   leaked database
19630 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
19640 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62 20              $db 19650 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "\", error: " \n 19660 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
19670 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19680 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
19690 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
196a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
196b0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55   #..        # BU
196c0 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 61 6c  GFIX: Before cal
196d0 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20  ling the native
196e0 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f  shutdown functio
196f0 6e 2c 20 6d 61 6b 65 20 73 75 72 65 20 62 6f 74  n, make sure bot
19700 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  h..        #
19710 20 20 20 20 20 6f 66 20 74 68 65 20 50 52 41 47       of the PRAG
19720 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 65 63  MA related direc
19730 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 20 66  tory names are f
19740 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  reed...        #
19750 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46  ..        checkF
19760 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72  orSQLiteDirector
19770 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 75  ies $channel tru 19780 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 e.... if 19790 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 197a0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 197b0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 197c0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 197d0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 197e0 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 197f0 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c ativeMethods sql 19800 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 ite3_shutdown.. 19810 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d } result] 19820 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 19830 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
19840 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
19850 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
19860 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 19870 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 19880 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 "---- ca 19890 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 ll sqlite3_shutd 198a0 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 own()... ok: "$
198b0 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
198c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
198d0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
198e0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 198f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 19900 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
19910 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
19920 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
19930 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73      "---- call s
19940 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28  qlite3_shutdown(
19950 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e  )... error: " \n
19960 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 19970 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 19980 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 19990 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 199a0 72 6f 63 20 72 65 70 6f 72 74 53 51 4c 69 74 65 roc reportSQLite 199b0 52 65 73 6f 75 72 63 65 73 20 7b 0d 0a 20 20 20 Resources {.. 199c0 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e 65 6c channel 199d0 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7b {quiet false} { 199e0 72 65 73 65 74 20 74 72 75 65 7d 20 7b 63 6f 6c reset true} {col 199f0 6c 65 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a lect true} } {.. 19a00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 19a10 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c 61 NOTE: If availa 19a20 62 6c 65 2c 20 72 65 70 6f 72 74 20 6f 6e 20 28 ble, report on ( 19a30 61 6e 64 20 70 6f 73 73 69 62 6c 79 20 72 65 73 and possibly res 19a40 65 74 29 20 74 68 65 20 72 75 6e 74 69 6d 65 0d et) the runtime. 19a50 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 19a60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 74 61 onfiguration sta 19a70 74 69 73 74 69 63 73 2e 0d 0a 20 20 20 20 20 20 tistics... 19a80 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 #.. if {[ha 19a90 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo 19aa0 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 mmand] && \.. 19ab0 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 [haveCons 19ac0 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 traint buildConf 19ad0 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75 67 5d iguration.Debug] 19ae0 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 && [catch {.. 19af0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 19b00 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 19b10 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a ublic -alias \.. 19b20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 19b30 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U 19b40 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho 19b50 64 73 20 73 65 74 74 69 6e 67 52 65 61 64 43 6f ds settingReadCo 19b60 75 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 73 65 unts.. } se 19b70 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 5d ttingReadCounts] 19b80 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 19b90 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 set nameC 19ba0 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 52 65 ount [$settingRe
19bb0 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d  adCounts Count].
19bc0 0a 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c  .        set val
19bd0 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20  ueCount 0....
19be0 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65       object fore
19bf0 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20  ach -alias pair
19c00 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e  $settingReadCoun 19c10 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ts {.. 19c20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 incr valueCount 19c30 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d [$pair Value]...
19c40 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
19c50 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 19c60 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 19c70 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
19c80 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
19c90 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
19ca0 73 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61  setting \"" [$pa 19cb0 69 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 ir Key] "\" was 19cc0 72 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 read " \.. 19cd0 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 [$pair
19ce0 20 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 73 5c   Value] " times\
19cf0 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
19d00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
19d10 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65         if {$rese 19d20 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 19d30 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 19d40 7b 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 {$settingReadCou
19d50 6e 74 73 20 43 6c 65 61 72 7d 20 65 72 72 6f 72  nts Clear} error
19d60 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
19d70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
19d80 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 19d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 19da0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
19db0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
19dd0 2d 2d 2d 2d 20 72 65 73 65 74 20 73 65 74 74 69  ---- reset setti
19de0 6e 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f  ng statistics fo
19df0 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 22  r the previous "
19e00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
19e10 20 20 20 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74        $nameCount 19e20 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 " names and "$
19e30 76 61 6c 75 65 43 6f 75 6e 74 20 22 20 76 61 6c  valueCount " val
19e40 75 65 73 20 72 65 61 64 5c 6e 22 5d 0d 0a 20 20  ues read\n"]..
19e50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
19e60 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
19e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
19e80 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 19e90 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 19ea0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 19eb0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 19ec0 20 74 6f 20 72 65 73 65 74 20 73 65 74 74 69 6e to reset settin 19ed0 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 g statistics for 19ee0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 19ef0 20 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69 "the previ 19f00 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 ous "$nameCount
19f10 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24   " names and " $19f20 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 valueCount \.. 19f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 " 19f40 76 61 6c 75 65 73 20 72 65 61 64 2c 20 65 72 72 values read, err 19f50 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
19f60 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
19f70 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
19f80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
19f90 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f  if {[haveSQLiteO
19fa0 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26  bjectCommand] &&
19fb0 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74   [haveConstraint
19fc0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
19fd0 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74    defineConstant
19fe0 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
19ff0 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 49 52 54  ite.INTEROP_VIRT
1a000 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 20 5c 0d  UAL_TABLE] && \.
1a010 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65  .          [have
1a020 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20  Constraint \..
1a030 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69              defi
1a040 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
1a050 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 52  m.Data.SQLite.TR
1a060 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53  ACK_MEMORY_BYTES
1a070 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1a080 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1a090 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1a0a0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1a0b0 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d   "---- current m
1a0c0 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20  emory in use by
1a0d0 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20  SQLiteMemory...
1a0e0 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  "..        }....
1a0f0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1a100 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1a110 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
1a120 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
1a130 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1a140 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1a150 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79  ite.SQLiteMemory
1a160 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d   bytesAllocated.
1a170 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72  .        } memor
1a180 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  y] == 0} then {.
1a190 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
1a1a0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1a1c0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1a1d0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 1a1e0 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 1a1f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1a200 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1a210 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 set memory 1a220 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 unknown.... 1a230 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1a240 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1a250 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1a260 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1a270 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20$memory \n]..
1a280 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1a290 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1a2a0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1a2b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t 1a2c0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
1a2d0 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f  --- maximum memo
1a2e0 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c  ry in use by SQL
1a2f0 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a  iteMemory... "..
1a300 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1a310 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1a320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
1a330 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
1a340 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
1a350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
1a360 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1a370 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 6d 61  .SQLiteMemory ma
1a380 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61  ximumBytesAlloca
1a390 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d  ted..        } m
1a3a0 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
1a3b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
1a3c0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 1a3d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1a3e0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1a3f0 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 1a400 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a ry " bytes\n"].. 1a410 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1a420 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1a430 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d set mem 1a440 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 ory unknown.... 1a450 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1a460 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1a470 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1a480 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1a490 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
1a4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1a4b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1a4c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  }....      if {!
1a4d0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1a4e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1a4f0 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72  hannel "---- cur
1a500 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75  rent memory in u
1a510 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20  se by SQLite...
1a520 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  "..      }....
1a530 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
1a540 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
1a550 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1a560 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
1a570 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
1a580 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
1a590 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
1a5b0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
1a5c0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1a5d0 64 73 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds sqlite3_memor
1a5e0 79 5f 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20  y_used..
1a5f0 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20  } memory] == 0}
1a600 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1a610 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1a620 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1a630 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1a640 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 1a650 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 emory " bytes\n" 1a660 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 1a670 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1a680 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 1a690 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1a6a0 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 Maybe the SQLit 1a6b0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 e core library i 1a6c0 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a s unavailable?.. 1a6d0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1a6e0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 1a6f0 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 y unknown.... 1a700 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1a710 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1a720 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1a730 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1a740 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
1a750 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1a760 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
1a770 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1a780 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61  set memory unava
1a790 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20  ilable....
1a7a0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1a7b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1a7c0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1a7d0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 1a7e0 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 1a7f0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 1a800 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result 1a810 24 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a$memory; # NOTE:
1a820 20 52 65 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69   Return memory i
1a830 6e 2d 75 73 65 20 74 6f 20 6f 75 72 20 63 61 6c  n-use to our cal
1a840 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ler.....      if
1a850 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1a860 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 1a870 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
1a880 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69  maximum memory i
1a890 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e  n use by SQLite.
1a8a0 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  .. "..      }...
1a8b0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
1a8c0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
1a8d0 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  and]} then {..
1a8e0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1a8f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
1a900 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
1a910 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
1a920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
1a930 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1a940 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
1a950 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20  thods \..
1a960 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d         sqlite3_m
1a970 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 20  emory_highwater
1a980 30 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d  0..        } mem
1a990 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
1a9a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
1a9b0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1a9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1a9d0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1a9e0 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 1a9f0 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 " bytes\n"].. 1aa00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1aa10 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1aa20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1aa30 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 # NOTE: Mayb 1aa40 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 e the SQLite cor 1aa50 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 e library is una 1aa60 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 vailable?.. 1aa70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1aa80 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b set memory unk 1aa90 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nown.... 1aaa0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1aab0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1aac0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1aad0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
1aae0 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
1aaf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1ab00 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
1ab10 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d  {..        set m
1ab20 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c  emory unavailabl
1ab30 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e....        if
1ab40 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 1ab50 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 1ab60 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1ab70 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c  ndArgs $memory \ 1ab80 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 n].. }.. 1ab90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1aba0 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 if {$collect} th
1abb0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f  en {..        co
1abc0 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 63 68  llectGarbage $ch 1abd0 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a annel.. }.. 1abe0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
1abf0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1ac00 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1ac10 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e nel "---- curren 1ac20 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 t memory in use 1ac30 62 79 20 74 68 65 20 43 4c 52 2e 2e 2e 20 22 0d by the CLR... ". 1ac40 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1ac50 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 1ac60 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d eObjectCommand]} 1ac70 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1ac80 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1ac90 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 1aca0 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 invoke GC GetTot 1acb0 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a alMemory false.. 1acc0 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 } memory 1acd0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1ace0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 1acf0 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 tring is integer 1ad00 20 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 -strict$memory
1ad10 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1ad20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 1ad30 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 1ad40 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1ad50 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1ad60 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62  Args $memory " b 1ad70 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 ytes\n"].. 1ad80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1ad90 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1ada0 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d set mem 1adb0 6f 72 79 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 ory invalid.... 1adc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 1add0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
1adf0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1ae00 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
1ae10 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1ae20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
1ae30 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
1ae40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
1ae50 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
1ae60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1ae70 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1ae80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1ae90 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1aea0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 1aeb0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 1aec0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 1aed0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1aee0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 1aef0 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d y unavailable... 1af00 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
1af10 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1af20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1af30 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1af40 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
1af50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1af60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
1af70 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  rn $result.. 1af80 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 1af90 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 heckForSQLiteDir 1afa0 65 63 74 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e ectories { chann 1afb0 65 6c 20 7b 72 65 73 65 74 20 66 61 6c 73 65 7d el {reset false} 1afc0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 1afd0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 1afe0 63 6b 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 ck if the sqlite 1aff0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 1b000 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 ctory function i 1b010 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 s available... 1b020 20 20 20 20 23 0d 0a 20 20 20 20 20 20 74 70 75 #.. tpu 1b030 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 ts$channel \..
1b040 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
1b050 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 75 6e 63  hecking for func
1b060 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f 77 69 6e  tion sqlite3_win
1b070 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79  32_set_directory
1b080 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23  ... "....      #
1b090 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
1b0a0 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 74 68 65  This call to the
1b0b0 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
1b0c0 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e  et_directory fun
1b0d0 63 74 69 6f 6e 20 75 73 65 73 20 74 68 65 0d 0a  ction uses the..
1b0e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
1b0f0 76 61 6c 69 64 20 76 61 6c 75 65 20 30 20 66 6f  valid value 0 fo
1b100 72 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75  r the first argu
1b110 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 64 65  ment.  This code
1b120 20 69 73 20 64 65 73 69 67 6e 65 64 0d 0a 20 20   is designed..
1b130 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 63      #       to c
1b140 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 6e 67 20  heck if calling
1b150 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c  the function wil
1b160 6c 20 72 61 69 73 65 20 61 6e 20 65 78 63 65 70  l raise an excep
1b170 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20  tion (i.e...
1b180 20 20 23 20 20 20 20 20 20 20 74 68 65 20 61 63    #       the ac
1b190 74 75 61 6c 20 72 65 73 75 6c 74 20 6f 66 20 74  tual result of t
1b1a0 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73  he function does
1b1b0 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 73 20 6c   not matter as l
1b1c0 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 20 20 20  ong as no..
1b1d0 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f   #       directo
1b1e0 72 79 20 69 73 20 63 68 61 6e 67 65 64 29 2e 0d  ry is changed)..
1b1f0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1b200 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1b210 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
1b220 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
1b230 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
1b240 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
1b250 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
1b260 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20  tiveMethods \..
1b270 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
1b280 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
1b290 65 63 74 6f 72 79 20 30 20 6e 75 6c 6c 0d 0a 20  ectory 0 null..
1b2a0 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68       }] == 0} th
1b2b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
1b2c0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1b2d0 20 43 61 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c   Calling the sql
1b2e0 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
1b2f0 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f  irectory functio
1b300 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20  n does not..
1b310 20 20 20 20 23 20 20 20 20 20 20 20 63 61 75 73      #       caus
1b320 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20  e an exception;
1b330 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 6d 75  therefore, it mu
1b340 73 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20  st be available
1b350 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  (i.e...        #
1b360 20 20 20 20 20 20 20 65 76 65 6e 20 74 68 6f 75         even thou
1b370 67 68 20 69 74 20 73 68 6f 75 6c 64 20 72 65 74  gh it should ret
1b380 75 72 6e 20 61 20 66 61 69 6c 75 72 65 20 72 65  urn a failure re
1b390 74 75 72 6e 20 63 6f 64 65 20 69 6e 20 74 68 69  turn code in thi
1b3a0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
1b3b0 20 20 20 63 61 73 65 29 2e 0d 0a 20 20 20 20 20     case)...
1b3c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64     #..        ad
1b3d0 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 69  dConstraint sqli
1b3e0 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
1b3f0 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20  rectory....
1b400 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1b410 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 l yes\n.... 1b420 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1b430 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 NOTE: Does our c 1b440 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 aller want to re 1b450 73 65 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 set the director 1b460 69 65 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d ies?.. #. 1b470 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 . if {$re
1b480 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  set} then {..
1b490 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1b4a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20      # NOTE: Now
1b4b0 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61  make sure the da
1b4c0 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f  tabase and tempo
1b4d0 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73  rary directories
1b4e0 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20   are..
1b4f0 23 20 20 20 20 20 20 20 72 65 73 65 74 20 74 68  #       reset th
1b500 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75  eir default valu
1b510 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64  es, which should
1b520 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74   be null for bot
1b530 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  h...          #
1b540 20 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20        Since the
1b550 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
1b560 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63  t_directory func
1b570 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c  tion is availabl
1b580 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  e,..          #
1b590 20 20 20 20 20 20 75 73 65 20 69 74 2e 0d 0a 20        use it...
1b5a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1b5b0 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69        for {set i
1b5c0 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20  ndex 1} {$index 1b5d0 3c 20 33 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 < 3} {incr index 1b5e0 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } {.. 1b5f0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 1b600 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a obj 1b610 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 1b620 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 1b630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1b640 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 1b650 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 Lite.UnsafeNativ 1b660 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 eMethods \.. 1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 sq 1b680 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ 1b690 64 69 72 65 63 74 6f 72 79 20 24 69 6e 64 65 78 directory$index
1b6a0 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20   null..
1b6b0 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20     } result] ==
1b6c0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
1b6d0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1b6e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1b6f0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1b700 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 1b710 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 all sqlite3_win3 1b720 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 2_set_directory( 1b730 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 "$index \..
1b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c                ",
1b750 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 20   null)... ok: "
1b760 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 1b770 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 1b780 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1b790 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1b7a0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b7c0 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69   "---- call sqli
1b7d0 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
1b7e0 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78  rectory(" $index 1b7f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b800 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e ", null).. 1b810 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 . error: " \n\t 1b820 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
1b830 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1b840 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1b850 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
1b860 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
1b870 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. 1b880 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1b890 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f # NOTE: Do 1b8a0 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 es our caller wa 1b8b0 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 nt to reset the 1b8c0 64 69 72 65 63 74 6f 72 69 65 73 3f 20 20 54 68 directories? Th 1b8d0 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 20 20 is can only.. 1b8e0 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 # be 1b8f0 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c performed if SQL 1b900 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e ite is loaded an 1b910 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 d ready for use 1b920 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 by the test.. 1b930 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75 69 # sui 1b940 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a te... #.. 1b950 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 if {$res
1b960 65 74 20 26 26 20 5b 69 73 53 51 4c 69 74 65 52  et && [isSQLiteR
1b970 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  eady]} then {..
1b980 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1b990 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f        # NOTE: No
1b9a0 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20  w make sure the
1b9b0 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d  database and tem
1b9c0 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69  porary directori
1b9d0 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20  es are..
1b9e0 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74 20    #       reset
1b9f0 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61  their default va
1ba00 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75  lues, which shou
1ba10 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62  ld be null for b
1ba20 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  oth...
1ba30 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 68  #       Since th
1ba40 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  e sqlite3_win32_
1ba50 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75  set_directory fu
1ba60 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d  nction does not.
1ba70 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
1ba80 20 20 20 61 70 70 65 61 72 20 74 6f 20 62 65 20     appear to be
1ba90 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 65 20 74  available, use t
1baa0 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 50 52  he associated PR
1bab0 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a 20  AGMA commands..
1bac0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1bad0 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20   instead...
1bae0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1baf0 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 63 74    foreach direct
1bb00 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73  ory [list data_s
1bb10 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74  tore_directory t
1bb20 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
1bb30 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ory] {..
1bb40 20 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70      set sql [app
1bb50 65 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41 20  endArgs "PRAGMA
1bb60 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 20 3d  " $directory " = 1bb70 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 20 20 \"\";"].... 1bb80 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 1bb90 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 24 ch {executeSql$
1bba0 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20  sql} result] ==
1bbb0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
1bbc0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1bbd0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1bbe0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1bbf0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 "---- e 1bc00 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 xecute PRAGMA " 1bc10 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20$directory "...
1bc20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ok: \"" \..
1bc30 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65               $re 1bc40 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 sult \"\n].. 1bc50 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1bc60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1bc70 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1bc80 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bca0 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52  "---- execute PR
1bcb0 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72  AGMA " $director 1bcc0 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 y "... error: " 1bcd0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1bce0 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
1bcf0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
1bd00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1bd10 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
1bd20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
1bd30 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
1bd40 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 74 68  Finally, show th
1bd50 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20  e current value
1bd60 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database
1bd70 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20  and temporary..
1bd80 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72       #       dir
1bd90 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69 73 20  ectories.  This
1bda0 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65 72 66  can only be perf
1bdb0 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20  ormed if SQLite
1bdc0 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20  is loaded..
1bdd0 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 61   #       and rea
1bde0 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  dy for use by th
1bdf0 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
1be00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
1be10 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79   {[isSQLiteReady
1be20 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1be30 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 63     foreach direc
1be40 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f  tory [list data_
1be50 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory
1be60 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
1be70 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20  tory] {..
1be80 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1be90 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d l [appendArgs "- 1bea0 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 20 24 --- checking "$
1beb0 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 22  directory "... "
1bec0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ]....          s
1bed0 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72  et sql [appendAr
1bee0 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69  gs "PRAGMA " $di 1bef0 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 rectory \;].... 1bf00 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 1bf10 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 tch {executeSql 1bf20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 65 73$sql scalar} res
1bf30 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ult] == 0} then
1bf40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
1bf50 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 1bf60 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a 20 5c ppendArgs "ok: \ 1bf70 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d ""$result \"\n]
1bf80 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
1bf90 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
1bfa0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 1bfb0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 65 72 [appendArgs "er 1bfc0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 ror: " \n\t$res
1bfd0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
1bfe0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1bff0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
1c000 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c 6f 61  ....    proc loa
1c010 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69  dSQLiteTestSetti
1c020 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73  ngs { channel {s
1c030 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69 65 74  uffix ""} {quiet
1c040 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
1c050 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
1c060 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69 6e 67  TE: Skip loading
1c070 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 69 66   the settings if
1c080 20 74 68 65 69 72 20 75 73 61 67 65 20 68 61 73   their usage has
1c090 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 2e 0d   been disabled..
1c0a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1c0b0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
1c0c0 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 65 73  s ::no(sqliteTes
1c0d0 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74 68 65  tSettings)]} the
1c0e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
1c0f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1c100 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65 72 2d  Load custom per-
1c110 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d  user and/or per-
1c120 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 6e  host test settin
1c130 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20  gs now...
1c140 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
1c150 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
1c160 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72  cl_platform(user
1c170 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
1c180 20 20 20 20 20 20 73 65 74 20 75 73 65 72 53 65        set userSe
1c190 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b  ttingsFileName [
1c1a0 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f  file join [getCo
1c1b0 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c  mmonDirectory] \
1c1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1c1d0 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74  [appendArgs sett
1c1e0 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24  ings $suffix .$
1c1f0 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75  ::tcl_platform(u
1c200 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d  ser) .eagle]]...
1c210 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
1c220 66 69 6c 65 20 65 78 69 73 74 73 20 24 75 73 65  file exists $use 1c230 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 1c240 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 1c250 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1c260 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1c270 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1c280 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1c290 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1c2a0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1c2b0 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 loading per-use 1c2c0 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 r test settings 1c2d0 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75$u
1c2f0 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  serSettingsFileN
1c300 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20  ame \"...\n]..
1c310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1c320 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
1c330 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1c340 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31         uplevel 1
1c350 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 75   [list source $u 1c360 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e serSettingsFileN 1c370 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ame].. 1c380 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e } error]} then 1c390 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c3a0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
1c3b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1c3c0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1c3d0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1c3e0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1c3f0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1c400 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1c410 6f 20 6c 6f 61 64 20 70 65 72 2d 75 73 65 72 20 o load per-user 1c420 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 settings file \" 1c430 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1c440 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65$userSe
1c450 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22  ttingsFileName "
1c460 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  \", error: " \n\
1c470 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 1c480 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1c490 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1c4a0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1c4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1c4c0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1c4d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1c4e0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 1c4f0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c510 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c "---- skipped l 1c520 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72 20 oading per-user 1c530 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 test settings fi 1c540 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 le \"" \.. 1c550 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65$use
1c560 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  rSettingsFileNam
1c570 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e  e "\", it does n
1c580 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
1c590 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1c5a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1c5b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
1c5c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c5d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c5e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c5f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1c600 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20  ######....
1c610 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
1c620 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  ts ::tcl_platfor
1c630 6d 28 68 6f 73 74 29 5d 7d 20 74 68 65 6e 20 7b  m(host)]} then {
1c640 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
1c650 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65  hostSettingsFile
1c660 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  Name [file join
1c670 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74  [getCommonDirect
1c680 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  ory] \..
1c690 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67        [appendArg
1c6a0 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 66  s settings $suff 1c6b0 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 ix .$::tcl_plat
1c6c0 66 6f 72 6d 28 68 6f 73 74 29 20 2e 65 61 67 6c  form(host) .eagl
1c6d0 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e]]....
1c6e0 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
1c6f0 73 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46  s $hostSettingsF 1c700 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 1c710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1c720 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
1c730 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1c740 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 1c750 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c770 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 "---- loading p 1c780 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 er-host test set 1c790 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c tings file \"" \ 1c7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c7b0 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67$hostSetting
1c7c0 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c  sFileName \"...\
1c7d0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
1c7e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
1c7f0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 75 70 6c               upl
1c810 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75  evel 1 [list sou
1c820 72 63 65 20 24 68 6f 73 74 53 65 74 74 69 6e 67  rce $hostSetting 1c830 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 sFileName].. 1c840 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d } error] 1c850 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1c860 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1c870 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1c880 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
1c890 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1c8a0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1c8c0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 1c8d0 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 iled to load per 1c8e0 2d 68 6f 73 74 20 73 65 74 74 69 6e 67 73 20 66 -host settings f 1c8f0 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ile \"" \.. 1c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
1c910 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65  hostSettingsFile
1c920 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a  Name "\", error:
1c930 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ 1c940 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 1c950 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 1c960 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 }.. } 1c970 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1c980 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
1c990 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1c9a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1c9b0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1c9c0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1c9d0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski 1c9e0 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 pped loading per 1c9f0 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 -host test setti 1ca00 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a ngs file \"" \.. 1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ca20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46$hostSettingsF
1ca30 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20  ileName "\", it
1ca40 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e  does not exist\n
1ca50 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
1ca60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
1ca70 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1ca80 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
1ca90 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65    proc runSQLite
1caa0 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b 7d 20  TestPrologue {}
1cab0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
1cac0 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72    # NOTE: Skip r
1cad0 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f  unning our custo
1cae0 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 20 74 68  m prologue if th
1caf0 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62  e main one has b
1cb00 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  een..      #
1cb10 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20     skipped...
1cb20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1cb30 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
1cb40 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61 67 6c  no(prologue.eagl
1cb50 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e)]} then {..
1cb60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1cb70 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65  # NOTE: Load the
1cb80 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74 72 61   "before-constra
1cb90 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72  ints" custom per
1cba0 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72  -user and/or per
1cbb0 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23  -host..        #
1cbc0 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74 74         test sett
1cbd0 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
1cbe0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70     #..        up
1cbf0 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f  level 1 [list lo
1cc00 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74  adSQLiteTestSett
1cc10 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ings $::test_cha 1cc20 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d 0a 0d nnel .before]... 1cc30 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1cc40 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 1cc50 6b 20 69 66 20 74 68 65 20 5b 6f 62 6a 65 63 74 k if the [object 1cc60 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20 61 76 61 ] command is ava 1cc70 69 6c 61 62 6c 65 3b 20 69 66 20 6e 6f 74 2c 20 ilable; if not, 1cc80 61 64 64 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 add some.. 1cc90 20 20 23 20 20 20 20 20 20 20 73 68 69 6d 73 20 # shims 1cca0 74 6f 20 6d 61 6b 65 20 74 68 65 20 74 65 73 74 to make the test 1ccb0 20 73 75 69 74 65 20 72 75 6e 20 73 6d 6f 6f 74 suite run smoot 1ccc0 68 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d her... #. 1ccd0 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f . checkFo 1cce0 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d rSQLiteObjectCom 1ccf0 6d 61 6e 64 20 24 3a 3a 74 65 73 74 5f 63 68 61 mand$::test_cha
1cd00 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nnel....
1cd10 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1cd20 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65  E: Determine the
1cd30 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 6e 61   names of the na
1cd40 74 69 76 65 20 70 6c 61 74 66 6f 72 6d 20 61 6e  tive platform an
1cd50 64 20 61 72 63 68 69 74 65 63 74 75 72 65 2e 0d  d architecture..
1cd60 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1cd70 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d      set platform
1cd80 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f   [getBuildPlatfo
1cd90 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20  rm true]..
1cda0 20 20 73 65 74 20 61 72 63 68 69 74 65 63 74 75    set architectu
1cdb0 72 65 20 5b 61 72 63 68 69 74 65 63 74 75 72 65  re [architecture
1cdc0 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61  ForPlatform $pla 1cdd0 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 tform].... 1cde0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1cdf0 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 70 6c OTE: Show the pl 1ce00 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69 atform and archi 1ce10 74 65 63 74 75 72 65 20 75 73 65 64 20 74 6f 20 tecture used to 1ce20 68 65 6c 70 20 6c 6f 63 61 74 65 20 74 68 65 0d help locate the. 1ce30 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1ce40 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 native build fi 1ce50 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d les... #. 1ce60 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
1ce70 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1ce80 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1ce90 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1cea0 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 6c 6f 63  platform for loc
1ceb0 61 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69  ating native bui
1cec0 6c 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20  ld files is \""
1ced0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24  \..            $1cee0 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a platform \"\n].. 1cef0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 1cf00 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1cf10 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1cf20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1cf30 20 61 72 63 68 69 74 65 63 74 75 72 65 20 66 6f   architecture fo
1cf40 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 76  r locating nativ
1cf50 65 20 62 75 69 6c 64 20 66 69 6c 65 73 20 69 73  e build files is
1cf60 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
1cf70 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75 72      $architectur 1cf80 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 e \"\n].... 1cf90 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1cfa0 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 NOTE: Build a li 1cfb0 73 74 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 74 st of configurat 1cfc0 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77 ion files that w 1cfd0 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 e handle... 1cfe0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se 1cff0 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 t configFileName 1d000 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 1d010 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 1d020 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f ta.SQLite.dll.co 1d030 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 nfig].... 1d040 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1d050 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74 TE: Build a list 1d060 20 6f 66 20 61 75 78 69 6c 69 61 72 79 20 4d 61 of auxiliary Ma 1d070 6e 61 67 65 64 20 44 65 62 75 67 67 69 6e 67 20 naged Debugging 1d080 41 73 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29 Assistants (MDA) 1d090 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1d0a0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 configuration 1d0b0 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 files that we ha 1d0c0 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 ndle... # 1d0d0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 64 .. set md 1d0e0 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 aConfigFileNames 1d0f0 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. 1d100 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c EagleShell 1d110 33 32 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 32.exe.mda.confi 1d120 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e g Installer.exe. 1d130 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 mda.config \.. 1d140 20 20 20 20 20 20 20 20 20 20 74 65 73 74 2e 65 test.e 1d150 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65 xe.mda.config te 1d160 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 stlinq.exe.mda.c 1d170 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20 onfig \.. 1d180 20 20 20 20 20 74 65 73 74 65 66 36 2e 65 78 65 testef6.exe 1d190 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a .mda.config].... 1d1a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1d1b0 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 1d1c0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 65 78 74 the list of ext 1d1d0 65 72 6e 61 6c 20 66 69 6c 65 73 20 74 68 61 74 ernal files that 1d1e0 20 77 65 20 68 61 6e 64 6c 65 2e 20 20 53 6f 6d we handle. Som 1d1f0 65 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 23 20 e of.. # 1d200 20 20 20 20 20 20 74 68 65 73 65 20 66 69 6c 65 these file 1d210 73 20 6d 61 79 20 62 65 20 6e 61 74 69 76 65 20 s may be native 1d220 61 6e 64 2f 6f 72 20 6d 61 6e 61 67 65 64 20 61 and/or managed a 1d230 73 73 65 6d 62 6c 69 65 73 20 74 68 61 74 20 61 ssemblies that a 1d240 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 re.. # 1d250 20 20 20 20 72 65 71 75 69 72 65 64 20 74 6f 20 required to 1d260 70 65 72 66 6f 72 6d 20 76 61 72 69 6f 75 73 20 perform various 1d270 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 tests... 1d280 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 #.. set e 1d290 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 xternalFileNames 1d2a0 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. 1d2b0 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e [file join 1d2c0 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b EntityFramework 1d2d0 20 6c 69 62 20 5b 73 74 72 69 6e 67 20 6d 61 70 lib [string map 1d2e0 20 5b 6c 69 73 74 20 46 78 20 22 22 5d 20 5b 73 [list Fx ""] [s 1d2f0 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20 20 20 20 tring \.. 1d300 20 20 20 20 20 6d 61 70 20 5b 6c 69 73 74 20 6e map [list n 1d310 65 74 46 78 34 35 31 20 6e 65 74 46 78 34 35 20 etFx451 netFx45 1d320 6e 65 74 46 78 34 35 32 20 6e 65 74 46 78 34 35 netFx452 netFx45 1d330 20 6e 65 74 46 78 34 36 20 6e 65 74 46 78 34 35 netFx46 netFx45 1d340 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d350 6e 65 74 46 78 34 36 31 20 6e 65 74 46 78 34 35 netFx461 netFx45 1d360 5d 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 78 ] [getBuildNetFx 1d370 5d 5d 5d 20 45 6e 74 69 74 79 46 72 61 6d 65 77 ]]] EntityFramew 1d380 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 ork.dll]].... 1d390 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1d3a0 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th 1d3b0 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 e list of native 1d3c0 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 assembly files 1d3d0 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 that we handle. 1d3e0 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 The.. # 1d3f0 20 20 20 20 20 20 72 65 61 73 6f 6e 20 74 68 65 reason the 1d400 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 "System.Data.SQ 1d410 4c 69 74 65 2e 64 6c 6c 22 20 66 69 6c 65 20 69 Lite.dll" file i 1d420 73 20 69 6e 63 6c 75 64 65 64 20 68 65 72 65 20 s included here 1d430 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 is.. # 1d440 20 20 20 20 62 65 63 61 75 73 65 20 69 74 20 63 because it c 1d450 6f 75 6c 64 20 62 65 20 74 68 65 20 6d 69 78 65 ould be the mixe 1d460 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e d-mode assembly. 1d470 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1d480 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65 46 set nativeF 1d490 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 43 6f 72 ileNames [getCor 1d4a0 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 73 eBinaryFileNames 1d4b0 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20 20 20 20 6c Only].. l 1d4c0 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46 69 6c append nativeFil 1d4d0 65 4e 61 6d 65 73 20 53 51 4c 69 74 65 2e 49 6e eNames SQLite.In 1d4e0 74 65 72 6f 70 2e 64 6c 6c 20 53 79 73 74 65 6d terop.dll System 1d4f0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 1d500 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 1d510 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 # NOTE: B 1d520 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 uild the list of 1d530 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c managed assembl 1d540 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 y files that we 1d550 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 handle... 1d560 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set 1d570 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 managedFileNames 1d580 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. 1d590 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 1d5a0 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 53 79 73 a.SQLite.dll Sys 1d5b0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 1d5c0 4c 69 6e 71 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 Linq.dll \.. 1d5d0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 1d5e0 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 ata.SQLite.EF6.d 1d5f0 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 ll].... # 1d600 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1d610 3a 20 52 65 6d 6f 76 65 20 61 6e 79 20 74 65 73 : Remove any tes 1d620 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 t constraints th 1d630 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 at refer to the 1d640 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72 0d 0a 20 native and/or.. 1d650 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d # m 1d660 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 anaged assembly 1d670 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 files that we ha 1d680 6e 64 6c 65 20 75 6e 6c 65 73 73 20 66 6f 72 62 ndle unless forb 1d690 69 64 64 65 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 idden from.. 1d6a0 20 20 20 20 23 20 20 20 20 20 20 20 64 6f 69 6e # doin 1d6b0 67 20 73 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 g so... # 1d6c0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 1d6d0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 1d6e0 28 73 71 6c 69 74 65 52 65 6d 6f 76 65 43 6f 6e (sqliteRemoveCon 1d6f0 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e straints)]} then 1d700 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f {.. fo 1d710 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
1d720 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20  configFileNames
1d730 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
1d740 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  emoveConstraint
1d750 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
1d760 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20  _ $fileName].. 1d770 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1d780 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 1d790 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 ileName$mdaConf
1d7a0 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  igFileNames {..
1d7b0 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76             remov
1d7c0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
1d7d0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66  endArgs file_ $f 1d7e0 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 ileName].. 1d7f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1d800 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 1d810 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c ame$externalFil
1d820 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
1d830 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73        removeCons
1d840 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
1d850 67 73 20 66 69 6c 65 5f 20 5b 66 69 6c 65 20 74  gs file_ [file t
1d860 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d  ail $fileName]]. 1d870 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 1d880 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 1d890 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 h fileName$nati
1d8a0 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
1d8b0 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76             remov
1d8c0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
1d8d0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66  endArgs file_ $f 1d8e0 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 ileName].. 1d8f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1d900 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 1d910 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 ame$managedFile
1d920 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
1d930 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74       removeConst
1d940 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
1d950 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d  s file_ $fileNam 1d960 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d e].. }. 1d970 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 1d980 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1d990 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c # NOTE: Skip al 1d9a0 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 l System.Data.SQ 1d9b0 4c 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c Lite related fil 1d9c0 65 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 e handling (dele 1d9d0 74 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 ting,.. # 1d9e0 20 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 copying, 1d9f0 61 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 and loading) if 1da00 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 instructed... 1da10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1da20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 1da30 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c s ::no(sqliteFil 1da40 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 1da50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1da60 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 1da70 70 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 p trying to dele 1da80 74 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 te any files if 1da90 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 instructed... 1daa0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1dab0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 1dac0 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 xists ::no(delet 1dad0 65 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 eSqliteFiles)]} 1dae0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1daf0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 1db00 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 xists ::no(delet 1db10 65 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c eSqliteConfigFil 1db20 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 1db30 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 1db40 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f ach fileName$co
1db50 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  nfigFileNames {.
1db60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1db70 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79   tryDeleteBinary
1db80 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  File $fileName.. 1db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 1dba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 1dbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1dbc0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1dbd0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 1dbe0 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d eExternalFiles)] 1dbf0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1dc00 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1dc10 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e fileName$mdaCon
1dc20 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  figFileNames {..
1dc30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1dc40 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69  tryDeleteBuildFi
1dc50 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  le $fileName.. 1dc60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 1dc70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 . f 1dc80 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 1dc90 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d$externalFileNam
1dca0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
1dcb0 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42        tryDeleteB
1dcc0 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e  inaryFile $fileN 1dcd0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ame.. 1dce0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1dcf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 1dd00 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 1dd10 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 1dd20 53 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c 65 SqliteNativeFile 1dd30 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 1dd40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 1dd50 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1dd60 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 49 6d o(deleteSqliteIm 1dd70 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 plicitFiles)]} t 1dd80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1dd90 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 1dda0 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
1ddb0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
1ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ddd0 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
1dde0 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 1ddf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1de00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 1de10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 1de20 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 1de30 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 1de40 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c teNonImplicitFil 1de50 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 1de70 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1de80 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 1de90 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d ePlatformFiles)] 1dea0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 1deb0 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 1dec0 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
1ded0 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  orm] > 0} then {
1dee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1def0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
1df00 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 1df10 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 1df30 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 DeleteAssembly$
1df40 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  fileName $platfo 1df50 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rm.. 1df60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1df70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 1df80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 1df90 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1dfa0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 1dfb0 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c eArchitectureFil 1dfc0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 1dfd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 1dfe0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 string length$a
1dff0 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30  rchitecture] > 0
1e000 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1e010 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
1e020 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61  ach fileName $na 1e030 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 1e040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1e050 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 tryDeleteAs 1e060 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 sembly$fileName
1e070 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a   $architecture.. 1e080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e090 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 1e0a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1e0b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1e0c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1e0d0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 1e0e0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c exists ::no(del 1e0f0 65 74 65 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 eteSqliteManaged 1e100 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 1e110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 . f 1e120 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 1e130 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65$managedFileName
1e140 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
1e150 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73       tryDeleteAs
1e160 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65  sembly $fileName 1e170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e180 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 1e190 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 1e1a0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1e1b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1e1c0 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 22 61 Check for the "a 1e1d0 75 74 6f 53 65 6c 65 63 74 22 20 72 75 6e 74 69 utoSelect" runti 1e1e0 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 49 66 20 70 me option. If p 1e1f0 72 65 73 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 resent,.. 1e200 20 20 20 23 20 20 20 20 20 20 20 61 74 74 65 6d # attem 1e210 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 pt to automatica 1e220 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 lly select the f 1e230 69 72 73 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a irst available.. 1e240 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1e250 20 20 62 75 69 6c 64 20 28 6f 72 20 22 72 65 6c build (or "rel 1e260 65 61 73 65 22 29 20 6f 66 20 53 51 4c 69 74 65 ease") of SQLite 1e270 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 and System.Data 1e280 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 .SQLite.. 1e290 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 75 # for u 1e2a0 73 65 20 77 69 74 68 20 74 68 65 20 74 65 73 74 se with the test 1e2b0 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 suite... 1e2c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1e2d0 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f if {[hasRuntimeO 1e2e0 70 74 69 6f 6e 20 61 75 74 6f 53 65 6c 65 63 74 ption autoSelect 1e2f0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1e300 20 20 20 20 20 20 20 69 66 20 7b 21 5b 63 68 65 if {![che 1e310 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 ckForSQLiteBuild 1e320 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1e330 6c 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d  l true]} then {.
1e340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
1e350 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c  heckForSQLiteRel
1e360 65 61 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 68  eases $::test_ch 1e370 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 annel true.. 1e380 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1e390 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1e3a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1e3b0 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 # NOTE: Skip tr 1e3c0 79 69 6e 67 20 74 6f 20 76 65 72 69 66 79 20 74 ying to verify t 1e3d0 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f he build directo 1e3e0 72 79 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 ry if instructed 1e3f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 ;.. # 1e400 20 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 otherwise, 1e410 6d 61 6b 65 20 73 75 72 65 20 69 74 20 61 63 74 make sure it act 1e420 75 61 6c 6c 79 20 65 78 69 73 74 73 20 6f 72 20 ually exists or 1e430 68 61 6c 74 20 74 68 65 20 65 6e 74 69 72 65 0d halt the entire. 1e440 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 1e450 20 20 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 testing proce 1e460 73 73 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f ss if it does no 1e470 74 20 65 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 t exist... 1e480 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1e490 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 1e4a0 74 73 20 3a 3a 6e 6f 28 76 65 72 69 66 79 42 75 ts ::no(verifyBu 1e4b0 69 6c 64 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 ildDirectory)]} 1e4c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1e4d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1e4e0 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 20 74 68 # NOTE: At th 1e4f0 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 20 62 75 is point, the bu 1e500 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 4d 55 ild directory MU 1e510 53 54 20 65 78 69 73 74 20 61 73 20 61 0d 0a 20 ST exist as a.. 1e520 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 1e530 20 20 20 76 61 6c 69 64 20 64 69 72 65 63 74 6f valid directo 1e540 72 79 20 66 6f 72 20 74 68 65 20 74 65 73 74 69 ry for the testi 1e550 6e 67 20 70 72 6f 63 65 73 73 20 74 6f 20 63 6f ng process to co 1e560 6e 74 69 6e 75 65 2e 0d 0a 20 20 20 20 20 20 20 ntinue... 1e570 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1e580 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 set director 1e590 79 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 y [getBuildDirec 1e5a0 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 tory].... 1e5b0 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 if {![file 1e5c0 65 78 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 exists$director
1e5d0 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20  y] || \..
1e5e0 20 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20           ![file
1e5f0 69 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72  isdirectory $dir 1e600 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d ectory]} then {. 1e610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1e620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e630 23 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 # NOTE: Just pri 1e640 6f 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 or to actually h 1e650 61 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 alting the testi 1e660 6e 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 ng process,.. 1e670 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 1e680 20 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 add an error 1e690 74 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 to the test log 1e6a0 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 file... 1e6b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1e6c0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1e6d0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1e6e0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1e700 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72  -- could not ver
1e710 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74  ify build direct
1e720 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f  ory \"" $directo 1e730 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. 1e740 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c "\", all 1e750 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 5c testing halted\ 1e760 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 n"].... 1e770 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1e780 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 # NOTE: Ra 1e790 69 73 69 6e 67 20 61 20 73 63 72 69 70 74 20 65 ising a script e 1e7a0 72 72 6f 72 20 66 72 6f 6d 20 74 68 69 73 20 70 rror from this p 1e7b0 6f 69 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 oint should halt 1e7c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e7d0 23 20 20 20 20 20 20 20 74 68 65 20 74 65 73 74 # the test 1e7e0 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 ing process... 1e7f0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err 1e810 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c or [appendArgs \ 1e820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e830 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 "could not v 1e840 65 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 erify build dire 1e850 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 ctory \""$direc
1e860 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20  tory \..
1e870 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61            "\", a
1e880 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65  ll testing halte
1e890 64 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d"]..
1e8a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
1e8b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
1e8c0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
1e8d0 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f  : Skip trying to
1e8e0 20 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 20   copy any files
1e8f0 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a  if instructed...
1e900 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1e910 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
1e920 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f  o exists ::no(co
1e930 70 79 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d  pySqliteFiles)]}
1e940 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1e950 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
1e960 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79  exists ::no(copy
1e970 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65  SqliteConfigFile
1e980 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
1e990 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
1e9a0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e  ch fileName $con 1e9b0 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a figFileNames {.. 1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e9d0 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 tryCopyBuildFile 1e9e0 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
1e9f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1ea00 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
1ea10 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
1ea20 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
1ea30 28 63 6f 70 79 53 71 6c 69 74 65 45 78 74 65 72  (copySqliteExter
1ea40 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  nalFiles)]} then
1ea50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1ea60 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1ea70 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20     # NOTE: Copy
1ea80 74 68 65 20 4d 61 6e 61 67 65 64 20 44 65 62 75  the Managed Debu
1ea90 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73  gging Assistants
1eaa0 20 28 4d 44 41 29 20 63 6f 6e 66 69 67 75 72 61   (MDA) configura
1eab0 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..
1eac0 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65      #       file
1ead0 20 66 6f 72 20 74 68 65 20 45 61 67 6c 65 20 73   for the Eagle s
1eae0 68 65 6c 6c 20 74 6f 20 74 68 65 20 62 75 69 6c  hell to the buil
1eaf0 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f  d output directo
1eb00 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..
1eb10 20 20 20 23 20 20 20 20 20 20 20 77 68 69 6c 65     #       while
1eb20 20 75 73 69 6e 67 20 65 61 63 68 20 6f 66 20 74   using each of t
1eb30 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the
1eb40 76 61 72 69 6f 75 73 20 6c 65 67 61 63 79 20 74  various legacy t
1eb50 65 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  est..
1eb60 20 20 20 23 20 20 20 20 20 20 20 65 78 65 63 75     #       execu
1eb70 74 61 62 6c 65 73 2e 20 20 54 68 69 73 20 77 69  tables.  This wi
1eb80 6c 6c 20 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20  ll help to make
1eb90 73 75 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68  sure that all th
1eba0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
1ebb0 20 23 20 20 20 20 20 20 20 6c 65 67 61 63 79 20   #       legacy
1ebc0 74 65 73 74 73 20 72 75 6e 20 77 69 74 68 20 65  tests run with e
1ebd0 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same
1ebe0 73 65 74 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a  set of Managed..
1ebf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
1ec00 20 20 20 20 20 20 44 65 62 75 67 67 69 6e 67 20        Debugging
1ec10 41 73 73 69 73 74 61 6e 74 73 20 63 6f 6e 66 69  Assistants confi
1ec20 67 75 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  gured...
1ec30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1ec40 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
1ec50 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66  ileName $mdaConf 1ec60 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 igFileNames {.. 1ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 1ec80 72 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 ryCopyBinaryFile 1ec90 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e EagleShell.exe. 1eca0 6d 64 61 2e 63 6f 6e 66 69 67 20 22 22 20 24 66 mda.config ""$f
1ecb0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
1ecc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1ecd0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1ece0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
1ecf0 45 3a 20 43 6f 70 79 20 74 68 65 20 65 78 74 65  E: Copy the exte
1ed00 72 6e 61 6c 20 62 69 6e 61 72 69 65 73 2c 20 69  rnal binaries, i
1ed10 66 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 64 69  f any, to the di
1ed20 72 65 63 74 6f 72 79 20 74 68 61 74 0d 0a 20 20  rectory that..
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
1ed40 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 74 68 65      contains the
1ed50 20 45 61 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54   Eagle shell.  T
1ed60 68 69 73 20 69 73 20 74 79 70 69 63 61 6c 6c 79  his is typically
1ed70 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20   used to make..
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
1ed90 20 20 20 20 20 73 75 72 65 20 61 73 73 65 6d 62       sure assemb
1eda0 6c 69 65 73 20 72 65 66 65 72 65 6e 63 65 64 20  lies referenced
1edb0 62 79 20 74 68 65 20 6f 6e 65 73 20 62 65 69 6e  by the ones bein
1edc0 67 20 74 65 73 74 65 64 20 61 72 65 0d 0a 20 20  g tested are..
1edd0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
1ede0 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20 64 75      available du
1edf0 72 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67  ring the testing
1ee00 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20   process...
1ee10 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1ee20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
1ee30 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65  h fileName $exte 1ee40 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d rnalFileNames {. 1ee50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1ee60 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c tryCopyExternal 1ee70 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a File$fileName..
1ee80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1ee90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1eea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1eeb0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
1eec0 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e  ::no(copySqliteN
1eed0 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68  ativeFiles)]} th
1eee0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1eef0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1ef00 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
1ef10 74 68 65 20 74 65 73 74 20 70 6c 61 74 66 6f 72  the test platfor
1ef20 6d 20 69 73 20 6c 69 6b 65 6c 79 20 74 68 65 20  m is likely the
1ef30 64 65 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73  default for this
1ef40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ef50 23 20 20 20 20 20 20 20 6d 61 63 68 69 6e 65 2c  #       machine,
1ef60 20 61 6c 73 6f 20 74 72 79 20 74 6f 20 63 6f 70   also try to cop
1ef70 79 20 74 68 65 20 6e 61 74 69 76 65 20 66 69 6c  y the native fil
1ef80 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20  es to the..
1ef90 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1efa0 20 62 69 6e 61 72 79 20 6c 6f 63 61 74 69 6f 6e   binary location
1efb0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
1efc0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1efd0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
1efe0 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
1eff0 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73  iteImplicitFiles
1f000 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  )] && \..
1f010 20 20 20 20 20 20 20 20 20 20 20 5b 69 73 44 65             [isDe
1f020 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f  faultBuildPlatfo
1f030 72 6d 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b  rm true]} then {
1f040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f050 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
1f060 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61  me $nativeFileNa 1f070 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 1f080 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 tryCopy 1f090 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
1f0a0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..
1f0b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1f0c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1f0d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
1f0e0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
1f0f0 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c  opySqliteNonImpl
1f100 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65  icitFiles)]} the
1f110 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1f120 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
1f130 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79  exists ::no(copy
1f140 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69  SqlitePlatformFi
1f150 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f170 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $1f180 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 platform] > 0} t 1f190 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1f1a0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 1f1b0 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 fileName$nativ
1f1c0 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  eFileNames {..
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f1e0 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c    tryCopyAssembl
1f1f0 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61  y $fileName$pla
1f200 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  tform..
1f210 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1f220 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1f240 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
1f250 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
1f260 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69  teArchitectureFi
1f270 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
1f280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f290 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $1f2a0 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 architecture] > 1f2b0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 1f2d0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e each fileName$n
1f2e0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b  ativeFileNames {
1f2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f300 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73        tryCopyAss
1f310 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20  embly $fileName 1f320 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20$architecture..
1f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f340 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
1f350 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1f360 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1f370 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1f380 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
1f390 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79  exists ::no(copy
1f3a0 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 6c  SqliteManagedFil
1f3b0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
1f3c0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
1f3d0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61  ach fileName $ma 1f3e0 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b nagedFileNames { 1f3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1f400 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c tryCopyAssembl 1f410 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 y$fileName..
1f420 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1f430 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1f440 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1f450 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1f460 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
1f470 74 72 79 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61  trying to load a
1f480 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74  ny files if inst
1f490 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20  ructed...
1f4a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1f4b0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
1f4c0 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74  s ::no(loadSqlit
1f4d0 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  eFiles)]} then {
1f4e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1f4f0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
1f500 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 49  ::no(loadSqliteI
1f510 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20  mplicitFiles)]}
1f520 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1f530 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73        tryLoadAss
1f540 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74  embly System.Dat
1f550 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20  a.SQLite.dll..
1f560 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1f570 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
1f580 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
1f590 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4c 69 6e 71  o(loadSqliteLinq
1f5a0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
1f5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
1f5c0 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53  ryLoadAssembly S
1f5d0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1f5e0 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20  e.Linq.dll..
1f5f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1f600 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
1f610 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
1f620 6c 6f 61 64 53 71 6c 69 74 65 45 66 36 46 69 6c  loadSqliteEf6Fil
1f630 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
1f640 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c              tryL
1f650 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74  oadAssembly Syst
1f660 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
1f670 46 36 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20  F6.dll..
1f680 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1f690 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
1f6a0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64  exists ::no(load
1f6b0 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69  SqliteNonImplici
1f6c0 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  tFiles)]} then {
1f6d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f6e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
1f6f0 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74  s ::no(loadSqlit
1f700 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d  ePlatformFiles)]
1f710 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
1f720 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
1f730 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72   length $platfor 1f740 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a m] > 0} then {.. 1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f760 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 tryLoadAssembly 1f770 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1f780 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d te.dll$platform
1f790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f7a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
1f7b0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
1f7c0 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71  ists ::no(loadSq
1f7d0 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65  liteArchitecture
1f7e0 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20  Files)] && \..
1f7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f800 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $1f810 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 architecture] > 1f820 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1f830 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f tryLo 1f840 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 adAssembly Syste 1f850 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl 1f860 6c 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d l$architecture.
1f870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
1f880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1f890 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1f8a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1f8b0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
1f8c0 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 43 6f 72 65  ameOnly [getCore
1f8d0 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f  BinaryFileNamesO
1f8e0 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  nly] {..
1f8f0 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20    catch {..
1f900 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1f910 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 1f920 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1f930 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1f940 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 1f950 66 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 4f f \""$fileNameO
1f960 6e 6c 79 20 22 5c 22 2e 2e 2e 20 22 20 5c 0d 0a  nly "\"... " \..
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f980 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67  [file version [g
1f990 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
1f9a0 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d   $fileNameOnly]] 1f9b0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 1f9c0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 1f9d0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 1f9e0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 1f9f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1fa00 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
1fa20 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e  --- file version
1fa30 20 6f 66 20 5c 22 53 51 4c 69 74 65 2e 49 6e 74   of \"SQLite.Int
1fa40 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20  erop.dll\"... "
1fa50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1fa60 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b   [file version [
1fa70 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
1fa80 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70  e SQLite.Interop
1fa90 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20  .dll]] \n]..
1faa0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1fab0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
1fac0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1fad0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1fae0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1faf0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c "---- fil 1fb00 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 e version of \"S 1fb10 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1fb20 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a e.dll\"... " \.. 1fb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 1fb40 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 ile version [get 1fb50 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 BinaryFileName S 1fb60 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1fb70 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 e.dll]] \n].. 1fb80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1fb90 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 1fba0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1fbb0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1fbc0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1fbd0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
1fbe0 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
1fbf0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1fc00 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e  te.Linq.dll\"...
1fc10 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
1fc20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f      [file versio
1fc30 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  n [getBinaryFile
1fc40 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Name System.Data
1fc50 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
1fc60 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ]] \n]..
1fc70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74  }....        cat
1fc80 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1fc90 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1fca0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1fcb0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1fcc0 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 "---- file ve 1fcd0 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 rsion of \"Syste 1fce0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 m.Data.SQLite.EF 1fcf0 36 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 6.dll\"... " \.. 1fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 1fd10 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 ile version [get 1fd20 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 BinaryFileName S 1fd30 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1fd40 65 2e 45 46 36 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d e.EF6.dll]] \n]. 1fd50 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 1fd60 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 1fd70 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f g length$platfo
1fd80 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  rm] > 0} then {.
1fd90 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
1fda0 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  ch fileNameOnly
1fdb0 5b 67 65 74 43 6f 72 65 42 69 6e 61 72 79 46 69  [getCoreBinaryFi
1fdc0 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a  leNamesOnly] {..
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1fde0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
1fdf0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1fe00 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1fe10 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1fe20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1fe30 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 1fe40 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d \""$platform \.
1fe50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1fe60 20 20 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e     / $fileNameOn 1fe70 6c 79 20 22 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c ly "\"... " [fil 1fe80 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 e version \.. 1fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 1fea0 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 1feb0 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 e$fileNameOnly
1fec0 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d  $platform]] \n]. 1fed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 1fee0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 1fef0 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b catch { 1ff00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1ff10 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
1ff20 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1ff30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1ff40 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
1ff50 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c  rsion of \"" $pl 1ff60 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 atform \.. 1ff70 20 20 20 20 20 20 20 20 20 20 22 2f 53 51 4c 69 "/SQLi 1ff80 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 te.Interop.dll\" 1ff90 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 ... " [file vers 1ffa0 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ion \.. 1ffb0 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 [getBinar 1ffc0 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 yFileName SQLite 1ffd0 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 70 6c .Interop.dll$pl
1ffe0 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20  atform]] \n]..
1fff0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
20000 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
20010 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
20020 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 20030 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 20040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 20050 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 "---- file vers 20060 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 ion of \""$plat
20070 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20  form \..
20080 20 20 20 20 20 20 20 20 22 2f 53 79 73 74 65 6d          "/System
20090 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
200a0 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65  \"... " [file ve
200b0 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20  rsion \..
200c0 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e           [getBin
200d0 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74  aryFileName Syst
200e0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
200f0 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c  ll $platform]] \ 20100 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 20110 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 20120 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 20130 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 g length$archit
20140 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65  ecture] > 0} the
20150 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66  n {..          f
20160 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f  oreach fileNameO
20170 6e 6c 79 20 5b 67 65 74 43 6f 72 65 42 69 6e 61  nly [getCoreBina
20180 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d  ryFileNamesOnly]
20190 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
201a0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
201b0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 201c0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 201d0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 201e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 201f0 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 20200 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 of \""$archite
20210 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20  cture \..
20220 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 66 69             / $fi 20230 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e leNameOnly "\".. 20240 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f . " [file versio 20250 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 20260 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 [getBinar 20270 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e yFileName$fileN
20280 61 6d 65 4f 6e 6c 79 20 24 61 72 63 68 69 74 65  ameOnly $archite 20290 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 cture]] \n].. 202a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 202b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 202c0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 202d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 202e0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
202f0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
20300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
20310 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
20320 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74  n of \"" $archit 20330 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 ecture \.. 20340 20 20 20 20 20 20 20 20 20 20 22 2f 53 51 4c 69 "/SQLi 20350 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 te.Interop.dll\" 20360 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 ... " [file vers 20370 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ion \.. 20380 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 [getBinar 20390 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 yFileName SQLite 203a0 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 61 72 .Interop.dll$ar
203b0 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d  chitecture]] \n]
203c0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
203d0 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68  .          catch
203e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
203f0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 20400 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 20410 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 20420 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 20430 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24 version of \""$
20440 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a  architecture \..
20450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20460 22 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  "/System.Data.SQ
20470 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20  Lite.dll\"... "
20480 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d  [file version \.
20490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
204a0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
204b0 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ame System.Data.
204c0 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 68  SQLite.dll $arch 204d0 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a itecture]] \n].. 204e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 204f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 20500 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 20510 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6c 69 OTE: Grab the li 20520 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 61 73 st of managed as 20530 73 65 6d 62 6c 69 65 73 20 66 6f 72 20 74 68 65 semblies for the 20540 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 current process 20550 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 20560 20 20 61 6e 64 20 72 65 70 6f 72 74 20 6f 6e 20 and report on 20570 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e the System.Data. 20580 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 6f SQLite related o 20590 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d nes... #. 205a0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 . if {[ha 205b0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo 205c0 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a mmand]} then {.. 205d0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 61 73 set as 205e0 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63 74 semblies [object 205f0 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61 69 invoke AppDomai 20600 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e 20 n.CurrentDomain 20610 47 65 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d 0a GetAssemblies].. 20620 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 20630 63 74 20 66 6f 72 65 61 63 68 20 61 73 73 65 6d ct foreach assem 20640 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 73 20 bly$assemblies
20650 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
20660 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68  f {[string match
20670 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53   \{System.Data.S
20680 51 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79  QLite* $assembly 20690 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 206a0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
206b0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
206c0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
206d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
206e0 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64  "---- found load
206f0 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20 24  ed assembly: " $20700 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20 assembly \n].. 20710 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 20720 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 20730 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 }.... c 20740 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 20750 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
20760 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20  channel \..
20770 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64           "---- d
20780 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 20  efine constants
20790 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44 61 74  for \"System.Dat
207a0 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d  a.SQLite\"... ".
207b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
207c0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
207d0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
207e0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
207f0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
20800 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
20810 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
20820 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 74  ite3 DefineConst
20830 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ants..
20840 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  } defineConstant
20850 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  s] == 0} then {.
20860 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
20870 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 20880 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b el [appendArgs [ 20890 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 formatList [lsor 208a0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 208b0 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f 6e 73$defineCons
208c0 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c  tants] <none>] \
208d0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  n]..          }
208e0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
208f0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 20900 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 t_channel unknow 20910 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n\n.. } 20920 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 20930 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 20940 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 20950 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
20960 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
20970 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 76 65   "---- source ve
20980 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65  rsion of \"Syste
20990 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
209a0 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  l\"... "....
209b0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
209c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
209d0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
209e0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
209f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
20a00 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
20a10 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e  QLite.SQLiteConn
20a20 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 56  ection ProviderV
20a30 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ersion..
20a40 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20    } version] ==
20a50 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
20a60 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
20a70 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69  ng length $versi 20a80 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b on] == 0} then { 20a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 20aa0 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c set version null 20ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 20ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 20ad0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
20ae0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $20af0 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20 version \n].. 20b00 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 20b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 20b20 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
20b30 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20  el unknown\n..
20b40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
20b50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
20b60 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
20b70 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 20b80 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 _channel \.. 20b90 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 20ba0 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74 20 source checkout 20bb0 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 of \"System.Data 20bc0 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e .SQLite.dll\"... 20bd0 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ".... 20be0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 20bf0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 20c00 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 20c10 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 20c20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 20c30 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 20c40 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 20c50 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 65 49 ProviderSourceI 20c60 64 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 73 d.. } s 20c70 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 ourceId] == 0} t 20c80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 20c90 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 20ca0 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d ength$sourceId]
20cb0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
20cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
20cd0 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a   sourceId null..
20ce0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
20cf0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
20d00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 20d10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 73 6f [appendArgs$so
20d20 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20 20 20  urceId \n]..
20d30 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
20d40 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
20d50 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 20d60 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 l unknown\n.. 20d70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 20d80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # 20d90 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 20da0 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 61 69 : Check the avai 20db0 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 61 6e lable builds (an 20dc0 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 6f 66 d "releases") of 20dd0 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 20 20 SQLite and.. 20de0 20 20 20 20 20 23 20 20 20 20 20 20 20 53 79 73 # Sys 20df0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 20e00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 20e10 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 20e20 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 iteBuilds$::tes
20e30 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20  t_channel..
20e40 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
20e50 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73  eReleases $::tes 20e60 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 t_channel.... 20e70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 20e80 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 20 # NOTE: Now, we 20e90 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 66 20 need to know if 20ea0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 the SQLite core 20eb0 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 69 6c library is avail 20ec0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 able.. # 20ed0 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 63 61 (i.e. beca 20ee0 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 64 2d use the managed- 20ef0 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 only System.Data 20f00 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 .SQLite assembly 20f10 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 can.. # 20f20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 68 6f load witho 20f30 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 2c 20 ut it; however, 20f40 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 6e 79 it cannot do any 20f50 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 69 74 thing useful wit 20f60 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 23 20 hout.. # 20f70 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 20 77 it). If w 20f80 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 65 20 e are using the 20f90 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d mixed-mode assem 20fa0 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 65 61 bly and we alrea 20fb0 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 dy.. # 20fc0 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 61 62 found it (ab 20fd0 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f 75 6c ove), this shoul 20fe0 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 65 64 d always succeed 20ff0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 21000 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 21010 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a 3a 74 LiteLibrary$::t
21020 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20  est_channel....
21030 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
21040 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
21050 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e  if the SQLite in
21060 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69  terop assembly i
21070 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20  s available...
21080 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
21090 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49   checkForSQLiteI
210a0 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74 5f 63  nterop $::test_c 210b0 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 hannel.... 210c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 210d0 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 53 OTE: Check the S 210e0 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 61 QLite database a 210f0 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 nd temporary dir 21100 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 20 20 ectories... 21110 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 #.. ch 21120 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 eckForSQLiteDire 21130 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f ctories$::test_
21140 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20  channel....
21150 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
21160 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
21170 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 76 61   determine if va
21180 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d 74 69  rious compile-ti
21190 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64 65  me options neede
211a0 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 23  d for..        #
211b0 20 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 73         test cons
211c0 74 72 61 69 6e 74 73 20 77 65 72 65 20 65 6e 61  traints were ena
211d0 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e  bled for the man
211e0 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 20 20  aged assembly.
211f0 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 23  There..        #
21200 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d 65 20         are some
21210 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
21220 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 20 61  ions that must a
21230 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20 65 6e  lso have been en
21240 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 23  abled..        #
21250 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 69         for the i
21260 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20  nterop assembly
21270 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 65  in order to be e
21280 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72 20 74  ffective.  For t
21290 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20  hose..        #
212a0 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c 20 69        options, i
212b0 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75 6d 65  t will be assume
212c0 64 20 74 68 61 74 20 69 74 20 77 61 73 20 65 6e  d that it was en
212d0 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 69 6e  abled for the in
212e0 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 23  terop..        #
212f0 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20         assembly
21300 69 66 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65  if it was enable
21310 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65  d for the manage
21320 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20  d assembly...
21330 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
21340 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43 6f  foreach defineCo
21350 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a  nstant [list \..
21360 20 20 20 20 20 20 20 20 20 20 20 20 43 48 45 43              CHEC
21370 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f 48 41  K_STATE COUNT_HA
21380 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54 45 52  NDLE DEBUG INTER
21390 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52 4f 50  OP_CODEC INTEROP
213a0 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20 20 20  _DEBUG \..
213b0 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 58        INTEROP_EX
213c0 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e  TENSION_FUNCTION
213d0 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 35 5f 45  S INTEROP_FTS5_E
213e0 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20  XTENSION \..
213f0 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f          INTEROP_
21400 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20 49 4e  INCLUDE_CEROD IN
21410 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 45 58  TEROP_INCLUDE_EX
21420 54 52 41 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c  TRA INTEROP_INCL
21430 55 44 45 5f 53 45 45 20 5c 0d 0a 20 20 20 20 20  UDE_SEE \..
21440 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 49         INTEROP_I
21450 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 20 49 4e  NCLUDE_ZIPVFS IN
21460 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45  TEROP_JSON1_EXTE
21470 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20  NSION \..
21480 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 4c 45 47       INTEROP_LEG
21490 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45 52 4f  ACY_CLOSE INTERO
214a0 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50 5f 50 45  P_LOG INTEROP_PE
214b0 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49  RCENTILE_EXTENSI
214c0 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ON \..
214d0 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 50    INTEROP_REGEXP
214e0 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52  _EXTENSION INTER
214f0 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f  OP_TEST_EXTENSIO
21500 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  N \..
21510 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45 5f   INTEROP_TOTYPE_
21520 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f  EXTENSION INTERO
21530 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20  P_VIRTUAL_TABLE
21540 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20 5c 0d  NET_20 NET_35 \.
21550 0a 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 54  .            NET
21560 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 5f 34  _40 NET_45 NET_4
21570 35 31 20 4e 45 54 5f 34 35 32 20 4e 45 54 5f 34  51 NET_452 NET_4
21580 36 20 4e 45 54 5f 34 36 31 20 4e 45 54 5f 43 4f  6 NET_461 NET_CO
21590 4d 50 41 43 54 5f 32 30 20 5c 0d 0a 20 20 20 20  MPACT_20 \..
215a0 20 20 20 20 20 20 20 20 50 4c 41 54 46 4f 52 4d          PLATFORM
215b0 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
215c0 4b 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49 56 45  K PRELOAD_NATIVE
215d0 5f 4c 49 42 52 41 52 59 20 52 45 54 41 52 47 45  _LIBRARY RETARGE
215e0 54 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20  TABLE \..
215f0 20 20 20 20 20 53 51 4c 49 54 45 5f 53 54 41 4e       SQLITE_STAN
21600 44 41 52 44 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  DARD THROW_ON_DI
21610 53 50 4f 53 45 44 20 54 52 41 43 45 20 54 52 41  SPOSED TRACE TRA
21620 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 20 5c 0d  CE_CONNECTION \.
21630 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41  .            TRA
21640 43 45 5f 44 45 54 45 43 54 49 4f 4e 20 54 52 41  CE_DETECTION TRA
21650 43 45 5f 48 41 4e 44 4c 45 20 54 52 41 43 45 5f  CE_HANDLE TRACE_
21660 50 52 45 4c 4f 41 44 20 54 52 41 43 45 5f 53 48  PRELOAD TRACE_SH
21670 41 52 45 44 20 5c 0d 0a 20 20 20 20 20 20 20 20  ARED \..
21680 20 20 20 20 54 52 41 43 45 5f 53 54 41 54 45 4d      TRACE_STATEM
21690 45 4e 54 20 54 52 41 43 45 5f 57 41 52 4e 49 4e  ENT TRACE_WARNIN
216a0 47 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42  G TRACK_MEMORY_B
216b0 59 54 45 53 20 5c 0d 0a 20 20 20 20 20 20 20 20  YTES \..
216c0 20 20 20 20 55 53 45 5f 45 4e 54 49 54 59 5f 46      USE_ENTITY_F
216d0 52 41 4d 45 57 4f 52 4b 5f 36 20 55 53 45 5f 49  RAMEWORK_6 USE_I
216e0 4e 54 45 52 4f 50 5f 44 4c 4c 20 55 53 45 5f 50  NTEROP_DLL USE_P
216f0 52 45 50 41 52 45 5f 56 32 20 57 49 4e 44 4f 57  REPARE_V2 WINDOW
21700 53 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  S] {..
21710 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
21720 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
21730 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  e compile-time o
21740 70 74 69 6f 6e 20 69 73 20 6c 69 73 74 65 64 20  ption is listed
21750 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0d 0a  in the list of..
21760 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
21770 20 20 22 64 65 66 69 6e 65 20 63 6f 6e 73 74 61    "define consta
21780 6e 74 73 22 20 6b 65 70 74 20 74 72 61 63 6b 20  nts" kept track
21790 6f 66 20 62 79 20 74 68 65 20 6d 61 6e 61 67 65  of by the manage
217a0 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20  d assembly...
217b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
217c0 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
217d0 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  teDefineConstant
217e0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 217f0 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74$defineConstant
21800 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
21810 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
21820 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
21830 69 66 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  if the System.Da
21840 74 61 2e 53 51 4c 69 74 65 20 70 72 6f 76 69 64  ta.SQLite provid
21850 65 72 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20  er was compiled
21860 77 69 74 68 0d 0a 20 20 20 20 20 20 20 20 23 20  with..        #
21870 20 20 20 20 20 20 73 75 70 70 6f 72 74 20 66 6f        support fo
21880 72 20 61 6e 79 20 65 6e 63 72 79 70 74 65 64 20  r any encrypted
21890 64 61 74 61 62 61 73 65 73 2e 0d 0a 20 20 20 20  databases...
218a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
218b0 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69  f {[haveConstrai
218c0 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  nt \..
218d0 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73        defineCons
218e0 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61  tant.System.Data
218f0 2e 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f  .SQLite.INTEROP_
21900 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d 0a 20 20 20  CODEC] || \..
21910 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f           [haveCo
21920 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20  nstraint \..
21930 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69              defi
21940 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
21950 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e  m.Data.SQLite.IN
21960 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45  TEROP_INCLUDE_SE
21970 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  E]} then {..
21980 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
21990 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20     # NOTE: Yes,
219a0 61 64 64 20 67 65 6e 65 72 69 63 20 63 6f 6e 73  add generic cons
219b0 74 72 61 69 6e 74 20 66 6f 72 20 75 73 65 20 62  traint for use b
219c0 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  y the test suite
219d0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
219e0 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
219f0 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44  straint System.D
21a00 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79  ata.SQLite.Encry
21a10 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  ption..        }
21a20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
21a30 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
21a40 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  heck the current
21a50 20 62 75 69 6c 64 20 79 65 61 72 2e 20 20 42 61   build year.  Ba
21a60 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e  sically, this in
21a70 64 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20  dicates..
21a80 20 23 20 20 20 20 20 20 20 77 68 69 63 68 20 76   #       which v
21a90 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c  ersion of MSBuil
21aa0 64 20 61 6e 64 2f 6f 72 20 56 69 73 75 61 6c 20  d and/or Visual
21ab0 53 74 75 64 69 6f 20 77 61 73 20 75 73 65 64 20  Studio was used
21ac0 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  to..        #
21ad0 20 20 20 20 63 6f 6d 70 69 6c 65 20 74 68 65 20      compile the
21ae0 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65  assembly binarie
21af0 73 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20  s under test...
21b00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
21b10 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 21b20 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 21b30 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 "---- che 21b40 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d cking for System 21b50 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 .Data.SQLite bui 21b60 6c 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a ld year... ".... 21b70 20 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72 set year 21b80 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d [getBuildYear]. 21b90 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons 21ba0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 21bb0 67 73 20 62 75 69 6c 64 59 65 61 72 2e 20 24 79 gs buildYear.$y
21bc0 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 74 70  ear]..        tp
21bd0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 21be0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 21bf0 5c 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a \"$year \"\n]..
21c00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
21c10 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
21c20 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62  ck the current b
21c30 75 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77  uild .NET Framew
21c40 6f 72 6b 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c  ork.  Basically,
21c50 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23   this..        #
21c60 20 20 20 20 20 20 20 69 6e 64 69 63 61 74 65 73         indicates
21c70 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f   which version o
21c80 66 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  f the .NET Frame
21c90 77 6f 72 6b 20 69 73 20 62 65 69 6e 67 0d 0a 20  work is being..
21ca0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75         #       u
21cb0 73 65 64 20 62 79 20 74 68 65 20 61 73 73 65 6d  sed by the assem
21cc0 62 6c 79 20 62 69 6e 61 72 69 65 73 20 75 6e 64  bly binaries und
21cd0 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 20  er test...
21ce0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
21cf0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 21d00 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 21d10 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 "---- checking 21d20 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 for System.Data 21d30 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 2e 4e .SQLite build .N 21d40 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 2e 2e 20 ET Framework... 21d50 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 ".... set 21d60 20 6e 65 74 46 78 20 5b 67 65 74 42 75 69 6c 64 netFx [getBuild 21d70 4e 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 NetFx].. 21d80 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 addConstraint [a 21d90 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 46 ppendArgs buildF 21da0 72 61 6d 65 77 6f 72 6b 2e 20 24 6e 65 74 46 78 ramework.$netFx
21db0 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  ]..        tputs
21dc0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 21dd0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 [appendArgs \" 21de0 24 6e 65 74 46 78 20 5c 22 5c 6e 5d 0d 0a 0d 0a$netFx \"\n]....
21df0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
21e00 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
21e10 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69   the current bui
21e20 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ld configuration
21e30 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 6e  .  This should n
21e40 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20  ormally..
21e50 20 23 20 20 20 20 20 20 20 62 65 20 65 69 74 68   #       be eith
21e60 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52  er "Debug" or "R
21e70 65 6c 65 61 73 65 22 2e 0d 0a 20 20 20 20 20 20  elease"...
21e80 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
21e90 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 21ea0 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 21eb0 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 "---- checking 21ec0 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 for System.Data 21ed0 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 63 6f .SQLite build co 21ee0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 nfiguration... " 21ef0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 21f00 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 configuration [g 21f10 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 etBuildConfigura 21f20 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 61 tion].. a 21f30 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 ddConstraint [ap 21f40 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 43 6f pendArgs buildCo 21f50 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 24 63 6f nfiguration.$co
21f60 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20  nfiguration]..
21f70 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 21f80 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 21f90 65 6e 64 41 72 67 73 20 5c 22 20 24 63 6f 6e 66 endArgs \"$conf
21fa0 69 67 75 72 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d  iguration \"\n].
21fb0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
21fc0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 72        # NOTE: Tr
21fd0 79 20 74 6f 20 73 65 74 75 70 20 61 6e 20 69 6e  y to setup an in
21fe0 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b  terrupt callback
21ff0 20 75 73 69 6e 67 20 74 68 65 20 73 63 72 69 70   using the scrip
22000 74 20 64 65 62 75 67 67 65 72 0d 0a 20 20 20 20  t debugger..
22010 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74      #       that
22020 20 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61 6c 6c   will cancel all
22030 20 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20   SQL queries in
22040 70 72 6f 67 72 65 73 73 20 66 6f 72 20 61 6c 6c  progress for all
22050 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20   database..
22060 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65     #       conne
22070 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20  ctions known to
22080 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72  this interpreter
22090 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
220a0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
220b0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c   exists ::no(sql
220c0 69 74 65 49 6e 74 65 72 72 75 70 74 43 61 6c 6c  iteInterruptCall
220d0 62 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  back)]} then {..
220e0 20 20 20 20 20 20 20 20 20 20 73 65 74 75 70 44            setupD
220f0 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61  bInterruptCallba
22100 63 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ck $::test_chann 22110 65 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a el$::test_log..
22120 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
22130 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
22140 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f  # NOTE: Check fo
22150 72 20 74 68 65 20 6e 61 74 69 76 65 20 72 75 6e  r the native run
22160 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 68 69  time option, whi
22170 63 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20 77 65  ch would mean we
22180 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20   are..        #
22190 20 20 20 20 20 20 75 73 69 6e 67 20 74 68 65 20        using the
221a0 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
221b0 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  bly...        #.
221c0 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
221d0 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24  rRuntimeOption $221e0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e ::test_channel n 221f0 61 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 ative.... 22200 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 22210 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 TE: Check if the 22220 20 74 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 test suite shou 22230 6c 64 20 63 6f 75 6e 74 20 74 68 65 20 6e 75 6d ld count the num 22240 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f ber of connectio 22250 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ns.. # 22260 20 20 20 20 22 6f 70 65 6e 65 64 22 20 61 6e 64 "opened" and 22270 20 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d 20 74 "closed" from t 22280 68 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64 65 74 he pool when det 22290 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 74 65 ermining if a te 222a0 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 222b0 20 20 20 20 70 61 73 73 65 64 2e 20 20 44 69 73 passed. Dis 222c0 61 62 6c 69 6e 67 20 74 68 69 73 20 62 65 68 61 abling this beha 222d0 76 69 6f 72 20 69 73 20 73 6f 6d 65 74 69 6d 65 vior is sometime 222e0 73 20 6e 65 63 65 73 73 61 72 79 20 28 65 2e 67 s necessary (e.g 222f0 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ... # 22300 20 20 20 64 75 72 69 6e 67 20 74 68 65 20 72 65 during the re 22310 6c 65 61 73 65 20 74 65 73 74 69 6e 67 20 70 72 lease testing pr 22320 6f 63 65 73 73 29 20 62 65 63 61 75 73 65 20 74 ocess) because t 22330 68 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c here are several 22340 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 22350 20 20 74 65 73 74 73 20 74 68 61 74 20 72 65 6c tests that rel 22360 79 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e 65 64 y on the "opened 22370 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e from pool" coun 22380 74 20 62 65 69 6e 67 20 67 72 65 61 74 65 72 0d t being greater. 22390 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 223a0 20 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54 68 65 than zero. The 223b0 73 65 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 se tests may fai 223c0 6c 20 64 75 65 20 74 6f 20 74 68 65 20 6e 6f 6e l due to the non 223d0 2d 64 65 74 65 72 6d 69 6e 69 73 74 69 63 0d 0a -deterministic.. 223e0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 223f0 62 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 behavior of the 22400 43 4c 52 20 47 43 2c 20 65 76 65 6e 20 77 68 65 CLR GC, even whe 22410 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20 62 75 n there is no bu 22420 67 20 69 6e 20 74 68 65 20 63 6f 64 65 0d 0a 20 g in the code.. 22430 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 22440 65 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a 20 20 eing tested... 22450 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 22460 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 checkForRuntime 22470 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 Option$::test_c
22480 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75  hannel noPoolCou
22490 6e 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  nts....        #
224a0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
224b0 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 74  : Check if the t
224c0 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c 64  est suite should
224d0 20 75 73 65 20 73 68 61 72 65 64 2d 63 61 63 68   use shared-cach
224e0 65 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20  e mode...
224f0 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63   #..        chec
22500 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f  kForRuntimeOptio
22510 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  n $::test_channe 22520 6c 20 73 68 61 72 65 64 43 61 63 68 65 0d 0a 0d l sharedCache... 22530 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 22540 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f # NOTE: Repo 22550 72 74 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 rt the resource 22560 75 73 61 67 65 20 70 72 69 6f 72 20 74 6f 20 72 usage prior to r 22570 75 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73 74 73 unning any tests 22580 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 22590 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 reportSQLi 225a0 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 teResources$::t
225b0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20  est_channel....
225c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
225d0 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74    # NOTE: Grab t
225e0 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76  he list of nativ
225f0 65 20 6d 6f 64 75 6c 65 73 20 66 6f 72 20 74 68  e modules for th
22600 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73  e current proces
22610 73 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23  s and..        #
22620 20 20 20 20 20 20 20 72 65 70 6f 72 74 20 6f 6e         report on
22630 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61   the System.Data
22640 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20  .SQLite related
22650 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23  ones...        #
22660 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68  ..        if {[h
22670 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  aveSQLiteObjectC
22680 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d  ommand]} then {.
22690 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d  .          set m
226a0 6f 64 75 6c 65 73 20 5b 6f 62 6a 65 63 74 20 69  odules [object i
226b0 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20 20  nvoke \..
226c0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69         System.Di
226d0 61 67 6e 6f 73 74 69 63 73 2e 50 72 6f 63 65 73  agnostics.Proces
226e0 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63  s.GetCurrentProc
226f0 65 73 73 20 4d 6f 64 75 6c 65 73 5d 0d 0a 0d 0a  ess Modules]....
22700 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
22710 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20   foreach -alias
22720 6d 6f 64 75 6c 65 20 24 6d 6f 64 75 6c 65 73 20  module $modules 22730 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {.. # 22740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 22750 4e 4f 54 45 3a 20 54 68 65 20 6d 6f 64 75 6c 65 NOTE: The module 22760 20 66 69 6c 65 20 6e 61 6d 65 20 68 65 72 65 20 file name here 22770 6d 75 73 74 20 62 65 20 6e 6f 72 6d 61 6c 69 7a must be normaliz 22780 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ed... 22790 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 227a0 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi 227b0 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 24 6d le normalize [$m
227c0 6f 64 75 6c 65 20 46 69 6c 65 4e 61 6d 65 5d 5d  odule FileName]]
227d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
227e0 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78  if {[lsearch -ex
227f0 61 63 74 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 5b  act -nocase -- [
22800 67 65 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c  getCoreBinaryFil
22810 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 5c 0d 0a 20  eNamesOnly] \..
22820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
22830 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN 22840 61 6d 65 5d 5d 20 21 3d 20 2d 31 7d 20 74 68 65 ame]] != -1} the 22850 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 22860 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
22870 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
22880 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
22890 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
228a0 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c  found loaded SQL
228b0 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61  ite native libra
228c0 72 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a  ry module: " \..
228d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
228e0 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d    $fileName \n]. 228f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e 22900 6c 73 65 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d lseif {[string m 22910 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 atch \.. 22920 20 20 20 20 20 20 20 20 2d 6e 6f 63 61 73 65 20 -nocase 22930 2a 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 */SQLite.Interop 22940 2e 64 6c 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 7d .dll$fileName]}
22950 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
22960 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 22970 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 22980 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 22990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 229a0 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 --- found loaded 229b0 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 SQLite interop 229c0 61 73 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a assembly module: 229d0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 229e0 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d$fileNam
229f0 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  e \n]..
22a00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
22a10 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
22a20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
22a30 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
22a40 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 22a50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22a60 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d "---- compile- 22a70 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 time options for 22a80 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 22a90 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 rary... ".... 22aa0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 22ab0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 22ac0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 22ad0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 22ae0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22af0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 22b00 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 SQLite.SQLite3 S 22b10 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 QLiteCompileOpti 22b20 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d ons.. } 22b30 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d compileOptions] 22b40 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 22b50 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 22b60 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
22b70 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f   [appendArgs [fo
22b80 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20  rmatList [lsort
22b90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
22ba0 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f     $compileOptio 22bb0 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d ns] <none>] \n]. 22bc0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 22bd0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 22be0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
22bf0 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e  hannel unknown\n
22c00 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
22c10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
22c20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
22c30 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 22c40 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 22c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 22c60 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 --- compile-time 22c70 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c options for SQL 22c80 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 ite interop asse 22c90 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 mbly... ".... 22ca0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 22cb0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 22cc0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 22cd0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 22ce0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22cf0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 22d00 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 SQLite.SQLite3 I 22d10 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 nteropCompileOpt 22d20 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ions.. 22d30 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 } compileOptions 22d40 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 22d50 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 22d60 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
22d70 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66  l [appendArgs [f
22d80 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74  ormatList [lsort
22d90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22da0 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69      $compileOpti 22db0 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d ons] <none>] \n] 22dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 22dd0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 22de0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
22df0 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c  channel unknown\
22e00 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  n..          }..
22e10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
22e20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
22e30 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65  # NOTE: Show the
22e40 20 61 63 74 69 76 65 20 74 65 73 74 20 63 6f 6e   active test con
22e50 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20  straints...
22e60 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70     #..        tp
22e70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 22e80 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 22e90 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 "---- constraint 22ea0 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 s: " \.. 22eb0 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 [formatList 22ec0 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 [lsort [getConst 22ed0 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d raints]] <none>] 22ee0 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n].... 22ef0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 22f00 45 3a 20 53 61 76 65 20 74 68 65 20 74 65 73 74 E: Save the test 22f10 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 constraints for 22f20 20 75 73 65 20 62 79 20 74 68 72 65 61 64 73 20 use by threads 22f30 63 72 65 61 74 65 64 20 69 6e 20 74 68 69 73 0d created in this. 22f40 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 22f50 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d application dom 22f60 61 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65 ain. This is ne 22f70 63 65 73 73 61 72 79 20 62 65 63 61 75 73 65 20 cessary because 22f80 61 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 all the Eagle.. 22f90 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 # " 22fa0 74 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69 6e test context" in 22fb0 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 formation is per 22fc0 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 -thread... 22fd0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 22fe0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 22ff0 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 :test_constraint 23000 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 s]} then {.. 23010 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 set ::test 23020 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a _constraints$::
23030 65 61 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e 73  eagle_tests(cons
23040 74 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 20  traints)..
23050 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
23060 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
23070 3a 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74 65  : Load the "afte
23080 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63  r-constraints" c
23090 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61  ustom per-user a
230a0 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a  nd/or per-host..
230b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
230c0 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f  test settings no
230d0 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  w...        #..
230e0 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31         uplevel 1
230f0 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74   [list loadSQLit
23100 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a  eTestSettings $: 23110 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 :test_channel .a 23120 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 fter].... 23130 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 23140 54 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 TE: If necessary 23150 2c 20 65 6e 61 62 6c 65 20 73 68 61 72 65 64 2d , enable shared- 23160 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d cache mode now.. 23170 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 23180 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 if {[hasRunt 23190 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 imeOption shared 231a0 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a Cache]} then {.. 231b0 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 enable 231c0 53 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 SharedCache$::t
231d0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65  est_channel true
231e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
231f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
23200 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77    # NOTE: Show w
23210 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63  hen our tests ac
23220 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f  tually began (no
23230 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  w)...        #..
23240 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 23250 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 23260 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 23270 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 "---- S 23280 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 23290 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 74 e tests began at 232a0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 232b0 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 [clock format 232c0 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d [clock seconds]] 232d0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 \n].. }.. 232e0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 232f0 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 c runSQLiteTestF 23300 69 6c 65 73 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 ilesPrologue {} 23310 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c {.. uplevel 23320 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 1 {.. #. 23330 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 23340 20 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61 Setup the varia 23350 62 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 20 bles that refer 23360 74 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 6e to the various n 23370 6f 6e 2d 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 on-data files.. 23380 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 # r 23390 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 74 equired by the t 233a0 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c ests in this fil 233b0 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 233c0 20 20 20 20 20 20 20 73 65 74 20 65 6e 74 69 74 set entit 233d0 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c yFrameworkDllFil 233e0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 233f0 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 [getBuildFileNa 23400 6d 65 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f me EntityFramewo 23410 72 6b 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 rk.dll].... 23420 20 20 20 73 65 74 20 69 6e 73 74 61 6c 6c 65 72 set installer 23430 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c ExeFile [getBuil 23440 64 46 69 6c 65 4e 61 6d 65 20 49 6e 73 74 61 6c dFileName Instal 23450 6c 65 72 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 ler.exe].. 23460 20 20 73 65 74 20 73 71 6c 69 74 65 44 65 73 69 set sqliteDesi 23470 67 6e 65 72 44 6c 6c 46 69 6c 65 20 5b 67 65 74 gnerDllFile [get 23480 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 51 BuildFileName SQ 23490 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c Lite.Designer.dl 234a0 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 l].... se 234b0 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 t systemDataSQLi 234c0 74 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 teDllFile \.. 234d0 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 [getBui 234e0 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 ldFileName Syste 234f0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl 23500 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 l].... se 23510 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 t systemDataSQLi 23520 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 5c 0d teLinqDllFile \. 23530 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 . [ge 23540 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 tBuildFileName S 23550 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 23560 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 0d 0a 0d 0a 20 e.Linq.dll].... 23570 20 20 20 20 20 20 20 73 65 74 20 73 79 73 74 65 set syste 23580 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c mDataSQLiteEf6Dl 23590 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 lFile \.. 235a0 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 [getBuildFi 235b0 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 leName System.Da 235c0 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c ta.SQLite.EF6.dl 235d0 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 l].... se 235e0 74 20 74 65 73 74 45 78 65 46 69 6c 65 20 5b 67 t testExeFile [g 235f0 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName 23600 74 65 73 74 2e 65 78 65 5d 0d 0a 20 20 20 20 20 test.exe].. 23610 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 45 set testLinqE 23620 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 xeFile [getBuild 23630 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 6c 69 6e FileName testlin 23640 71 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 20 20 q.exe].. 23650 73 65 74 20 74 65 73 74 45 66 36 45 78 65 46 69 set testEf6ExeFi 23660 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 le [getBuildFile 23670 4e 61 6d 65 20 74 65 73 74 65 66 36 2e 65 78 65 Name testef6.exe 23680 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 23690 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 236a0 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61 62 Setup the variab 236b0 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 les that refer t 236c0 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 64 61 o the various da 236d0 74 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 ta files.. 236e0 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69 72 # requir 236f0 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73 20 ed by the tests 23700 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 in this file... 23710 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 23720 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 4f 75 set testLinqOu 23730 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 tFile [file nati 23740 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 23750 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 23760 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 [getSQLiteTestD 23770 61 74 61 50 61 74 68 5d 20 74 65 73 74 6c 69 6e ataPath] testlin 23780 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20 20 20 20 20 q.out]].... 23790 20 20 20 73 65 74 20 6e 6f 72 74 68 77 69 6e 64 set northwind 237a0 45 66 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e EfDbFile [file n 237b0 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 237c0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 237d0 20 20 20 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d [file dirnam 237e0 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 e [file dirname 237f0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 23800 74 61 50 61 74 68 5d 5d 5d 20 5c 0d 0a 20 20 20 taPath]]] \.. 23810 20 20 20 20 20 20 20 20 20 74 65 73 74 6c 69 6e testlin 23820 71 20 6e 6f 72 74 68 77 69 6e 64 45 46 2e 64 62 q northwindEF.db 23830 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 ]].... se 23840 74 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 20 5b t nonWalDbFile [ 23850 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 23860 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 23870 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 23880 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 23890 5d 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a 0d ] nonWal.db]]... 238a0 0a 20 20 20 20 20 20 20 20 73 65 74 20 77 61 6c . set wal 238b0 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 DbFile [file nat 238c0 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 238d0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 238e0 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 [getSQLiteTest 238f0 44 61 74 61 50 61 74 68 5d 20 77 61 6c 2e 64 62 DataPath] wal.db 23900 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d ]].... #. 23910 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 23920 20 54 68 65 20 76 61 72 69 6f 75 73 20 69 6e 73 The various ins 23930 74 61 6c 6c 2f 75 6e 69 6e 73 74 61 6c 6c 20 6c tall/uninstall l 23940 6f 67 20 66 69 6c 65 73 20 75 73 65 64 20 74 6f og files used to 23950 20 74 65 73 74 20 74 68 65 0d 0a 20 20 20 20 20 test the.. 23960 20 20 20 23 20 20 20 20 20 20 20 64 65 73 69 67 # desig 23970 6e 2d 74 69 6d 65 20 63 6f 6d 70 6f 6e 65 6e 74 n-time component 23980 20 69 6e 73 74 61 6c 6c 65 72 2e 0d 0a 20 20 20 installer... 23990 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 239a0 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 set testInstallV 239b0 73 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69 s2005LogFile [fi 239c0 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 239d0 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. 239e0 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 [getSQLi 239f0 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 teTestDataPath] 23a00 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 Installer_Test_V 23a10 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 s2005.log]].... 23a20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 set testI 23a30 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 nstallVs2008LogF 23a40 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 23a50 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 23a60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 23a70 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 getSQLiteTestDat 23a80 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 aPath] Installer 23a90 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c 6f 67 _Test_Vs2008.log 23aa0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 ]].... se 23ab0 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 t testInstallVs2 23ac0 30 31 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 010LogFile [file 23ad0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 23ae0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 23af0 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite 23b00 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e TestDataPath] In 23b10 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 staller_Test_Vs2 23b20 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 010.log]].... 23b30 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 set testIns 23b40 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c tallVs2012LogFil 23b50 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 23b60 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d me [file join \. 23b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 . [ge 23b80 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 tSQLiteTestDataP 23b90 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 ath] Installer_T 23ba0 65 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d 5d est_Vs2012.log]] 23bb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 23bc0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 23bd0 33 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 3LogFile [file n 23be0 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 23bf0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 23c00 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 23c10 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 stDataPath] Inst 23c20 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 aller_Test_Vs201 23c30 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 3.log]].... 23c40 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 set testInsta 23c50 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 llVs2015LogFile 23c60 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 23c70 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 23c80 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 23c90 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 23ca0 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 h] Installer_Tes 23cb0 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d 5d 0d 0a t_Vs2015.log]].. 23cc0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 .. set te 23cd0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 stUninstallVs200 23ce0 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 5LogFile [file n 23cf0 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 23d00 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 23d10 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 23d20 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e stDataPath] Unin 23d30 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 staller_Test_Vs2 23d40 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 005.log]].... 23d50 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 set testUni 23d60 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 nstallVs2008LogF 23d70 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ile [file native 23d80 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 23d90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 23da0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 getSQLiteTestDat 23db0 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c aPath] Uninstall 23dc0 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c er_Test_Vs2008.l 23dd0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]].... 23de0 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c set testUninstal 23df0 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b lVs2010LogFile [ 23e00 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 23e10 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 [file join \.. 23e20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 23e30 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 23e40 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 ] Uninstaller_Te 23e50 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d st_Vs2010.log]]. 23e60 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 ... set t 23e70 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 23e80 31 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 12LogFile [file 23e90 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 23ea0 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 23eb0 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 23ec0 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 estDataPath] Uni 23ed0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 23ee0 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2012.log]].... 23ef0 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e set testUn 23f00 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 installVs2013Log 23f10 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 23f20 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 23f30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23f40 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 23f50 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c taPath] Uninstal 23f60 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33 2e ler_Test_Vs2013. 23f70 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 log]].... 23f80 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 set testUninsta 23f90 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 llVs2015LogFile 23fa0 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 23fb0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 [file join \.. 23fc0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 23fd0 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 23fe0 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 h] Uninstaller_T 23ff0 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d 5d est_Vs2015.log]] 24000 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 .... #### 24010 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 24050 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 ###.... i 24060 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 24070 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 24080 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 24090 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 240a0 24 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b$entityFramework
240b0 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  DllFile]]]} then
240c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
240d0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 240e0 5f 63 68 61 6e 6e 65 6c 20 24 65 6e 74 69 74 79 _channel$entity
240f0 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65  FrameworkDllFile
24100 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
24110 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
24120 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
24130 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
24140 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
24150 6c 65 20 74 61 69 6c 20 24 69 6e 73 74 61 6c 6c  le tail $install 24160 65 72 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 erExeFile]]]} th 24170 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 24180 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
24190 73 74 5f 63 68 61 6e 6e 65 6c 20 24 69 6e 73 74  st_channel $inst 241a0 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 49 6e 73 allerExeFile Ins 241b0 74 61 6c 6c 65 72 2e 65 78 65 0d 0a 20 20 20 20 taller.exe.. 241c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 241d0 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 if {![haveConst 241e0 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 241f0 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 s file_ \.. 24200 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 [file tai 24210 6c 20 24 73 71 6c 69 74 65 44 65 73 69 67 6e 65 l$sqliteDesigne
24220 72 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  rDllFile]]]} the
24230 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
24240 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 24250 74 5f 63 68 61 6e 6e 65 6c 20 24 73 71 6c 69 74 t_channel$sqlit
24260 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65  eDesignerDllFile
24270 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
24280 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
24290 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
242a0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
242b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
242c0 6c 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44  le tail $systemD 242d0 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 ataSQLiteDllFile 242e0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 242f0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 24300 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
24310 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c  l $systemDataSQL 24320 69 74 65 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 iteDllFile.. 24330 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 24340 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 if {![haveConst 24350 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 24360 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 s file_ \.. 24370 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 [file tai 24380 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c l$systemDataSQL
24390 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 5d 5d  iteLinqDllFile]]
243a0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
243b0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
243c0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 243d0 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74$systemDataSQLit
243e0 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d 0a 20 20  eLinqDllFile..
243f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
24400 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
24410 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
24420 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
24430 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
24440 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53  ail $systemDataS 24450 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 5d QLiteEf6DllFile] 24460 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 24470 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 24480 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
24490 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69   $systemDataSQLi 244a0 74 65 45 66 36 44 6c 6c 46 69 6c 65 0d 0a 20 20 teEf6DllFile.. 244b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 244c0 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 244d0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 244e0 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 244f0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 24500 61 69 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65 ail$testExeFile
24510 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
24520 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
24530 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 24540 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65 20 74 l$testExeFile t
24550 65 73 74 2e 65 78 65 0d 0a 20 20 20 20 20 20 20  est.exe..
24560 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
24570 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
24580 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
24590 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
245a0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $245b0 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 5d testLinqExeFile] 245c0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 245d0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 245e0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
245f0 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c   $testLinqExeFil 24600 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 0d 0a e testlinq.exe.. 24610 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 24620 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 24630 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 24640 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 24650 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 24660 20 74 61 69 6c 20 24 74 65 73 74 45 66 36 45 78 tail$testEf6Ex
24670 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  eFile]]]} then {
24680 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63  ..          chec
24690 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 246a0 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 66 36 45 hannel$testEf6E
246b0 78 65 46 69 6c 65 20 74 65 73 74 65 66 36 2e 65  xeFile testef6.e
246c0 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  xe..        }...
246d0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68  .        if {![h
246e0 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
246f0 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
24700 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
24710 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 4c  file tail $testL 24720 69 6e 71 4f 75 74 46 69 6c 65 5d 5d 5d 7d 20 74 inqOutFile]]]} t 24730 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 24740 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
24750 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 24760 74 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a 20 20 tLinqOutFile.. 24770 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 24780 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 24790 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 247a0 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 247b0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 247c0 61 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 ail$northwindEf
247d0 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  DbFile]]]} then
247e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
247f0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 24800 63 68 61 6e 6e 65 6c 20 24 6e 6f 72 74 68 77 69 channel$northwi
24810 6e 64 45 66 44 62 46 69 6c 65 0d 0a 20 20 20 20  ndEfDbFile..
24820 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
24830 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74   if {![haveConst
24840 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
24850 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20  s file_ \..
24860 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
24870 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 5d  l $nonWalDbFile] 24880 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 24890 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 248a0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
248b0 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d 0a   $nonWalDbFile.. 248c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 248d0 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 if {![haveC 248e0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 248f0 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 dArgs file_ \.. 24900 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 24910 20 74 61 69 6c 20 24 77 61 6c 44 62 46 69 6c 65 tail$walDbFile
24920 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
24930 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
24940 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 24950 6c 20 24 77 61 6c 44 62 46 69 6c 65 0d 0a 20 20 l$walDbFile..
24960 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
24970 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
24980 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
24990 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
249a0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
249b0 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c  ail $testInstall 249c0 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d Vs2005LogFile]]] 249d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 249e0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 249f0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $24a00 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 testInstallVs200 24a10 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 5LogFile.. 24a20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 24a30 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 24a40 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 24a50 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 24a60 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 24a70 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
24a80 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68  08LogFile]]]} th
24a90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
24aa0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 24ab0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 st_channel$test
24ac0 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67  InstallVs2008Log
24ad0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
24ae0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
24af0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
24b00 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
24b10 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
24b20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 24b30 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f tInstallVs2010Lo 24b40 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b gFile]]]} then { 24b50 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 24b60 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
24b70 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74  hannel $testInst 24b80 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 24b90 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 24ba0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 24bb0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 24bc0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 24bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 . [fi 24be0 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 le tail$testIns
24bf0 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c  tallVs2012LogFil
24c00 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
24c10 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
24c20 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 24c30 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 el$testInstallV
24c40 73 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20  s2012LogFile..
24c50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
24c60 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e     if {![haveCon
24c70 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
24c80 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20  rgs file_ \..
24c90 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
24ca0 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c  ail $testInstall 24cb0 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d Vs2013LogFile]]] 24cc0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 24cd0 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 24ce0 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $24cf0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 24d00 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 3LogFile.. 24d10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 24d20 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 24d30 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 24d40 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 24d50 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 24d60 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
24d70 31 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68  15LogFile]]]} th
24d80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
24d90 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 24da0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 st_channel$test
24db0 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67  InstallVs2015Log
24dc0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
24dd0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
24de0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
24df0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
24e00 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
24e10 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 24e20 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 tUninstallVs2005 24e30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e LogFile]]]} then 24e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 24e50 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
24e60 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e  _channel $testUn 24e70 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 installVs2005Log 24e80 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 24e90 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 24ea0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 24eb0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 24ec0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 24ed0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
24ee0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38  tUninstallVs2008
24ef0 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  LogFile]]]} then
24f00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
24f10 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 24f20 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e _channel$testUn
24f30 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67  installVs2008Log
24f40 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
24f50 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
24f60 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
24f70 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
24f80 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
24f90 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 24fa0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 tUninstallVs2010 24fb0 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e LogFile]]]} then 24fc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 24fd0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
24fe0 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e  _channel $testUn 24ff0 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 installVs2010Log 25000 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 25010 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 25020 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 25030 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 25040 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 25050 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
25060 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32  tUninstallVs2012
25070 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  LogFile]]]} then
25080 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
25090 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 250a0 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e _channel$testUn
250b0 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67  installVs2012Log
250c0 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
250d0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
250e0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
250f0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
25100 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
25110 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 25120 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 tUninstallVs2013 25130 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e LogFile]]]} then 25140 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 25150 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
25160 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e  _channel $testUn 25170 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 installVs2013Log 25180 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d File.. }. 25190 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 251a0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 251b0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 251c0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 251d0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
251e0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35  tUninstallVs2015
251f0 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  LogFile]]]} then
25200 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68   {..          ch
25210 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74  eckForFile $test 25220 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e _channel$testUn
25230 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67  installVs2015Log
25240 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  File..        }.
25250 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
25260 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e  ....    proc run
25270 53 51 4c 69 74 65 54 65 73 74 46 69 6c 65 73 45  SQLiteTestFilesE
25280 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20  pilogue {} {..
25290 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b 0d      uplevel 1 {.
252a0 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d  .        unset -
252b0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20  nocomplain \..
252c0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e            testUn
252d0 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67  installVs2015Log
252e0 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61  File testUninsta
252f0 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20  llVs2013LogFile
25300 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  \..            t
25310 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
25320 31 32 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e  12LogFile testUn
25330 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67  installVs2010Log
25340 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
25350 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c      testUninstal
25360 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 74  lVs2008LogFile t
25370 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30  estUninstallVs20
25380 30 35 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20  05LogFile \..
25390 20 20 20 20 20 20 20 20 20 74 65 73 74 49 6e 73           testIns
253a0 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c  tallVs2015LogFil
253b0 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32  e testInstallVs2
253c0 30 31 33 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20  013LogFile \..
253d0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 49 6e            testIn
253e0 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69  stallVs2012LogFi
253f0 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  le testInstallVs
25400 32 30 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20  2010LogFile \..
25410 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 49             testI
25420 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46  nstallVs2008LogF
25430 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56  ile testInstallV
25440 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 0d 0a  s2005LogFile....
25450 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
25460 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20  ocomplain \..
25470 20 20 20 20 20 20 20 20 20 6e 6f 72 74 68 77 69           northwi
25480 6e 64 45 66 44 62 46 69 6c 65 20 74 65 73 74 4c  ndEfDbFile testL
25490 69 6e 71 4f 75 74 46 69 6c 65 20 5c 0d 0a 20 20  inqOutFile \..
254a0 20 20 20 20 20 20 20 20 20 20 77 61 6c 44 62 46            walDbF
254b0 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65  ile nonWalDbFile
254c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65  ....        unse
254d0 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d  t -nocomplain \.
254e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
254f0 74 45 66 36 45 78 65 46 69 6c 65 20 74 65 73 74  tEf6ExeFile test
25500 4c 69 6e 71 45 78 65 46 69 6c 65 20 5c 0d 0a 20  LinqExeFile \..
25510 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 45             testE
25520 78 65 46 69 6c 65 20 73 79 73 74 65 6d 44 61 74  xeFile systemDat
25530 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c  aSQLiteEf6DllFil
25540 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
25550 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74   systemDataSQLit
25560 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 73 79 73  eLinqDllFile sys
25570 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
25580 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
25590 20 20 20 20 73 71 6c 69 74 65 44 65 73 69 67 6e      sqliteDesign
255a0 65 72 44 6c 6c 46 69 6c 65 20 69 6e 73 74 61 6c  erDllFile instal
255b0 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20  lerExeFile \..
255c0 20 20 20 20 20 20 20 20 20 20 65 6e 74 69 74 79            entity
255d0 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65  FrameworkDllFile
255e0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
255f0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75  .....    proc ru
25600 6e 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f  nSQLiteTestEpilo
25610 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  gue {} {..
25620 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
25630 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75   Skip running ou
25640 72 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f 67 75  r custom epilogu
25650 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e  e if the main on
25660 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  e has been..
25670 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65    #       skippe
25680 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
25690 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
256a0 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67  ists ::no(epilog
256b0 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e  ue.eagle)]} then
256c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
256d0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
256e0 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73  how when our tes
256f0 74 73 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 65  ts actually ende
25700 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20  d (now)...
25710 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75    #..        tpu
25720 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 25730 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 25740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 25750 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e --- System.Data. 25760 53 51 4c 69 74 65 20 74 65 73 74 73 20 65 6e 64 SQLite tests end 25770 65 64 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 ed at " \.. 25780 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f [clock fo 25790 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f rmat [clock seco 257a0 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 nds]] \n].... 257b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 257c0 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 # NOTE: Load the 257d0 20 22 65 70 69 6c 6f 67 75 65 22 20 63 75 73 74 "epilogue" cust 257e0 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f om per-user and/ 257f0 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 or per-host test 25800 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 25810 20 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d settings now.. 25820 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 25830 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c uplevel 1 [l 25840 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 ist loadSQLiteTe 25850 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 stSettings$::te
25860 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 65 70 69 6c  st_channel .epil
25870 6f 67 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ogue]....
25880 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55   #..        # BU
25890 47 46 49 58 3a 20 42 65 66 6f 72 65 20 63 68 65  GFIX: Before che
258a0 63 6b 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20  cking the final
258b0 72 65 73 6f 75 72 63 65 73 20 69 6e 20 75 73 65  resources in use
258c0 20 62 79 20 53 51 4c 69 74 65 2c 20 6d 61 6b 65   by SQLite, make
258d0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
258e0 20 20 20 20 73 75 72 65 20 62 6f 74 68 20 6f 66      sure both of
258f0 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61   the PRAGMA rela
25900 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61  ted directory na
25910 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a  mes are freed...
25920 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
25930 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
25940 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a  eDirectories $:: 25950 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 test_channel tru 25960 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e.... #.. 25970 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 25980 41 6c 73 6f 20 72 65 70 6f 72 74 20 74 68 65 20 Also report the 25990 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 61 resource usage a 259a0 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 fter running the 259b0 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 tests... 259c0 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f #.. repo 259d0 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 rtSQLiteResource 259e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
259f0 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  l....        #..
25a00 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
25a10 52 65 70 6f 72 74 20 74 68 65 20 63 72 69 74 69  Report the criti
25a20 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74  cal handle count
25a30 73 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20  s after running
25a40 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20  the tests...
25a50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 67      #..        g
25a60 65 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f  etSQLiteHandleCo
25a70 75 6e 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  unts $::test_cha 25a80 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nnel.... 25a90 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 25aa0 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c E: If necessary, 25ab0 20 64 69 73 61 62 6c 65 20 73 68 61 72 65 64 2d disable shared- 25ac0 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d cache mode now.. 25ad0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 25ae0 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 if {[hasRunt 25af0 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 imeOption shared 25b00 43 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a Cache]} then {.. 25b10 20 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 enable 25b20 53 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 SharedCache$::t
25b30 65 73 74 5f 63 68 61 6e 6e 65 6c 20 66 61 6c 73  est_channel fals
25b40 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  e..        }..
25b50 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
25b60 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
25b70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25b80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25b90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25ba0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25bb0 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
25bc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25bd0 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e  ### END Eagle ON
25be0 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23 23  LY #############
25bf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25c00 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
25c10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25c20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25c30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25c40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25c50 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a  ##..  }....  #..
25c60 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74    # NOTE: Save t
25c70 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
25c80 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e  irectory contain
25c90 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a  ing this file...
25ca0 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66    #..  if {![inf
25cb0 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f  o exists common_
25cc0 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
25cd0 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d   {..    set comm
25ce0 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66 69  on_directory [fi
25cf0 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f  le dirname [info
25d00 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a   script]]..  }..
25d10 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
25d20 20 50 72 6f 76 69 64 65 20 74 68 65 20 53 79 73   Provide the Sys
25d30 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
25d40 74 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f 20  test package to
25d50 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  the interpreter.
25d60 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67 65  ..  #..  package
25d70 20 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d 2e   provide System.
25d80 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74  Data.SQLite.Test
25d90 20 31 2e 30 0d 0a 7d 0d 0a                        1.0..}..