System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 31e381daaebcf3598b64f5ba412b152e9eca85a9:

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 69  }.....    proc i
44e0: 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20  sBuildAvailable
44f0: 7b 20 6e 61 74 69 76 65 20 64 69 72 65 63 74 6f  { native directo
4500: 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20  ry {varName ""}
4510: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
4520: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
4530: 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c  d the fully qual
4540: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20  ified file name
4550: 66 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79 20  for the primary
4560: 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..
4570: 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69  #       containi
4580: 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  ng the System.Da
4590: 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65  ta.SQLite manage
45a0: 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49  d components.  I
45b0: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
45c0: 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65 64   should be noted
45d0: 20 74 68 61 74 20 74 68 69 73 20 61 73 73 65 6d   that this assem
45e0: 62 6c 79 20 66 69 6c 65 20 6d 61 79 20 61 6c 73  bly file may als
45f0: 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20  o contain the..
4600: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74       #       nat
4610: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20  ive components,
4620: 69 66 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c  if a native buil
4630: 64 20 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20 20  d is in use...
4640: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74      #..      set
4650: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20   fileName [file
4660: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
4670: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79   join $directory 4680: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 \.. Sy 4690: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 46a0: 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 .dll]].... 46b0: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 if {![file exist 46c0: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
46d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
46e0: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
46f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
4700: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
4710: 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74  tempt to automat
4720: 69 63 61 6c 6c 79 20 64 65 74 65 63 74 20 69 66  ically detect if
4730: 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73 73   the primary ass
4740: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20  embly..      #
4750: 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 61 6e       contains an
4760: 79 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65  y native compone
4770: 6e 74 73 2c 20 69 66 20 6e 65 63 65 73 73 61 72  nts, if necessar
4780: 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  y...      #..
4790: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
47a0: 65 6e 67 74 68 20 24 6e 61 74 69 76 65 5d 20 3d  ength $native] = 47b0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 47c0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 47d0: 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 length$varName
47e0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
47f0: 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31           upvar 1
4800: 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61   $varName$varNa
4810: 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  me..        }...
4820: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74  .        set nat
4830: 69 76 65 20 5b 69 73 4d 69 78 65 64 4d 6f 64 65  ive [isMixedMode
4840: 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 4850: 6d 65 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 me$varName]..
4860: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
4870: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
4880: 49 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 61  If the primary a
4890: 73 73 65 6d 62 6c 79 20 61 6c 73 6f 20 63 6f 6e  ssembly also con
48a0: 74 61 69 6e 73 20 74 68 65 20 6e 61 74 69 76 65  tains the native
48b0: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20 20   components,..
48c0: 20 20 20 20 23 20 20 20 20 20 20 20 77 65 20 68      #       we h
48d0: 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77  ave everything w
48e0: 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23  e need...      #
48f0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74  ..      if {$nat 4900: 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ive} then {.. 4910: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 4920: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 4930: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 4940: 54 45 3a 20 57 68 61 74 20 69 73 20 74 68 65 20 TE: What is the 4950: 61 72 63 68 69 74 65 63 74 75 72 65 20 66 6f 72 architecture for 4960: 20 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d 0a this machine?.. 4970: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 4980: 65 74 20 61 72 63 68 69 74 65 63 74 75 72 65 20 et architecture 4990: 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f [machineToPlatfo 49a0: 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f rm$::tcl_platfo
49b0: 72 6d 28 6d 61 63 68 69 6e 65 29 20 74 72 75 65  rm(machine) true
49c0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
49d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61 74      # NOTE: What
49e0: 20 69 73 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   is the platform
49f0: 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e   for this machin
4a00: 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e?..      #..
4a10: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
4a20: 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f  [machineToPlatfo
4a30: 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  rm $::tcl_platfo 4a40: 72 6d 28 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d 0a rm(machine)].... 4a50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 4a60: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 NOTE: Build the 4a70: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 fully qualified 4a80: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 file name for t 4a90: 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d he interop assem 4aa0: 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 bly.. # 4ab0: 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 containing th 4ac0: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ 4ad0: 4c 69 74 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 Lite native comp 4ae0: 6f 6e 65 6e 74 73 2e 20 20 49 66 20 74 68 69 73 onents. If this 4af0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 4b00: 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 20 file exists, we 4b10: 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 72 should have ever 4b20: 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d ything we need.. 4b30: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 4b40: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi 4b50: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 4b60: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 ile join$direct
4b70: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
4b80: 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 53   $architecture S 4b90: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c QLite.Interop.dl 4ba0: 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 l]].... if 4bb0: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 {[file exists$f
4bc0: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
4bd0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4be0: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a   true..      }..
4bf0: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
4c00: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
4c10: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
4c20: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 4c30: 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f$platfo
4c40: 72 6d 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  rm SQLite.Intero
4c50: 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20  p.dll]]....
4c60: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
4c70: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th 4c80: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 4c90: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 4ca0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 }.... set 4cb0: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e fileName [file n 4cc0: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 4cd0: 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 join$directory
4ce0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c  \..          SQL
4cf0: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d  ite.Interop.dll]
4d00: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
4d10: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 4d20: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 4d30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t 4d40: 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rue.. }.... 4d50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 4d60: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 NOTE: Build the 4d70: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 fully qualified 4d80: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 file name for t 4d90: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a he SQLite core.. 4da0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 # li 4db0: 62 72 61 72 79 2e 20 20 49 66 20 74 68 69 73 20 brary. If this 4dc0: 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 20 file exists, we 4dd0: 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 72 should have ever 4de0: 79 74 68 69 6e 67 20 77 65 0d 0a 20 20 20 20 20 ything we.. 4df0: 20 23 20 20 20 20 20 20 20 6e 65 65 64 2e 0d 0a # need... 4e00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 4e10: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c et fileName [fil 4e20: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 4e30: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f le join$directo
4e40: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ry \..
4e50: 24 61 72 63 68 69 74 65 63 74 75 72 65 20 73 71  $architecture sq 4e60: 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 lite3.dll]].... 4e70: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 if {[file e 4e80: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
4e90: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
4ea0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
4eb0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
4ec0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
4ed0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
4ee0: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74  ile join $direct 4ef0: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ory \.. 4f00: 20 24 70 6c 61 74 66 6f 72 6d 20 73 71 6c 69 74$platform sqlit
4f10: 65 33 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20  e3.dll]]....
4f20: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
4f30: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t 4f40: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 4f50: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 4f60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 }.... set 4f70: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 4f80: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 4f90: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 join$directory
4fa0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 71   \..          sq
4fb0: 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  lite3.dll]]....
4fc0: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
4fd0: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] 4fe0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 4ff0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. 5000: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 5010: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 5020: 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 6e 61 74 One or more nat 5030: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6e ive components n 5040: 65 65 64 65 64 20 62 79 20 53 79 73 74 65 6d 2e eeded by System. 5050: 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 Data.SQLite.. 5060: 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 6d # are m 5070: 69 73 73 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 issing... # 5080: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 .. return f 5090: 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a alse.. }..... 50a0: 20 20 20 20 70 72 6f 63 20 69 73 52 65 6c 65 61 proc isRelea 50b0: 73 65 41 76 61 69 6c 61 62 6c 65 20 7b 20 64 69 seAvailable { di 50c0: 72 65 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d 65 rectory {varName 50d0: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ""} } {.. 50e0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 50f0: 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 th$varName] > 0
5100: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
5110: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 5120: 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 me$varName..
5130: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
5140: 74 75 72 6e 20 5b 69 73 42 75 69 6c 64 41 76 61  turn [isBuildAva
5150: 69 6c 61 62 6c 65 20 22 22 20 24 64 69 72 65 63  ilable "" $direc 5160: 74 6f 72 79 20 24 76 61 72 4e 61 6d 65 5d 0d 0a tory$varName]..
5170: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
5180: 6f 63 20 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65  oc joinBuildDire
5190: 63 74 6f 72 79 20 7b 20 6e 61 74 69 76 65 20 70  ctory { native p
51a0: 61 74 68 20 79 65 61 72 20 70 6c 61 74 66 6f 72  ath year platfor
51b0: 6d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  m configuration
51c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
51d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75      # NOTE: Figu
51e0: 72 65 20 6f 75 74 20 61 6e 64 20 74 68 65 6e 20  re out and then
51f0: 72 65 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 79  return the fully
5200: 20 71 75 61 6c 69 66 69 65 64 20 70 61 74 68 20   qualified path
5210: 74 6f 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 20  to the build..
5220: 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65      #       dire
5230: 63 74 6f 72 79 20 62 61 73 65 64 20 6f 6e 20 61  ctory based on a
5240: 6c 6c 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73  ll the arguments
5250: 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
5260: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20   caller...
5270: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61  #..      if {$na 5280: 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 tive} then {.. 5290: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 return [fi 52a0: 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 le join$path bi
52b0: 6e 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72  n $year$platfor
52c0: 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  m $configuration 52d0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 52e0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 52f0: 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 n [file join$pa
5300: 74 68 20 62 69 6e 20 24 79 65 61 72 20 24 63 6f  th bin $year$co
5310: 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 69 6e 5d  nfiguration bin]
5320: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
5330: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
5340: 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20  tBuildDirectory
5350: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
5360: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65       # NOTE: See
5370: 20 69 66 20 74 68 65 20 22 6e 61 74 69 76 65 22   if the "native"
5380: 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20   runtime option
5390: 68 61 73 20 62 65 65 6e 20 73 65 74 2e 20 20 49  has been set.  I
53a0: 66 20 73 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20  f so, use the..
53b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72       #       dir
53c0: 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6d  ectory for the m
53d0: 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
53e0: 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68 65 20 6e  ly (a.k.a. the n
53f0: 61 74 69 76 65 20 69 6e 74 65 72 6f 70 0d 0a 20  ative interop..
5400: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73       #       ass
5410: 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65 6e 61 62  embly).  To enab
5420: 6c 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 76  le this option v
5430: 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  ia the command l
5440: 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d 0a 20 20  ine, enter a..
5450: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 6d      #       comm
5460: 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f  and similar to o
5470: 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
5480: 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20  ing (all on one
5490: 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d  line):..      #.
54a0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45  .      #       E
54b0: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69  agleShell.exe -i
54c0: 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75 6e 74 69  nitialize -runti
54d0: 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d  meOption native.
54e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
54f0: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
5500: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
5510: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
5520: 20 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69     To enable thi
5530: 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65  s option via the
5540: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72   command line pr
5550: 69 6f 72 20 74 6f 20 74 68 65 20 22 62 65 74 61  ior to the "beta
5560: 20 31 36 22 0d 0a 20 20 20 20 20 20 23 20 20 20   16"..      #
5570: 20 20 20 20 72 65 6c 65 61 73 65 20 6f 66 20 45      release of E
5580: 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  agle, the follow
5590: 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 74  ing command must
55a0: 20 62 65 20 75 73 65 64 20 69 6e 73 74 65 61 64   be used instead
55b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
55c0: 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e 65  (also all on one
55d0: 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23   line):..      #
55e0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
55f0: 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d  EagleShell.exe -
5600: 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70 6f 73 74  initialize -post
5610: 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20  Initialize..
5620: 20 20 23 20 20 20 20 20 20 20 20 20 22 6f 62 6a    #         "obj
5630: 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72  ect invoke Inter
5640: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
5650: 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f   AddRuntimeOptio
5660: 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20 20 20 20  n native"..
5670: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
5680: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
5690: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
56a0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
56b0: 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 64 69  xists ::build_di
56c0: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20  rectory] && \..
56d0: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
56e0: 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64   length $::build 56f0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 5700: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 5710: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 5720: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e TE: The location 5730: 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 64 69 of the build di 5740: 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e rectory has been 5750: 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 overridden;.. 5760: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 5770: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 20 erefore, use it 5780: 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 verbatim... 5790: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 57a0: 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 69 turn$::build_di
57b0: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
57c0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
57d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
57e0: 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74 69  TE: If the "nati
57f0: 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69  ve" runtime opti
5800: 6f 6e 20 69 73 20 73 65 74 2c 20 74 68 65 20 6d  on is set, the m
5810: 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62  ixed-mode assemb
5820: 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ly..        #
5830: 20 20 20 20 69 73 20 62 65 69 6e 67 20 74 65 73      is being tes
5840: 74 65 64 2e 20 20 49 6e 20 74 68 61 74 20 63 61  ted.  In that ca
5850: 73 65 2c 20 74 68 65 20 70 61 74 68 20 74 6f 20  se, the path to
5860: 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74  the build direct
5870: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ory..        #
5880: 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e 74 61 69       will contai
5890: 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e  n the platform n
58a0: 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74 68 65 20  ame and all the
58b0: 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74  binaries under t
58c0: 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  est..        #
58d0: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 70       should be p
58e0: 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20 64  resent in that d
58f0: 69 72 65 63 74 6f 72 79 2e 20 20 49 66 20 74 68  irectory.  If th
5900: 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69  e "native" runti
5910: 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  me..        #
5920: 20 20 20 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f      option is no
5930: 74 20 73 65 74 2c 20 74 68 65 20 62 75 69 6c 64  t set, the build
5940: 20 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c 20   directory will
5950: 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f  be considered to
5960: 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20   be..        #
5970: 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 2d 6e       "platform-n
5980: 65 75 74 72 61 6c 22 2c 20 77 69 74 68 20 74 68  eutral", with th
5990: 65 20 6e 6f 74 61 62 6c 65 20 65 78 63 65 70 74  e notable except
59a0: 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 74 69 76  ion of any nativ
59b0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
59c0: 20 20 20 61 73 73 65 6d 62 6c 79 20 28 65 2e 67     assembly (e.g
59d0: 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  . "SQLite.Intero
59e0: 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65 64 20 74  p.dll") copied t
59f0: 68 65 72 65 20 64 75 72 69 6e 67 20 74 68 65 0d  here during the.
5a00: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
5a10: 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 69   build process i
5a20: 74 73 65 6c 66 2e 20 20 49 66 20 74 68 65 20 62  tself.  If the b
5a30: 75 69 6c 64 20 70 72 6f 63 65 73 73 20 73 6f 6d  uild process som
5a40: 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74 0d 0a 20  ehow does not..
5a50: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
5a60: 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 20 61  opy the native a
5a70: 73 73 65 6d 62 6c 79 20 66 6f 72 20 74 68 69 73  ssembly for this
5a80: 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f 73 74 20   platform, most
5a90: 6f 66 20 74 68 65 20 74 65 73 74 73 0d 0a 20 20  of the tests..
5aa0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
5ab0: 20 74 68 65 20 73 75 69 74 65 20 77 69 6c 6c 20   the suite will
5ac0: 73 69 6d 70 6c 79 20 62 65 20 73 6b 69 70 70 65  simply be skippe
5ad0: 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73 70  d.  Generally sp
5ae0: 65 61 6b 69 6e 67 2c 20 74 68 65 72 65 0d 0a 20  eaking, there..
5af0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
5b00: 72 65 20 74 77 6f 20 77 61 79 73 20 74 6f 20 62  re two ways to b
5b10: 75 69 6c 64 20 74 68 65 20 62 69 6e 61 72 69 65  uild the binarie
5b20: 73 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  s when preparing
5b30: 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a 20 20 20   to run the..
5b40: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
5b50: 74 20 73 75 69 74 65 3a 0d 0a 20 20 20 20 20 20  t suite:..
5b60: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20    #..        #
5b70: 20 20 20 20 20 31 2e 20 42 75 69 6c 64 20 74 68       1. Build th
5b80: 65 20 73 65 70 61 72 61 74 65 20 6d 61 6e 61 67  e separate manag
5b90: 65 64 20 61 6e 64 20 6e 61 74 69 76 65 20 61 73  ed and native as
5ba0: 73 65 6d 62 6c 69 65 73 20 75 73 69 6e 67 20 73  semblies using s
5bb0: 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ome..        #
5bc0: 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73          commands
5bd0: 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20   similar to:..
5be0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
5bf0: 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c   #          buil
5c00: 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72  d.bat ${Configur 5c10: 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e 6c ation}ManagedOnl 5c20: 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 y${Platform}..
5c30: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
5c40: 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f    build.bat ${Co 5c50: 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e 61 74 69 nfiguration}Nati 5c60: 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 veOnly${Platfor
5c70: 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  m}..        #..
5c80: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
5c90: 20 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 67    Where ${Config 5ca0: 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 uration} is eith 5cb0: 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 er "Debug" or "R 5cc0: 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 elease" and.. 5cd0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 # 5ce0: 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65${Platform} is e
5cf0: 69 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f 72  ither "Win32" or
5d00: 20 22 78 36 34 22 2e 0d 0a 20 20 20 20 20 20 20   "x64"...
5d10: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20   #..        #
5d20: 20 20 20 20 32 2e 20 42 75 69 6c 64 20 74 68 65      2. Build the
5d30: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
5d40: 6d 62 6c 79 20 75 73 69 6e 67 20 61 20 63 6f 6d  mbly using a com
5d50: 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 3a  mand similar to:
5d60: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
5d70: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20       #
5d80: 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66  build.bat ${Conf 5d90: 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b 50 6c 61 iguration}${Pla
5da0: 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20  tform}..
5db0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  #..        #
5dc0: 20 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f        Where ${Co 5dd0: 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 nfiguration} is 5de0: 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f either "Debug" o 5df0: 72 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d r "Release" and. 5e00: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 5e10: 20 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20${Platform}
5e20: 69 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32  is either "Win32
5e30: 22 20 6f 72 20 22 78 36 34 22 2e 20 20 49 66 20  " or "x64".  If
5e40: 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 0d  this command is.
5e50: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
5e60: 20 20 20 20 75 73 65 64 2c 20 76 61 72 69 6f 75      used, variou
5e70: 73 20 74 65 73 74 73 20 74 68 61 74 20 72 65 71  s tests that req
5e80: 75 69 72 65 20 73 75 70 70 6c 65 6d 65 6e 74 61  uire supplementa
5e90: 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20  ry managed..
5ea0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 61      #          a
5eb0: 73 73 65 6d 62 6c 69 65 73 20 28 65 2e 67 2e 20  ssemblies (e.g.
5ec0: 4c 49 4e 51 29 20 6d 61 79 20 62 65 20 73 6b 69  LINQ) may be ski
5ed0: 70 70 65 64 20 75 6e 6c 65 73 73 20 74 68 6f 73  pped unless thos
5ee0: 65 20 62 69 6e 61 72 69 65 73 0d 0a 20 20 20 20  e binaries..
5ef0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 61      #          a
5f00: 72 65 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20  re subsequently
5f10: 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 68 65 20  copied into the
5f20: 63 6f 72 72 65 63 74 20 64 69 72 65 63 74 6f 72  correct director
5f30: 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20 20 20 20  y (i.e. by..
5f40: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 22      #          "
5f50: 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22 29 2e 0d  test_all.bat")..
5f60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
5f70: 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 74 65      #       Note
5f80: 20 74 68 61 74 20 61 6c 6c 20 6f 66 20 74 68 65   that all of the
5f90: 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e 64 73 20   build commands
5fa0: 61 62 6f 76 65 20 77 69 6c 6c 20 64 65 66 61 75  above will defau
5fb0: 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a 20 20 20  lt to using..
5fc0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
5fd0: 20 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e 20   latest version
5fe0: 6f 66 20 4d 53 42 75 69 6c 64 20 61 76 61 69 6c  of MSBuild avail
5ff0: 61 62 6c 65 20 61 6e 64 20 74 68 65 20 22 74 65  able and the "te
6000: 73 74 5f 79 65 61 72 22 20 6d 61 79 0d 0a 20 20  st_year" may..
6010: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65        #       ne
6020: 65 64 20 74 6f 20 62 65 20 61 64 6a 75 73 74 65  ed to be adjuste
6030: 64 20 61 63 63 6f 72 64 69 6e 67 6c 79 20 74 6f  d accordingly to
6040: 20 61 63 74 75 61 6c 6c 79 20 72 75 6e 20 74 68   actually run th
6050: 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
6060: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 52         #       R
6070: 65 66 65 72 20 74 6f 20 74 68 65 20 63 6f 6d 6d  efer to the comm
6080: 65 6e 74 73 20 69 6e 20 5b 67 65 74 42 75 69 6c  ents in [getBuil
6090: 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f 72 65 20  dYear] for more
60a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d 0a  information on..
60b0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
60c0: 68 6f 77 20 74 6f 20 73 65 74 20 74 68 69 73 20  how to set this
60d0: 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20  variable...
60e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
60f0: 74 20 6e 61 74 69 76 65 20 5b 68 61 73 52 75 6e  t native [hasRun
6100: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76  timeOption nativ
6110: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  e]....        re
6120: 74 75 72 6e 20 5b 6a 6f 69 6e 42 75 69 6c 64 44  turn [joinBuildD
6130: 69 72 65 63 74 6f 72 79 20 24 6e 61 74 69 76 65  irectory $native 6140: 20 5b 67 65 74 42 75 69 6c 64 42 61 73 65 44 69 [getBuildBaseDi 6150: 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 rectory] \.. 6160: 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c [getBuil 6170: 64 59 65 61 72 5d 20 5b 67 65 74 42 75 69 6c 64 dYear] [getBuild 6180: 50 6c 61 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 Platform$native
6190: 5d 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69  ] [getBuildConfi
61a0: 67 75 72 61 74 69 6f 6e 5d 5d 0d 0a 20 20 20 20  guration]]..
61b0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
61c0: 20 20 20 70 72 6f 63 20 67 65 74 52 65 6c 65 61     proc getRelea
61d0: 73 65 56 65 72 73 69 6f 6e 20 7b 7d 20 7b 0d 0a  seVersion {} {..
61e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
61f0: 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
6200: 74 20 74 68 65 20 72 65 6c 65 61 73 65 20 76 65  t the release ve
6210: 72 73 69 6f 6e 20 66 6f 72 20 75 73 65 20 77 69  rsion for use wi
6220: 74 68 20 74 68 65 20 62 75 69 6c 64 20 64 69 72  th the build dir
6230: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20  ectory..      #
6240: 20 20 20 20 20 20 77 68 65 6e 20 63 68 65 63 6b        when check
6250: 69 6e 67 20 66 6f 72 20 61 76 61 69 6c 61 62 6c  ing for availabl
6260: 65 20 72 65 6c 65 61 73 65 73 2e 0d 0a 20 20 20  e releases...
6270: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
6280: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 72  [info exists ::r
6290: 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20  elease_version]
62a0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
62b0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $62c0: 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f ::release_versio 62d0: 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a n] > 0} then {.. 62e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 62f0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 72 # NOTE: The r 6300: 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20 68 elease version h 6310: 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 as been overridd 6320: 65 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 75 en; therefore, u 6330: 73 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20 23 se it.. # 6340: 20 20 20 20 20 20 20 76 65 72 62 61 74 69 6d 2e verbatim. 6350: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 6360: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 72 return$::r
6370: 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 0d 0a  elease_version..
6380: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
6390: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
63a0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 72 65     # NOTE: No re
63b0: 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20 69 73  lease version is
63c0: 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75   available, retu
63d0: 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  rn an empty stri
63e0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ng...        #
63f0: 20 20 20 20 20 49 74 20 69 73 20 69 6d 70 6f 72       It is impor
6400: 74 61 6e 74 20 74 6f 20 72 65 74 75 72 6e 20 61  tant to return a
6410: 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 68  n empty string h
6420: 65 72 65 20 62 65 63 61 75 73 65 20 74 68 65 0d  ere because the.
6430: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6440: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 69 73 20   result of this
6450: 70 72 6f 63 65 64 75 72 65 20 6d 61 79 20 62 65  procedure may be
6460: 20 75 73 65 64 20 77 69 74 68 20 5b 66 69 6c 65   used with [file
6470: 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20   join]...
6480: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
6490: 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a  rn ""..      }..
64a0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
64b0: 6f 63 20 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  oc getBuildFileN
64c0: 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  ame { fileName {
64d0: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b  platform ""} } {
64e0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
64f0: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73   # NOTE: Returns
6500: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66   the specified f
6510: 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69  ile name as if i
6520: 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69  t were located i
6530: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  n the..      #
6540: 20 20 20 20 20 62 75 69 6c 64 20 64 69 72 65 63       build direc
6550: 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 6e 67  tory, discarding
6560: 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 20 69   any directory i
6570: 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 73 65  nformation prese
6580: 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  nt..      #
6590: 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 6e 61    in the file na
65a0: 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 20 62  me as provided b
65b0: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20  y our caller...
65c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
65d0: 74 20 72 65 73 75 6c 74 20 5b 66 69 6c 65 20 6e  t result [file n
65e0: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
65f0: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
6600: 6e 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63  n [getBuildDirec
6610: 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20  tory] $platform 6620: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
6630: 4e 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20  Name]]]....
6640: 20 23 0d 0a 20 20 20 20 20 20 23 20 48 41 43 4b   #..      # HACK
6650: 3a 20 57 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f  : When running o
6660: 6e 20 57 6f 57 36 34 2c 20 61 73 73 75 6d 65 20  n WoW64, assume
6670: 74 68 65 20 74 65 73 74 20 65 78 65 63 75 74 61  the test executa
6680: 62 6c 65 73 20 61 72 65 20 70 72 65 73 65 6e 74  bles are present
6690: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
66a0: 77 69 74 68 20 74 68 65 20 22 33 32 22 20 73 75  with the "32" su
66b0: 66 66 69 78 20 6f 6e 20 74 68 65 6d 2e 0d 0a 20  ffix on them...
66c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
66d0: 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36   {[isRunningWoW6
66e0: 34 5d 20 26 26 20 5b 66 69 6c 65 20 65 78 74 65  4] && [file exte
66f0: 6e 73 69 6f 6e 20 24 72 65 73 75 6c 74 5d 20 65  nsion $result] e 6700: 71 20 22 2e 65 78 65 22 7d 20 74 68 65 6e 20 7b q ".exe"} then { 6710: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 65 .. set re 6720: 73 75 6c 74 20 5b 61 70 70 65 6e 64 41 72 67 73 sult [appendArgs 6730: 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 [file rootname 6740: 24 72 65 73 75 6c 74 5d 20 33 32 2e 65 78 65 5d$result] 32.exe]
6750: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
6760: 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c     return $resul 6770: 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 t.. }..... 6780: 20 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e 61 proc getExterna 6790: 6c 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d lDirectory {} {. 67a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 67b0: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f # NOTE: This pro 67c0: 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 cedure returns t 67d0: 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 he directory whe 67e0: 72 65 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 re the external 67f0: 62 69 6e 61 72 79 0d 0a 20 20 20 20 20 20 23 20 binary.. # 6800: 20 20 20 20 20 20 66 69 6c 65 73 20 61 72 65 20 files are 6810: 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 located... 6820: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 #.. return 6830: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 6840: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b [file dirname [ 6850: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e file dirname [in 6860: 66 6f 20 62 69 6e 61 72 79 5d 5d 5d 5d 0d 0a 20 fo binary]]]].. 6870: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 6880: 63 20 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 c getBinaryDirec 6890: 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 tory {} {.. 68a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 68b0: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 : This procedure 68c0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 returns the dir 68d0: 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 ectory where the 68e0: 20 74 65 73 74 20 61 70 70 6c 69 63 61 74 69 6f test applicatio 68f0: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 n.. # 6900: 20 69 74 73 65 6c 66 20 28 69 2e 65 2e 20 74 68 itself (i.e. th 6910: 65 20 45 61 67 6c 65 20 73 68 65 6c 6c 29 20 69 e Eagle shell) i 6920: 73 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 73 s located. This 6930: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 61 73 will be used as 6940: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 6950: 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 the destination 6960: 66 6f 72 20 74 68 65 20 63 6f 70 69 65 64 20 53 for the copied S 6970: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 6980: 65 20 6e 61 74 69 76 65 20 61 6e 64 0d 0a 20 20 e native and.. 6990: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 # mana 69a0: 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 28 ged assemblies ( 69b0: 69 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 69 i.e. because thi 69c0: 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 s is one of the 69d0: 66 65 77 20 70 6c 61 63 65 73 0d 0a 20 20 20 20 few places.. 69e0: 20 20 23 20 20 20 20 20 20 20 77 68 65 72 65 20 # where 69f0: 74 68 65 20 43 4c 52 20 77 69 6c 6c 20 61 63 74 the CLR will act 6a00: 75 61 6c 6c 79 20 66 69 6e 64 20 61 6e 64 20 6c ually find and l 6a10: 6f 61 64 20 74 68 65 6d 20 70 72 6f 70 65 72 6c oad them properl 6a20: 79 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 y)... #.. 6a30: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 6a40: 69 73 74 73 20 3a 3a 62 69 6e 61 72 79 5f 64 69 ists ::binary_di 6a50: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 rectory] && \.. 6a60: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 6a70: 20 6c 65 6e 67 74 68 20 24 3a 3a 62 69 6e 61 72 length$::binar
6a80: 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30  y_directory] > 0
6a90: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
6aa0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
6ab0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f  OTE: The locatio
6ac0: 6e 20 6f 66 20 74 68 65 20 62 69 6e 61 72 79 20  n of the binary
6ad0: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
6ae0: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
6af0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6b00: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
6b10: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20  t verbatim...
6b20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6b30: 72 65 74 75 72 6e 20 24 3a 3a 62 69 6e 61 72 79  return $::binary 6b40: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 _directory.. 6b50: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 6b60: 20 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f return [info 6b70: 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 binary].. 6b80: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 6b90: 20 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e 61 proc getExterna 6ba0: 6c 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 lFileName { file 6bb0: 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 Name } {.. 6bc0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 6bd0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70 65 Returns the spe 6be0: 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 cified file name 6bf0: 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20 6c as if it were l 6c00: 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 ocated in the.. 6c10: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 # dir 6c20: 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e ectory containin 6c30: 67 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62 g the external b 6c40: 69 6e 61 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 inaries... 6c50: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 #.. return 6c60: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 6c70: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 [file join [get 6c80: 45 78 74 65 72 6e 61 6c 44 69 72 65 63 74 6f 72 ExternalDirector 6c90: 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a y]$fileName]]..
6ca0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
6cb0: 6f 63 20 67 65 74 42 69 6e 61 72 79 46 69 6c 65  oc getBinaryFile
6cc0: 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20  Name { fileName
6cd0: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20  {platform ""} }
6ce0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
6cf0: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e    # NOTE: Return
6d00: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  s the specified
6d10: 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20  file name as if
6d20: 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20  it were located
6d30: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  in the..      #
6d40: 20 20 20 20 20 20 62 69 6e 61 72 79 20 64 69 72        binary dir
6d50: 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69  ectory, discardi
6d60: 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79  ng any directory
6d70: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65   information pre
6d80: 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20  sent..      #
6d90: 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20      in the file
6da0: 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64  name as provided
6db0: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   by our caller..
6dc0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
6dd0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74  return [file nat
6de0: 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ivename \..
6df0: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20       [file join
6e00: 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74  [getBinaryDirect
6e10: 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b  ory] $platform [ 6e20: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e file tail$fileN
6e30: 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c  ame]]]..    }...
6e40: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f  ..    proc getCo
6e50: 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  reBinaryFileName
6e60: 20 7b 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d   { {platform ""}
6e70: 20 7b 73 74 61 6e 64 61 72 64 20 66 61 6c 73 65   {standard false
6e80: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
6e90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
6ea0: 74 75 72 6e 73 20 74 68 65 20 66 75 6c 6c 20 70  turns the full p
6eb0: 61 74 68 20 66 6f 72 20 74 68 65 20 66 69 6c 65  ath for the file
6ec0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the
6ed0: 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..
6ee0: 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76     #       nativ
6ef0: 65 20 6c 69 62 72 61 72 79 20 63 6f 64 65 20 66  e library code f
6f00: 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d  or this platform
6f10: 2e 20 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20  .  First, check
6f20: 61 6e 64 20 73 65 65 20 69 66 0d 0a 20 20 20 20  and see if..
6f30: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51    #       the SQ
6f40: 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65  Lite core native
6f50: 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72   library has alr
6f60: 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64  eady been loaded
6f70: 2e 20 20 4e 65 78 74 2c 0d 0a 20 20 20 20 20 20  .  Next,..
6f80: 23 20 20 20 20 20 20 20 66 61 6c 6c 62 61 63 6b  #       fallback
6f90: 20 74 6f 20 77 68 61 74 20 74 68 65 20 66 75 6c   to what the ful
6fa0: 6c 20 70 61 74 68 20 73 68 6f 75 6c 64 20 62 65  l path should be
6fb0: 2c 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68  , based on wheth
6fc0: 65 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  er the..      #
6fd0: 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65        mixed-mode
6fe0: 20 61 73 73 65 6d 62 6c 79 20 69 73 20 62 65 69   assembly is bei
6ff0: 6e 67 20 75 73 65 64 20 61 6e 64 20 74 68 65 20  ng used and the
7000: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72  name of the curr
7010: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ent..      #
7020: 20 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20     platform...
7030: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
7040: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
7050: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
7060: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
7070: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
7080: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
7090: 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
70a0: 65 4d 65 74 68 6f 64 73 20 5f 53 51 4c 69 74 65  eMethods _SQLite
70b0: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 46 69 6c 65  NativeModuleFile
70c0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 20 66 69  Name..      } fi
70d0: 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 26 20  leName] == 0 &&
70e0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $70f0: 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 fileName] > 0} t 7100: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 7110: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 7120: 3a 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 : The SQLite cor 7130: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library 7140: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 has already bee 7150: 6e 20 6c 6f 61 64 65 64 20 76 69 61 0d 0a 20 20 n loaded via.. 7160: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 7170: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library 7180: 20 70 72 65 2d 6c 6f 61 64 65 72 2e 20 20 52 65 pre-loader. Re 7190: 74 75 72 6e 20 74 68 61 74 20 66 69 6c 65 20 6e turn that file n 71a0: 61 6d 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ame now... 71b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 71c0: 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 urn$fileName..
71d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
71e0: 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f  if {[hasRuntimeO
71f0: 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74  ption native]} t
7200: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
7210: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
7220: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 69 78  : Return the mix
7230: 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79  ed-mode assembly
7240: 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20   file name...
7250: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7260: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74  return [file nat
7270: 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ivename \..
7280: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
7290: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
72a0: 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d  ctory] $platform 72b0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 72c0: 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 ite.dll]].. 72d0: 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 6e } elseif {$stan
72e0: 64 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  dard} then {..
72f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
7300: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20   # NOTE: Return
7310: 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20  the native-only
7320: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite
7330: 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d  library file nam
7340: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
7350: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66         return [f
7360: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c  ile nativename \
7370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
7380: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e  ile join [getBin
7390: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70  aryDirectory] $p 73a0: 6c 61 74 66 6f 72 6d 20 73 71 6c 69 74 65 33 2e latform sqlite3. 73b0: 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 dll]].. } e 73c0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 73d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 73e0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74 : Return the nat 73f0: 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 ive-only interop 7400: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e assembly file n 7410: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ame... #. 7420: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 7430: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 7440: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 7450: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 [file join [getB 7460: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 inaryDirectory] 7470: 24 70 6c 61 74 66 6f 72 6d 20 53 51 4c 69 74 65$platform SQLite
7480: 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a  .Interop.dll]]..
7490: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
74a0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43  ...    proc getC
74b0: 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 20 7b  ommonDirectory {
74c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
74d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
74e0: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72   procedure retur
74f0: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  ns the directory
7500: 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20   where the test
7510: 73 63 72 69 70 74 73 0d 0a 20 20 20 20 20 20 23  scripts..      #
7520: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
7530: 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65   located.  By de
7540: 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74  fault, this just
7550: 20 72 65 74 75 72 6e 73 20 74 68 65 20 45 61 67   returns the Eag
7560: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  le..      #
7570: 20 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f    binary directo
7580: 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ry...      #..
7590: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
75a0: 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69  ists ::common_di
75b0: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20  rectory] && \..
75c0: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
75d0: 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f   length $::commo 75e0: 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 n_directory] > 0 75f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 7600: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 7610: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 7620: 6e 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 n of the common 7630: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 directory has be 7640: 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 en set;.. 7650: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f # therefo 7660: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 re, use it... 7670: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 7680: 72 65 74 75 72 6e 20 24 3a 3a 63 6f 6d 6d 6f 6e return$::common
7690: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  _directory..
76a0: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66    } elseif {[inf
76b0: 6f 20 65 78 69 73 74 73 20 3a 3a 76 65 6e 64 6f  o exists ::vendo
76c0: 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20  r_directory] &&
76d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
76e0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 76  ring length $::v 76f0: 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d endor_directory] 7700: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 7710: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 7720: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 # NOTE: The loc 7730: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 76 65 6e ation of the ven 7740: 64 6f 72 20 64 69 72 65 63 74 6f 72 79 20 68 61 dor directory ha 7750: 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 s been set;.. 7760: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 7770: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d refore, use it.. 7780: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 7790: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 76 65 return$::ve
77a0: 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 0d 0a  ndor_directory..
77b0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
77c0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
77d0: 63 6c 5f 6c 69 62 72 61 72 79 5d 20 26 26 20 5c  cl_library] && \
77e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
77f0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 63  ing length $::tc 7800: 6c 5f 6c 69 62 72 61 72 79 5d 20 3e 20 30 20 26 l_library] > 0 & 7810: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 7820: 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 file isdirectory 7830: 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d$::tcl_library]
7840: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
7850: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
7860: 4f 54 45 3a 20 54 68 65 20 76 61 72 69 61 62 6c  OTE: The variabl
7870: 65 20 77 69 74 68 20 74 68 65 20 6c 6f 63 61 74  e with the locat
7880: 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 69 70  ion of the scrip
7890: 74 20 6c 69 62 72 61 72 79 20 69 73 0d 0a 20 20  t library is..
78a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65        #       se
78b0: 74 20 61 6e 64 20 61 70 70 65 61 72 73 20 74 6f  t and appears to
78c0: 20 62 65 20 61 20 72 65 61 6c 20 64 69 72 65 63   be a real direc
78d0: 74 6f 72 79 20 28 69 2e 65 2e 20 6e 6f 74 20 65  tory (i.e. not e
78e0: 6d 62 65 64 64 65 64 0d 0a 20 20 20 20 20 20 20  mbedded..
78f0: 20 23 20 20 20 20 20 20 20 77 69 74 68 69 6e 20   #       within
7900: 61 20 66 69 6c 65 29 3b 20 74 68 65 72 65 66 6f  a file); therefo
7910: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
7920: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7930: 72 65 74 75 72 6e 20 24 3a 3a 74 63 6c 5f 6c 69  return $::tcl_li 7940: 62 72 61 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 brary.. } e 7950: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 7960: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 7970: 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 : Fallback to th 7980: 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 e directory cont 7990: 61 69 6e 69 6e 67 20 74 68 65 20 65 78 65 63 75 aining the execu 79a0: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 table... 79b0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 79c0: 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d n [info binary]. 79d0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 79e0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 79f0: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 DatabaseDirector 7a00: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 7a10: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 7a20: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 his procedure re 7a30: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 turns the direct 7a40: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 ory where the te 7a50: 73 74 20 64 61 74 61 62 61 73 65 73 0d 0a 20 20 st databases.. 7a60: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 7a70: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 ld be located. 7a80: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 By default, this 7a90: 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 just uses the t 7aa0: 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 emporary.. 7ab0: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 7ac0: 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 y configured for 7ad0: 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 this system... 7ae0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 7af0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 7b00: 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 :database_direct 7b10: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ory] && \.. 7b20: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 7b30: 67 74 68 20 24 3a 3a 64 61 74 61 62 61 73 65 5f gth$::database_
7b40: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
7b50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
7b60: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
7b70: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
7b80: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database
7b90: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
7ba0: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
7bb0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
7bc0: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
7bd0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
7be0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 7bf0: 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 :database_direct 7c00: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ory.. } els 7c10: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 eif {[info exist 7c20: 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 s ::scratch_dire 7c30: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 ctory] && \.. 7c40: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 7c50: 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63 68 ength$::scratch
7c60: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d  _directory] > 0}
7c70: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
7c80: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
7c90: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e  TE: The location
7ca0: 20 6f 66 20 74 68 65 20 73 63 72 61 74 63 68 20   of the scratch
7cb0: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
7cc0: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
7cd0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
7ce0: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
7cf0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
7d00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 7d10: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f :scratch_directo 7d20: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else 7d30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 7d40: 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 rn [getTemporary 7d50: 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a Path].. }.. 7d60: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7d70: 6f 63 20 67 65 74 54 65 6d 70 6f 72 61 72 79 44 oc getTemporaryD 7d80: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. 7d90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 7da0: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 7db0: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 dure returns the 7dc0: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where 7dd0: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 the temporary f 7de0: 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 iles.. # 7df0: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f should be lo 7e00: 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 cated. By defau 7e10: 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 lt, this just us 7e20: 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 es the temporary 7e30: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 7e40: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 directory config 7e50: 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 ured for this sy 7e60: 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a stem... #.. 7e70: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 7e80: 65 78 69 73 74 73 20 3a 3a 74 65 6d 70 6f 72 61 exists ::tempora 7e90: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 ry_directory] && 7ea0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 7eb0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
7ec0: 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74  temporary_direct
7ed0: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
7ee0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
7ef0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
7f00: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
7f10: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
7f20: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
7f30: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
7f40: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
7f50: 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20  fore, use it...
7f60: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
7f70: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 6d 70    return $::temp 7f80: 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d orary_directory. 7f90: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 7fa0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 7fb0: 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 scratch_director 7fc0: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 y] && \.. 7fd0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 7fe0: 68 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 h$::scratch_dir
7ff0: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
8000: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
8010: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
8020: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
8030: 74 68 65 20 73 63 72 61 74 63 68 20 64 69 72 65  the scratch dire
8040: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f  ctory has been o
8050: 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20  verridden;..
8060: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72      #       ther
8070: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a  efore, use it...
8080: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
8090: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 63 72     return $::scr 80a0: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a atch_directory.. 80b0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 80c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 80d0: 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74 68 getTemporaryPath 80e0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 80f0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 8100: 65 74 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70 etExecuteOnSetup 8110: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 {} {.. if 8120: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 8130: 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 execute_on_setup 8140: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 8150: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 8160: 20 24 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73$::execute_on_s
8170: 65 74 75 70 5d 20 3e 20 30 7d 20 74 68 65 6e 20  etup] > 0} then
8180: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
8190: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
81a0: 74 75 72 6e 20 74 68 65 20 63 6f 6e 66 69 67 75  turn the configu
81b0: 72 65 64 20 53 51 4c 20 74 6f 20 65 78 65 63 75  red SQL to execu
81c0: 74 65 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f  te during the co
81d0: 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  nnection..
81e0: 20 20 23 20 20 20 20 20 20 20 73 65 74 75 70 20    #       setup
81f0: 70 72 6f 63 65 64 75 72 65 20 28 69 2e 65 2e 20  procedure (i.e.
8200: 66 6f 72 20 65 76 65 72 79 20 74 65 73 74 20 64  for every test d
8210: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
8220: 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  on)...        #.
8230: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
8240: 24 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65  $::execute_on_se 8250: 74 75 70 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 tup.. } els 8260: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 8270: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 8280: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 65 72 By default, ther 8290: 65 20 69 73 20 6e 6f 20 53 51 4c 20 74 6f 20 65 e is no SQL to e 82a0: 78 65 63 75 74 65 20 64 75 72 69 6e 67 20 74 68 xecute during th 82b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 e connection.. 82c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se 82d0: 74 75 70 20 70 72 6f 63 65 64 75 72 65 20 28 69 tup procedure (i 82e0: 2e 65 2e 20 66 6f 72 20 65 76 65 72 79 20 74 65 .e. for every te 82f0: 73 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e st database conn 8300: 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 ection)... 8310: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 8320: 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d urn "".. }. 8330: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 8340: 72 6f 63 20 67 65 74 54 65 73 74 4f 76 65 72 72 roc getTestOverr 8350: 69 64 65 73 50 72 65 61 6d 62 6c 65 20 7b 20 7b idesPreamble { { 8360: 65 78 74 72 61 56 61 72 4e 61 6d 65 73 20 22 22 extraVarNames "" 8370: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set 8380: 20 76 61 72 4e 61 6d 65 73 20 5b 6c 69 73 74 5d varNames [list] 8390: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 83a0: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 # NOTE: If av 83b0: 61 69 6c 61 62 6c 65 2c 20 73 74 61 72 74 20 77 ailable, start w 83c0: 69 74 68 20 74 68 65 20 6d 61 73 74 65 72 20 6c ith the master l 83d0: 69 73 74 20 6f 66 20 74 65 73 74 20 6f 76 65 72 ist of test over 83e0: 72 69 64 65 0d 0a 20 20 20 20 20 20 23 20 20 20 ride.. # 83f0: 20 20 20 20 76 61 72 69 61 62 6c 65 73 2e 0d 0a variables... 8400: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 8410: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 8420: 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 ::test_overrides 8430: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 8440: 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 [llength$::te
8450: 73 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 3e 20  st_overrides] >
8460: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
8470: 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20     eval lappend
8480: 76 61 72 4e 61 6d 65 73 20 24 3a 3a 74 65 73 74  varNames $::test 8490: 5f 6f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20 _overrides.. 84a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 84b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 84c0: 20 72 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 requested by ou 84d0: 72 20 63 61 6c 6c 65 72 2c 20 61 64 64 20 61 6e r caller, add an 84e0: 79 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 y additional var 84f0: 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 iable.. # 8500: 20 20 20 20 20 6e 61 6d 65 73 20 74 6f 20 63 6f names to co 8510: 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 py now... # 8520: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 .. if {[lle 8530: 6e 67 74 68 20 24 65 78 74 72 61 56 61 72 4e 61 ngth$extraVarNa
8540: 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  mes] > 0} then {
8550: 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c  ..        eval l
8560: 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20  append varNames
8570: 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 0d 0a  $extraVarNames.. 8580: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 8590: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 85a0: 3a 20 42 75 69 6c 64 20 74 68 65 20 73 63 72 69 : Build the scri 85b0: 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 62 pt fragment to b 85c0: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 70 72 e returned by pr 85d0: 6f 63 65 73 73 69 6e 67 20 65 61 63 68 0d 0a 20 ocessing each.. 85e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 # var 85f0: 69 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61 iable name and a 8600: 64 64 69 6e 67 20 74 68 65 20 6e 65 63 65 63 65 dding the necece 8610: 73 73 61 72 79 20 73 63 72 69 70 74 20 66 72 61 ssary script fra 8620: 67 6d 65 6e 74 73 20 66 6f 72 0d 0a 20 20 20 20 gments for.. 8630: 20 20 23 20 20 20 20 20 20 20 65 61 63 68 20 6f # each o 8640: 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ne... #.. 8650: 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 22 set result " 8660: 22 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 ".... forea 8670: 63 68 20 76 61 72 4e 61 6d 65 20 24 76 61 72 4e ch varName$varN
8680: 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
8690: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
86a0: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 71 75 61  E: Build the qua
86b0: 6c 69 66 69 65 64 20 67 6c 6f 62 61 6c 20 76 61  lified global va
86c0: 72 69 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20  riable name...
86d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
86e0: 20 73 65 74 20 66 75 6c 6c 56 61 72 4e 61 6d 65   set fullVarName
86f0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 3a 3a 20   [appendArgs ::
8700: 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  $varName].... 8710: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 8720: 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 # NOTE: Does the 8730: 20 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 20 variable exist 8740: 69 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 in this interpre 8750: 74 65 72 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 20 ter context?.. 8760: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 8770: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 8780: 73 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 7d s$fullVarName]}
8790: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
87a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
87b0: 23 20 4e 4f 54 45 3a 20 41 70 70 65 6e 64 20 61  # NOTE: Append a
87c0: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
87d0: 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 74   to the result t
87e0: 68 61 74 20 77 69 6c 6c 20 63 6f 72 72 65 63 74  hat will correct
87f0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ly..          #
8800: 20 20 20 20 20 20 63 6f 70 79 20 61 6e 79 20 63        copy any c
8810: 6f 6e 74 61 69 6e 65 64 20 76 61 6c 75 65 20 74  ontained value t
8820: 6f 20 61 6e 6f 74 68 65 72 20 69 6e 74 65 72 70  o another interp
8830: 72 65 74 65 72 20 63 6f 6e 74 65 78 74 2e 0d 0a  reter context...
8840: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
8850: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65         append re
8860: 73 75 6c 74 20 5c 6e 20 22 73 65 74 20 22 20 24  sult \n "set " $8870: 66 75 6c 6c 56 61 72 4e 61 6d 65 20 22 20 5c 7b fullVarName " \{ 8880: 22 20 5b 73 65 74 20 24 66 75 6c 6c 56 61 72 4e " [set$fullVarN
8890: 61 6d 65 5d 20 5c 7d 0d 0a 20 20 20 20 20 20 20  ame] \}..
88a0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
88b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
88c0: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 72 65 73  NOTE: If the res
88d0: 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ult contains one
88e0: 20 6f 72 20 6d 6f 72 65 20 73 63 72 69 70 74 20   or more script
88f0: 66 72 61 67 6d 65 6e 74 73 2c 20 61 70 70 65 6e  fragments, appen
8900: 64 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20  d a..      #
8910: 20 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20 20 20     newline...
8920: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
8930: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $8940: 72 65 73 75 6c 74 5d 20 3e 20 30 7d 20 74 68 65 result] > 0} the 8950: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 n {.. app 8960: 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 0d 0a 20 end result \n.. 8970: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 8980: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a return$result..
8990: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
89a0: 6f 63 20 6d 6f 76 65 53 79 73 74 65 6d 44 61 74  oc moveSystemDat
89b0: 61 53 51 4c 69 74 65 44 6c 6c 43 6f 6e 66 69 67  aSQLiteDllConfig
89c0: 20 7b 20 7b 72 65 73 74 6f 72 65 20 66 61 6c 73   { {restore fals
89d0: 65 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73  e} {verbose fals
89e0: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  e} } {..      se
89f0: 74 20 64 69 72 65 63 74 6f 72 79 20 5b 6f 62 6a  t directory [obj
8a00: 65 63 74 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f  ect invoke AppDo
8a10: 6d 61 69 6e 20 43 75 72 72 65 6e 74 44 6f 6d 61  main CurrentDoma
8a20: 69 6e 2e 42 61 73 65 44 69 72 65 63 74 6f 72 79  in.BaseDirectory
8a30: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  ]....      if {[
8a40: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64  string length $d 8a50: 69 72 65 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 irectory] == 0} 8a60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 8a70: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 if {$verbose} th
8a80: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
8a90: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 8aa0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 8ab0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 8ac0: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped 8ad0: 20 6d 6f 76 69 6e 67 20 5c 22 53 79 73 74 65 6d moving \"System 8ae0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 8af0: 2e 63 6f 6e 66 69 67 5c 22 2c 20 22 20 5c 0d 0a .config\", " \.. 8b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e "n 8b10: 6f 20 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 o base directory 8b20: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. 8b30: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d . return. 8b40: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 8b50: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 31 set fileName(1 8b60: 29 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a ) [file normaliz 8b70: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b e \.. [ 8b80: 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 file join$direc
8b90: 74 6f 72 79 20 53 79 73 74 65 6d 2e 44 61 74 61  tory System.Data
8ba0: 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66  .SQLite.dll.conf
8bb0: 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 73 65  ig]]....      se
8bc0: 74 20 66 69 6c 65 4e 61 6d 65 28 32 29 20 5b 61  t fileName(2) [a
8bd0: 70 70 65 6e 64 41 72 67 73 20 24 66 69 6c 65 4e  ppendArgs $fileN 8be0: 61 6d 65 28 31 29 20 2e 6d 6f 76 65 64 5d 0d 0a ame(1) .moved].. 8bf0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 .. if {$res
8c00: 74 6f 72 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  tore} then {..
8c10: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
8c20: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 8c30: 28 32 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 (2)]} then {.. 8c40: 20 20 20 20 20 20 20 20 66 69 6c 65 20 72 65 6e file ren 8c50: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 ame$fileName(2)
8c60: 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 0d 0a 0d   $fileName(1)... 8c70: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 . if {$
8c80: 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d  verbose} then {.
8c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
8ca0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 8cb0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 8cc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 8cd0: 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 5c 22 "---- moved \" 8ce0: 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 22 "$fileName(2) "
8cf0: 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20  \" to \"" \..
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69               $fi 8d10: 6c 65 4e 61 6d 65 28 31 29 20 5c 22 5c 6e 5d 0d leName(1) \"\n]. 8d20: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 8d30: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 8d40: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 if {$v
8d50: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
8d70: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 8d80: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 8d90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 8da0: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d "---- skipped m 8db0: 6f 76 69 6e 67 20 5c 22 22 20 24 66 69 6c 65 4e oving \""$fileN
8dc0: 61 6d 65 28 32 29 20 5c 0d 0a 20 20 20 20 20 20  ame(2) \..
8dd0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69            "\", i
8de0: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
8df0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
8e00: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
8e10: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
8e20: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
8e30: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 8e40: 28 31 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 (1)]} then {.. 8e50: 20 20 20 20 20 20 20 20 66 69 6c 65 20 72 65 6e file ren 8e60: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 ame$fileName(1)
8e70: 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 0d 0a 0d   $fileName(2)... 8e80: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 . if {$
8e90: 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d  verbose} then {.
8ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
8eb0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 8ec0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 8ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 8ee0: 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 5c 22 "---- moved \" 8ef0: 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 22 "$fileName(1) "
8f00: 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20  \" to \"" \..
8f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69               $fi 8f20: 6c 65 4e 61 6d 65 28 32 29 20 5c 22 5c 6e 5d 0d leName(2) \"\n]. 8f30: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 8f40: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 8f50: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 if {$v
8f60: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
8f70: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
8f80: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 8f90: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 8fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 8fb0: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d "---- skipped m 8fc0: 6f 76 69 6e 67 20 5c 22 22 20 24 66 69 6c 65 4e oving \""$fileN
8fd0: 61 6d 65 28 31 29 20 5c 0d 0a 20 20 20 20 20 20  ame(1) \..
8fe0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69            "\", i
8ff0: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
9000: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
9010: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
9020: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
9030: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 41 70 70  .    proc getApp
9040: 44 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20 7b  DomainPreamble {
9050: 20 7b 70 72 65 66 69 78 20 22 22 7d 20 7b 73 75   {prefix ""} {su
9060: 66 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20  ffix ""} } {..
9070: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
9080: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
9090: 75 72 65 20 72 65 74 75 72 6e 73 20 61 20 74 65  ure returns a te
90a0: 73 74 20 73 65 74 75 70 20 73 63 72 69 70 74 20  st setup script
90b0: 66 72 61 67 6d 65 6e 74 20 73 75 69 74 61 62 6c  fragment suitabl
90c0: 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20  e for..      #
90d0: 20 20 20 20 20 65 76 61 6c 75 61 74 69 6f 6e 20       evaluation
90e0: 62 79 20 61 6e 20 69 6e 74 65 72 70 72 65 74 65  by an interprete
90f0: 72 20 63 72 65 61 74 65 64 20 69 6e 20 61 6e 20  r created in an
9100: 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61  isolated applica
9110: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
9120: 20 20 20 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65      domain.  The
9130: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
9140: 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20   being returned
9150: 77 69 6c 6c 20 62 65 20 73 75 72 72 6f 75 6e 64  will be surround
9160: 65 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20  ed by..      #
9170: 20 20 20 20 20 74 68 65 20 70 72 65 66 69 78 20       the prefix
9180: 61 6e 64 20 73 75 66 66 69 78 20 22 73 63 72 69  and suffix "scri
9190: 70 74 20 66 72 61 67 6d 65 6e 74 73 22 20 73 70  pt fragments" sp
91a0: 65 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63  ecified by our c
91b0: 61 6c 6c 65 72 2c 0d 0a 20 20 20 20 20 20 23 20  aller,..      #
91c0: 20 20 20 20 20 20 69 66 20 61 6e 79 2e 20 20 54        if any.  T
91d0: 68 65 20 65 6e 74 69 72 65 20 73 63 72 69 70 74  he entire script
91e0: 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20   being returned
91f0: 77 69 6c 6c 20 62 65 20 73 75 62 73 74 69 74 75  will be substitu
9200: 74 65 64 20 76 69 61 0d 0a 20 20 20 20 20 20 23  ted via..      #
9210: 20 20 20 20 20 20 20 5b 73 75 62 73 74 5d 2c 20         [subst],
9220: 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f  in the context o
9230: 66 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 62 65  f our caller, be
9240: 66 6f 72 65 20 62 65 69 6e 67 20 72 65 74 75 72  fore being retur
9250: 6e 65 64 2e 0d 0a 20 20 20 20 20 20 23 20 20 20  ned...      #
9260: 20 20 20 20 54 68 69 73 20 73 74 65 70 20 69 73      This step is
9270: 20 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74 68   necessary so th
9280: 61 74 20 73 6f 6d 65 20 6c 69 6d 69 74 65 64 20  at some limited
9290: 63 6f 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61 74  context informat
92a0: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 23 20 20 20  ion,..      #
92b0: 20 20 20 20 70 72 69 6d 61 72 69 6c 79 20 72 65      primarily re
92c0: 6c 61 74 65 64 20 74 6f 20 74 68 65 20 74 65 73  lated to the tes
92d0: 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73  ting directories
92e0: 2c 20 63 61 6e 20 62 65 20 74 72 61 6e 73 66 65  , can be transfe
92f0: 72 72 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  rred..      #
9300: 20 20 20 20 74 6f 20 74 68 65 20 69 6e 74 65 72      to the inter
9310: 70 72 65 74 65 72 20 69 6e 20 74 68 65 20 69 73  preter in the is
9320: 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69  olated applicati
9330: 6f 6e 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e  on domain, makin
9340: 67 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20  g it..      #
9350: 20 20 20 20 61 62 6c 65 20 74 6f 20 73 75 63 63      able to succ
9360: 65 73 73 66 75 6c 6c 79 20 72 75 6e 20 74 65 73  essfully run tes
9370: 74 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20  ts that require
9380: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74  one or more of t
9390: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
93a0: 20 20 66 69 6c 65 73 20 69 6e 20 6f 6e 65 20 6f    files in one o
93b0: 66 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69  f the testing di
93c0: 72 65 63 74 6f 72 69 65 73 2e 20 20 43 61 6c 6c  rectories.  Call
93d0: 65 72 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 20  ers should keep
93e0: 69 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  in..      #
93f0: 20 20 6d 69 6e 64 20 74 68 61 74 20 74 68 65 20    mind that the
9400: 74 65 73 74 20 73 63 72 69 70 74 20 66 72 61 67  test script frag
9410: 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72  ment being retur
9420: 6e 65 64 20 63 61 6e 6e 6f 74 20 72 65 6c 79 20  ned cannot rely
9430: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
9440: 20 20 61 6e 79 20 73 63 72 69 70 74 20 6c 69 62    any script lib
9450: 72 61 72 79 20 70 72 6f 63 65 64 75 72 65 73 20  rary procedures
9460: 74 68 61 74 20 61 72 65 20 6e 6f 74 20 70 72 6f  that are not pro
9470: 76 69 64 65 64 20 62 79 20 74 68 65 20 45 61 67  vided by the Eag
9480: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  le..      #
9490: 20 20 6c 69 62 72 61 72 79 20 70 61 63 6b 61 67    library packag
94a0: 65 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61  e (i.e. "init.ea
94b0: 67 6c 65 22 29 2c 20 69 6e 63 6c 75 64 69 6e 67  gle"), including
94c0: 20 74 68 6f 73 65 20 70 72 6f 76 69 64 65 64 20   those provided
94d0: 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  by..      #
94e0: 20 20 74 68 65 20 45 61 67 6c 65 20 74 65 73 74    the Eagle test
94f0: 20 70 61 63 6b 61 67 65 2c 20 75 6e 6c 65 73 73   package, unless
9500: 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69   the file contai
9510: 6e 69 6e 67 20 74 68 65 6d 20 69 73 20 6c 6f 61  ning them is loa
9520: 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ded..      #
9530: 20 20 20 6d 61 6e 75 61 6c 6c 79 20 76 69 61 20     manually via
9540: 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 63 68 61  some other mecha
9550: 6e 69 73 6d 20 28 65 2e 67 2e 20 62 79 20 69 6e  nism (e.g. by in
9560: 63 6c 75 64 69 6e 67 20 61 70 70 72 6f 70 72 69  cluding appropri
9570: 61 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ate..      #
9580: 20 20 20 5b 70 61 63 6b 61 67 65 20 72 65 71 75     [package requ
9590: 69 72 65 5d 20 6f 72 20 5b 73 6f 75 72 63 65 5d  ire] or [source]
95a0: 20 63 6f 6d 6d 61 6e 64 73 20 69 6e 20 74 68 65   commands in the
95b0: 20 70 72 65 66 69 78 20 6f 72 20 73 75 66 66 69   prefix or suffi
95c0: 78 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  x..      #
95d0: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
95e0: 73 29 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20 76  s).  Also, all v
95f0: 61 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63  ariable referenc
9600: 65 73 20 61 6e 64 20 61 6c 6c 20 6e 65 73 74 65  es and all neste
9610: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
9620: 20 63 6f 6d 6d 61 6e 64 73 20 28 69 2e 65 2e 20   commands (i.e.
9630: 74 68 6f 73 65 20 69 6e 20 73 71 75 61 72 65 20  those in square
9640: 62 72 61 63 6b 65 74 73 29 20 63 6f 6e 74 61 69  brackets) contai
9650: 6e 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c  ned in the final
9660: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
9670: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20  script fragment
9680: 77 69 6c 6c 20 65 6e 64 20 75 70 20 62 65 69 6e  will end up bein
9690: 67 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74  g evaluated in t
96a0: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68  he context of th
96b0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
96c0: 20 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70 72   calling interpr
96d0: 65 74 65 72 20 61 6e 64 20 6e 6f 74 20 74 68 65  eter and not the
96e0: 20 74 61 72 67 65 74 20 69 6e 74 65 72 70 72 65   target interpre
96f0: 74 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 74  ter created in t
9700: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
9710: 20 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69    isolated appli
9720: 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 20 75 6e  cation domain un
9730: 6c 65 73 73 20 74 68 65 20 64 6f 6c 6c 61 72 20  less the dollar
9740: 73 69 67 6e 73 20 61 6e 64 2f 6f 72 20 73 71 75  signs and/or squ
9750: 61 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  are..      #
9760: 20 20 20 62 72 61 63 6b 65 74 73 20 61 72 65 20     brackets are
9770: 73 70 65 63 69 61 6c 6c 79 20 71 75 6f 74 65 64  specially quoted
9780: 20 77 69 74 68 20 62 61 63 6b 73 6c 61 73 68 65   with backslashe
9790: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
97a0: 20 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65 76     return [uplev
97b0: 65 6c 20 31 20 5b 6c 69 73 74 20 73 75 62 73 74  el 1 [list subst
97c0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 72   [appendArgs $pr 97d0: 65 66 69 78 20 7b 0d 0a 20 20 20 20 20 20 20 20 efix {.. 97e0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 97f0: 45 3a 20 54 68 65 20 5c 5b 6f 62 6a 65 63 74 5c E: The $object\ 9800: 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 62 65 ] command may be 9810: 20 6d 69 73 73 69 6e 67 20 69 6e 20 73 6f 6d 65 missing in some 9820: 20 45 61 67 6c 65 20 63 6f 72 65 0d 0a 20 20 20 Eagle core.. 9830: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 # lib 9840: 72 61 72 79 20 63 6f 6e 66 69 67 75 72 61 74 69 rary configurati 9850: 6f 6e 73 2e 20 20 43 6c 6f 6e 69 6e 67 20 61 6e ons. Cloning an 9860: 64 20 75 73 69 6e 67 20 74 68 65 20 70 72 6f 63 d using the proc 9870: 65 64 75 72 65 0d 0a 20 20 20 20 20 20 20 20 23 edure.. # 9880: 20 20 20 20 20 20 20 5c 5b 63 68 61 6e 67 65 4e \[changeN 9890: 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 ativeRuntimeOpti 98a0: 6f 6e 5c 5d 20 6d 61 79 20 68 65 6c 70 20 74 6f on$ may help to 98b0: 20 6d 69 74 69 67 61 74 65 20 74 68 69 73 2e 0d mitigate this.. 98c0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 98d0: 20 20 20 20 70 72 6f 63 20 63 68 61 6e 67 65 4e proc changeN 98e0: 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 ativeRuntimeOpti 98f0: 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 on \.. 9900: 20 20 7b 5b 69 6e 66 6f 20 61 72 67 73 20 63 68 {[info args ch 9910: 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d angeNativeRuntim 9920: 65 4f 70 74 69 6f 6e 5d 7d 20 5c 0d 0a 20 20 20 eOption]} \.. 9930: 20 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f 20 {[info 9940: 62 6f 64 79 20 63 68 61 6e 67 65 4e 61 74 69 76 body changeNativ 9950: 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d 7d eRuntimeOption]} 9960: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 .... catc 9970: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 h {.. c 9980: 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 hangeNativeRunti 9990: 6d 65 4f 70 74 69 6f 6e 20 5b 68 61 73 52 75 6e meOption [hasRun 99a0: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 timeOption nativ 99b0: 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 e].. }.. 99c0: 20 20 20 20 20 7d 20 5b 67 65 74 54 65 73 74 4f } [getTestO 99d0: 76 65 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 verridesPreamble 99e0: 20 5b 6c 69 73 74 20 70 61 74 68 20 74 65 73 74 [list path test 99f0: 5f 63 68 61 6e 6e 65 6c 5d 5d 20 24 73 75 66 66 _channel]]$suff
9a00: 69 78 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  ix]]]..    }....
9a10: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70  .    proc tryCop
9a20: 79 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 7b 0d  yExternalFile {.
9a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c  .            fil
9a40: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20  eName {platform
9a50: 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65  ""} {newFileName
9a60: 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61   ""} {verbose fa
9a70: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
9a80: 73 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61  set sourceFileNa
9a90: 6d 65 20 5b 67 65 74 45 78 74 65 72 6e 61 6c 46  me [getExternalF
9aa0: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam 9ab0: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b e].... if { 9ac0: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 ![file exists$s
9ad0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20  ourceFileName]}
9ae0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9af0: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68  if {$verbose} th 9b00: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 9b10: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
9b20: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
9b30: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
9b40: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64     "---- skipped
9b50: 20 63 6f 70 79 69 6e 67 20 65 78 74 65 72 6e 61   copying externa
9b60: 6c 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72  l file \"" $sour 9b70: 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 ceFileName \.. 9b80: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c "\", 9b90: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 it does not exi 9ba0: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 st\n"].. 9bb0: 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 }.. retur 9bc0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... 9bd0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 9be0: 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e length$newFileN
9bf0: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
9c00: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61  ..        set ta
9c10: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65  rgetFileName [ge
9c20: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
9c30: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c  $newFileName$pl
9c40: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d  atform]..      }
9c50: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
9c60: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e   set targetFileN
9c70: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
9c80: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 9c90: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20$platform]..
9ca0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65     }....      se
9cb0: 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72  t targetDirector
9cc0: 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  y [file dirname
9cd0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d  $targetFileName] 9ce0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c 9cf0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 9d00: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 if {![file exist 9d10: 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f s$targetDirecto
9d20: 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ry]} then {..
9d30: 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69         file mkdi
9d40: 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f  r $targetDirecto 9d50: 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 ry.. }.. 9d60: 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 file copy 9d70: 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 -force$sourceF
9d80: 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46  ileName $targetF 9d90: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d ileName.. } 9da0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 9db0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
9dc0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
9dd0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
9de0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
9df0: 6f 70 69 65 64 20 65 78 74 65 72 6e 61 6c 20 66  opied external f
9e00: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f  ile from \"" $so 9e10: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 urceFileName "\" 9e20: 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 to \"" \.. 9e30: 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69$targetFi
9e40: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20  leName \"\n]..
9e50: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
9e60: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 9e70: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 9e80: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 9e90: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 "---- fai 9ea0: 6c 65 64 20 74 6f 20 63 6f 70 79 20 65 78 74 65 led to copy exte 9eb0: 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f 6d 20 5c rnal file from \ 9ec0: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ""$sourceFileNa
9ed0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
9ee0: 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61    "\" to \"" $ta 9ef0: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c rgetFileName \"\ 9f00: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. 9f10: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 9f20: 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c tryCopyBinaryFil 9f30: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 9f40: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 fileName {platf 9f50: 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 orm ""} {newFile 9f60: 4e 61 6d 65 20 22 22 7d 20 7b 76 65 72 62 6f 73 Name ""} {verbos 9f70: 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 e false} } {.. 9f80: 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 69 set sourceFi 9f90: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 leName [getBinar 9fa0: 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e yFileName$fileN
9fb0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a  ame $platform].. 9fc0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 .. if {![fi 9fd0: 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 le exists$sourc
9fe0: 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  eFileName]} then
9ff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
a000: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b  $verbose} then { a010: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput a020: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
a030: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
a040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
a050: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70  ---- skipped cop
a060: 79 69 6e 67 20 62 69 6e 61 72 79 20 66 69 6c 65  ying binary file
a070: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65   \"" $sourceFile a080: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. a090: 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f "\", it do a0a0: 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d es not exist\n"] a0b0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. a0c0: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 return.. a0d0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if a0e0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length a0f0: 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e$newFileName] >
a100: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
a110: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69      set targetFi
a120: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64  leName [getBuild
a130: 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c  FileName $newFil a140: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d eName$platform]
a150: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
a160: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61  ..        set ta
a170: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65  rgetFileName [ge
a180: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24  tBuildFileName $a190: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
a1a0: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  rm]..      }....
a1b0: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74        set target
a1c0: 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20  Directory [file
a1d0: 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46  dirname $targetF a1e0: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... a1f0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. a200: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 if {![fi a210: 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65 le exists$targe
a220: 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65  tDirectory]} the
a230: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66  n {..          f
a240: 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65  ile mkdir $targe a250: 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 tDirectory.. a260: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 }.. f a270: 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 ile copy -force a280: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20$sourceFileName
a290: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d  $targetFileName. a2a0: 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 . }] == 0} a2b0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. a2c0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
a2d0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
a2e0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
a2f0: 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 69   "---- copied bi
a300: 6e 61 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c  nary file from \
a310: 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  "" $sourceFileNa a320: 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d me "\" to \"" \. a330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 61 .$ta
a340: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c  rgetFileName \"\
a350: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  n]..      } else
a360: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
a370: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe a380: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. a390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- a3a0: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 -- failed to cop a3b0: 79 20 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 y binary file fr a3c0: 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 om \""$sourceFi
a3d0: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
a3e0: 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22        "\" to \""
a3f0: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65   $targetFileName a400: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d \"\n].. }. a410: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p a420: 72 6f 63 20 74 72 79 43 6f 70 79 42 75 69 6c 64 roc tryCopyBuild a430: 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 File {.. a440: 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c fileName {pl a450: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 atform ""} {newF a460: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65 72 ileName ""} {ver a470: 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d bose false} } {. a480: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 . set sourc a490: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 eFileName [getBu a4a0: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c ildFileName$fil
a4b0: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d  eName $platform] a4c0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b .... if {![ a4d0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 file exists$sou
a4e0: 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  rceFileName]} th
a4f0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
a500: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then a510: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp a520: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
a530: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
a540: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
a550: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63   "---- skipped c
a560: 6f 70 79 69 6e 67 20 62 75 69 6c 64 20 66 69 6c  opying build fil
a570: 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c  e \"" $sourceFil a580: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. a590: 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 "\", it d a5a0: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 oes not exist\n" a5b0: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. a5c0: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 return.. a5d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i a5e0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt a5f0: 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 h$newFileName]
a600: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
a610: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46       set targetF
a620: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61  ileName [getBina
a630: 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46  ryFileName $newF a640: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 ileName$platfor
a650: 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  m]..      } else
a660: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
a670: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b  targetFileName [
a680: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
a690: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61  e $fileName$pla
a6a0: 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d  tform]..      }.
a6b0: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61 72  ...      set tar
a6c0: 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66 69  getDirectory [fi
a6d0: 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72 67  le dirname $targ a6e0: 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 etFileName].... a6f0: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch a700: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 {.. if {! a710: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 61 [file exists$ta
a720: 72 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d 20  rgetDirectory]}
a730: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
a740: 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 74 61    file mkdir $ta a750: 72 67 65 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 rgetDirectory.. a760: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. a770: 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 file copy -for a780: 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ce$sourceFileNa
a790: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  me $targetFileNa a7a0: 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 me.. }] == a7b0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. a7c0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
a7d0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
a7e0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
a7f0: 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64      "---- copied
a800: 20 62 75 69 6c 64 20 66 69 6c 65 20 66 72 6f 6d   build file from
a810: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65   \"" $sourceFile a820: 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 Name "\" to \"" a830: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 \..$
a840: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c  targetFileName \
a850: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  "\n]..      } el
a860: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
a870: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan a880: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs a890: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " a8a0: 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 ---- failed to c a8b0: 6f 70 79 20 62 75 69 6c 64 20 66 69 6c 65 20 66 opy build file f a8c0: 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 rom \""$sourceF
a8d0: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ileName \..
a8e0: 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22         "\" to \"
a8f0: 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  " $targetFileNam a900: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d e \"\n].. } a910: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... a920: 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 69 proc tryDeleteBi a930: 6e 61 72 79 46 69 6c 65 20 7b 20 66 69 6c 65 4e naryFile { fileN a940: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 ame {platform "" a950: 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 } {verbose false a960: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set a970: 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 fileName [getBi a980: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 naryFileName$fi
a990: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d  leName $platform a9a0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 ].... if {! a9b0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
a9c0: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
a9d0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65  .        if {$ve a9e0: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 rbose} then {.. a9f0: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
aa00: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
aa10: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
aa30: 2d 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  - skipped deleti
aa40: 6e 67 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c  ng binary file \
aa50: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a  "" $fileName \.. aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ aa70: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 ", it does not e aa80: 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 xist\n"].. aa90: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 }.. ret aaa0: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a urn.. }.... aab0: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch aac0: 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 {file delete$f
aad0: 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20  ileName}] == 0}
aae0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
aaf0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch ab00: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg ab10: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. ab20: 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 "---- deleted b ab30: 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 inary file \""$
ab40: 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a  fileName \"\n]..
ab50: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
ab60: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: ab70: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a ab80: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. ab90: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f aba0: 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 ailed to delete abb0: 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 binary file \"" abc0: 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d$fileName \"\n].
abd0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
abe0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79  ....    proc try
abf0: 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20  DeleteBuildFile
ac00: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74  { fileName {plat
ac10: 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f 73  form ""} {verbos
ac20: 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  e false} } {..
ac30: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
ac40: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
ac50: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c  me $fileName$pl
ac60: 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20  atform]....
ac70: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
ac80: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t ac90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i aca0: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
acb0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
acc0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha acd0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs ace0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. acf0: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 "---- skipped ad00: 64 65 6c 65 74 69 6e 67 20 62 75 69 6c 64 20 66 deleting build f ad10: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
ad20: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
ad30: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20     "\", it does
ad40: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20  not exist\n"]..
ad50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
ad60: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20    return..
ad70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
ad80: 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
ad90: 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d  te $fileName}] = ada0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. adb0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
adc0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
add0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
ade0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65        "---- dele
adf0: 74 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c  ted build file \
ae00: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ ae10: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 n].. } else ae20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput ae30: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
ae40: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
ae50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
ae60: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c  -- failed to del
ae70: 65 74 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c  ete build file \
ae80: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c  "" $fileName \"\ ae90: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 n].. }.. aea0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc aeb0: 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 tryCopyAssembly aec0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 {.. f aed0: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 ileName {platfor aee0: 6d 20 22 22 7d 20 7b 70 64 62 20 74 72 75 65 7d m ""} {pdb true} aef0: 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d {verbose false} af00: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 43 } {.. tryC af10: 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24 66 69 opyBuildFile$fi
af20: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d  leName $platform af30: 20 22 22 20 24 76 65 72 62 6f 73 65 0d 0a 0d 0a ""$verbose....
af40: 20 20 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20        if {$pdb} af50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. af60: 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 tryCopyBuildFile af70: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. af80: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil af90: 65 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 e rootname$file
afa0: 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61  Name] .pdb] $pla afb0: 74 66 6f 72 6d 20 22 22 20 24 76 65 72 62 6f 73 tform ""$verbos
afc0: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  e..      }..
afd0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
afe0: 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79  ryDeleteAssembly
aff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
b000: 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f  fileName {platfo
b010: 72 6d 20 22 22 7d 20 7b 70 64 62 20 74 72 75 65  rm ""} {pdb true
b020: 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65  } {verbose false
b030: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79  } } {..      try
b040: 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
b050: 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74   $fileName$plat
b060: 66 6f 72 6d 20 24 76 65 72 62 6f 73 65 0d 0a 0d  form $verbose... b070: 0a 20 20 20 20 20 20 69 66 20 7b 24 70 64 62 7d . if {$pdb}
b080: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b090: 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79   tryDeleteBinary
b0a0: 46 69 6c 65 20 5b 61 70 70 65 6e 64 41 72 67 73  File [appendArgs
b0b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
b0c0: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24  [file rootname $b0d0: 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 fileName] .pdb] b0e0: 24 70 6c 61 74 66 6f 72 6d 20 24 76 65 72 62 6f$platform $verbo b0f0: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 se.. }.. b100: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc b110: 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 tryLoadAssembly b120: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 { fileName {plat b130: 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 form ""} } {.. b140: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName b150: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN b160: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ame$fileName $p b170: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 latform].... b180: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. b190: 20 20 20 20 20 20 20 20 73 65 74 20 61 73 73 65 set asse b1a0: 6d 62 6c 79 20 5b 6f 62 6a 65 63 74 20 6c 6f 61 mbly [object loa b1b0: 64 20 2d 6c 6f 61 64 74 79 70 65 20 46 69 6c 65 d -loadtype File b1c0: 20 2d 61 6c 69 61 73 20 24 66 69 6c 65 4e 61 6d -alias$fileNam
b1d0: 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20  e]..      }] ==
b1e0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
b1f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
b200: 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 64 20 74  NOTE: Now, add t
b210: 68 65 20 6e 65 63 65 73 73 61 72 79 20 74 65 73  he necessary tes
b220: 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20  t constraint...
b230: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
b240: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
b250: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b  [file rootname [
b260: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN b270: 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ame]].... b280: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO b290: 54 45 3a 20 47 72 61 62 20 74 68 65 20 69 6d 61 TE: Grab the ima b2a0: 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 ge runtime versi b2b0: 6f 6e 20 66 72 6f 6d 20 74 68 65 20 61 73 73 65 on from the asse b2c0: 6d 62 6c 79 20 62 65 63 61 75 73 65 0d 0a 20 20 mbly because.. b2d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se b2e0: 76 65 72 61 6c 20 74 65 73 74 73 20 72 65 6c 79 veral tests rely b2f0: 20 6f 6e 20 69 74 20 68 61 76 69 6e 67 20 61 20 on it having a b300: 63 65 72 74 61 69 6e 20 76 61 6c 75 65 2e 0d 0a certain value... b310: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. b320: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint b330: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 [appendArgs [fi b340: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
b350: 65 5d 20 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  e] _ \..
b360: 20 20 20 20 5b 24 61 73 73 65 6d 62 6c 79 20 49      [$assembly I b370: 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 mageRuntimeVersi b380: 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 on]].... b390: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT b3a0: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 66 75 E: Return the fu b3b0: 6c 6c 20 70 61 74 68 20 6f 66 20 74 68 65 20 6c ll path of the l b3c0: 6f 61 64 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 oaded file... b3d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. b3e0: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 return$fileName
b3f0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
b400: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
b410: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
b420: 20 69 73 53 51 4c 69 74 65 52 65 61 64 79 20 7b   isSQLiteReady {
b430: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
b440: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
b450: 20 70 72 6f 63 65 64 75 72 65 20 6d 75 73 74 20   procedure must
b460: 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  return non-zero
b470: 6f 6e 6c 79 20 69 66 20 74 68 65 20 53 51 4c 69  only if the SQLi
b480: 74 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  te native..
b490: 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79   #       library
b4a0: 20 61 6e 64 20 74 68 65 20 53 79 73 74 65 6d 2e   and the System.
b4b0: 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61  Data.SQLite mana
b4c0: 67 65 64 20 61 73 73 65 6d 62 6c 79 20 61 72 65  ged assembly are
b4d0: 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23   loaded..      #
b4e0: 20 20 20 20 20 20 20 61 6e 64 20 72 65 61 64 79         and ready
b4f0: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the
b500: 74 65 73 74 20 73 75 69 74 65 2e 20 20 43 75 72  test suite.  Cur
b510: 72 65 6e 74 6c 79 2c 20 74 68 69 73 20 70 72 6f  rently, this pro
b520: 63 65 64 75 72 65 0d 0a 20 20 20 20 20 20 23 20  cedure..      #
b530: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be
b540: 63 61 6c 6c 65 64 20 6f 6e 6c 79 20 61 66 74 65  called only afte
b550: 72 20 74 68 65 20 5b 74 72 79 4c 6f 61 64 41 73  r the [tryLoadAs
b560: 73 65 6d 62 6c 79 5d 20 70 72 6f 63 65 64 75 72  sembly] procedur
b570: 65 20 68 61 73 0d 0a 20 20 20 20 20 20 23 20 20  e has..      #
b580: 20 20 20 20 20 62 65 65 6e 20 63 61 6c 6c 65 64       been called
b590: 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 20 74 68   to probe for th
b5a0: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
b5b0: 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73  Lite managed ass
b5c0: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20  embly..      #
b5d0: 20 20 20 20 20 61 6e 64 20 74 68 65 20 5b 63 68       and the [ch
b5e0: 65 63 6b 46 6f 72 53 51 4c 69 74 65 5d 20 70 72  eckForSQLite] pr
b5f0: 6f 63 65 64 75 72 65 20 68 61 73 20 62 65 65 6e  ocedure has been
b600: 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65   called to probe
b610: 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20   for..      #
b620: 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 6e      the SQLite n
b630: 61 74 69 76 65 20 6c 69 62 72 61 72 79 3b 20 6f  ative library; o
b640: 74 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 70  therwise, this p
b650: 72 6f 63 65 64 75 72 65 20 77 69 6c 6c 20 73 69  rocedure will si
b660: 6d 70 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  mply..      #
b670: 20 20 20 20 61 6c 77 61 79 73 20 72 65 74 75 72      always retur
b680: 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 23  n zero...      #
b690: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
b6a0: 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20  expr {..
b6b0: 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
b6c0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
b6d0: 74 65 5d 20 26 26 20 5b 68 61 76 65 43 6f 6e 73  te] && [haveCons
b6e0: 74 72 61 69 6e 74 20 53 51 4c 69 74 65 5d 0d 0a  traint SQLite]..
b6f0: 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d        }]..    }.
b700: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6d 61 74  ....    proc mat
b710: 63 68 50 6c 61 74 66 6f 72 6d 20 7b 20 70 6c 61  chPlatform { pla
b720: 74 66 6f 72 6d 20 7d 20 7b 0d 0a 20 20 20 20 20  tform } {..
b730: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
b740: 3a 20 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  : An empty strin
b750: 67 20 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f  g for the platfo
b760: 72 6d 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  rm means that th
b770: 65 20 62 75 69 6c 64 20 69 73 20 6e 6f 74 0d 0a  e build is not..
b780: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 70        #       [p
b790: 72 69 6d 61 72 69 6c 79 5d 20 61 20 6e 61 74 69  rimarily] a nati
b7a0: 76 65 20 62 75 69 6c 64 3b 20 74 68 65 72 65 66  ve build; theref
b7b0: 6f 72 65 2c 20 69 74 20 61 6c 77 61 79 73 20 6d  ore, it always m
b7c0: 61 74 63 68 65 73 2e 0d 0a 20 20 20 20 20 20 23  atches...      #
b7d0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
b7e0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat b7f0: 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e form] == 0} then b800: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu b810: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d rn true.. } b820: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. b830: 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 # NOTE: Does b840: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 70 6c the specified pl b850: 61 74 66 6f 72 6d 20 6d 61 74 63 68 20 75 70 20 atform match up b860: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 to the current p b870: 72 6f 63 65 73 73 3f 0d 0a 20 20 20 20 20 20 23 rocess?.. # b880: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70 6c 61 .. if {$pla
b890: 74 66 6f 72 6d 20 65 71 20 5b 6d 61 63 68 69 6e  tform eq [machin
b8a0: 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74  eToPlatform $::t b8b0: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 cl_platform(mach b8c0: 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ine)]} then {.. b8d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr b8e0: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ue.. }.... b8f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # b900: 4e 4f 54 45 3a 20 54 68 65 20 73 70 65 63 69 66 NOTE: The specif b910: 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 ied platform doe b920: 73 20 6e 6f 74 20 6d 61 74 63 68 20 75 70 20 77 s not match up w b930: 69 74 68 20 74 68 65 20 70 6c 61 74 66 6f 72 6d ith the platform b940: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # b950: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 for the current b960: 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 process... b970: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 #.. return b980: 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d false.. }.... b990: 0a 20 20 20 20 70 72 6f 63 20 68 61 76 65 53 51 . proc haveSQ b9a0: 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman b9b0: 64 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d d {} {.. #. b9c0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I b9d0: 73 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 s the [object] c b9e0: 6f 6d 6d 61 6e 64 20 63 75 72 72 65 6e 74 6c 79 ommand currently b9f0: 20 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 available?.. ba00: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu ba10: 72 6e 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 rn [expr {[lleng ba20: 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 th [info command ba30: 73 20 6f 62 6a 65 63 74 5d 5d 20 3e 20 30 7d 5d s object]] > 0}] ba40: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... ba50: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c proc checkForSQL ba60: 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand ba70: 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a { channel } {.. ba80: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
ba90: 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b  nnel "---- check
baa0: 69 6e 67 20 66 6f 72 20 5c 22 6f 62 6a 65 63 74  ing for \"object
bab0: 5c 22 20 63 6f 6d 6d 61 6e 64 20 75 73 61 67 65  \" command usage
bac0: 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69  ... "....      i
bad0: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
bae0: 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 4f 62 6a 65   ::no(sqliteObje
baf0: 63 74 43 6f 6d 6d 61 6e 64 29 5d 20 26 26 20 5c  ctCommand)] && \
bb00: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76  ..          [hav
bb10: 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  eSQLiteObjectCom
bb20: 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  mand]} then {..
bb30: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch bb40: 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 annel yes\n.. bb50: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. bb60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. bb70: 23 20 4e 4f 54 45 3a 20 55 6e 6c 65 73 73 20 77 # NOTE: Unless w bb80: 65 20 61 72 65 20 66 6f 72 62 69 64 64 65 6e 20 e are forbidden bb90: 66 72 6f 6d 20 64 6f 69 6e 67 20 73 6f 2c 20 61 from doing so, a bba0: 64 64 20 73 6f 6d 65 20 63 6f 6e 73 74 72 61 69 dd some constrai bbb0: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 nts.. # bbc0: 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20 61 that will a bbd0: 6c 6c 6f 77 20 6d 6f 73 74 20 6f 66 20 74 68 65 llow most of the bbe0: 20 74 65 73 74 20 73 75 69 74 65 20 74 6f 20 72 test suite to r bbf0: 75 6e 20 28 69 2e 65 2e 20 74 68 6f 73 65 0d 0a un (i.e. those.. bc00: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # bc10: 74 65 73 74 73 20 74 68 61 74 20 64 6f 20 6e 6f tests that do no bc20: 74 20 64 69 72 65 63 74 6c 79 20 72 65 6c 79 20 t directly rely bc30: 75 70 6f 6e 20 74 68 65 20 5b 6f 62 6a 65 63 74 upon the [object bc40: 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 ] command)... bc50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. bc60: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist bc70: 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 s ::no(shimSQLit bc80: 65 41 73 73 65 6d 62 6c 79 43 6f 6e 73 74 72 61 eAssemblyConstra bc90: 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a ints)]} then {.. bca0: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e addCon bcb0: 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a straint SQLite.. bcc0: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e addCon bcd0: 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 49 6e straint SQLiteIn bce0: 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 terop.. bcf0: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 addConstraint S bd00: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit bd10: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 e.. add bd20: 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 Constraint Syste bd30: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e m.Data.SQLite.En bd40: 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 cryption.. bd50: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain bd60: 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 t System.Data.SQ bd70: 4c 69 74 65 2e 4c 69 6e 71 0d 0a 0d 0a 20 20 20 Lite.Linq.... bd80: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr bd90: 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs bda0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. bdb0: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ bdc0: 4c 69 74 65 2e 64 6c 6c 5f 76 20 5b 67 65 74 42 Lite.dll_v [getB bdd0: 75 69 6c 64 43 6c 72 56 65 72 73 69 6f 6e 5d 5d uildClrVersion]] bde0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... bdf0: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf be00: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 o exists ::no(sh be10: 69 6d 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f imSQLiteDefineCo be20: 6e 73 74 61 6e 74 43 6f 6e 73 74 72 61 69 6e 74 nstantConstraint be30: 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. be40: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 foreach d be50: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c efineConstant [l be60: 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. be70: 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 INTEROP_EXT be80: 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 ENSION_FUNCTIONS be90: 20 49 4e 54 45 52 4f 50 5f 46 54 53 35 5f 45 58 INTEROP_FTS5_EX bea0: 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 TENSION \.. beb0: 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP bec0: 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e _JSON1_EXTENSION bed0: 20 49 4e 54 45 52 4f 50 5f 50 45 52 43 45 4e 54 INTEROP_PERCENT bee0: 49 4c 45 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d ILE_EXTENSION \. bef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 . I bf00: 4e 54 45 52 4f 50 5f 52 45 47 45 58 50 5f 45 58 NTEROP_REGEXP_EX bf10: 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f TENSION INTEROP_ bf20: 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 5c TEST_EXTENSION \ bf30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. bf40: 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45 INTEROP_TOTYPE_E bf50: 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 XTENSION INTEROP bf60: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 5c _VIRTUAL_TABLE \ bf70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. bf80: 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 5d USE_INTEROP_DLL] bf90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. bfa0: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 addConstraint [a bfb0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 def bfd0: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 ineConstant.Syst bfe0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 20 em.Data.SQLite. bff0: 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 5d$defineConstant]
c000: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
c010: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
c020: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
c030: 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53  xists ::no(shimS
c040: 51 4c 69 74 65 56 69 73 75 61 6c 53 74 75 64 69  QLiteVisualStudi
c050: 6f 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20  oConstraints)]}
c060: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
c070: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
c080: 5b 61 70 70 65 6e 64 41 72 67 73 20 76 69 73 75  [appendArgs visu
c090: 61 6c 53 74 75 64 69 6f 20 5b 67 65 74 42 75 69  alStudio [getBui
c0a0: 6c 64 59 65 61 72 5d 5d 0d 0a 20 20 20 20 20 20  ldYear]]..
c0b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74    }....        t
c0c0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no c0d0: 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 \n.. }.. c0e0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc c0f0: 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 changeNativeRunt c100: 69 6d 65 4f 70 74 69 6f 6e 20 7b 20 6e 61 74 69 imeOption { nati c110: 76 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 ve } {.. if c120: 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f {[llength [info c130: 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 5d commands debug] c140: 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 ] > 0 && \.. c150: 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 5b [llength [ c160: 69 6e 66 6f 20 73 75 62 63 6f 6d 6d 61 6e 64 73 info subcommands c170: 20 64 65 62 75 67 20 72 75 6e 74 69 6d 65 6f 70 debug runtimeop c180: 74 69 6f 6e 5d 5d 20 3e 20 30 20 26 26 20 5b 63 tion]] > 0 && [c c190: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. c1a0: 64 65 62 75 67 20 72 75 6e 74 69 6d 65 6f 70 74 debug runtimeopt c1b0: 69 6f 6e 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 ion [expr {$nati
c1c0: 76 65 20 3f 20 22 61 64 64 22 20 3a 20 22 72 65  ve ? "add" : "re
c1d0: 6d 6f 76 65 22 7d 5d 20 6e 61 74 69 76 65 0d 0a  move"}] native..
c1e0: 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74        }] == 0} t
c1f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
c200: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
c210: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
c220: 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
c230: 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5b 63  ctCommand] && [c
c240: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
c250: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
c260: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
c270: 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 74 69  ive [expr {$nati c280: 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ve ? \.. c290: 20 20 20 20 22 41 64 64 52 75 6e 74 69 6d 65 4f "AddRuntimeO c2a0: 70 74 69 6f 6e 22 20 3a 20 22 52 65 6d 6f 76 65 ption" : "Remove c2b0: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 7d 5d RuntimeOption"}] c2c0: 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 7d native.. } c2d0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. c2e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t c2f0: 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rue.. }.... c300: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal c310: 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 se.. }..... c320: 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 proc checkForS c330: 51 4c 69 74 65 42 75 69 6c 64 73 20 7b 20 63 68 QLiteBuilds { ch c340: 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 61 annel {select fa c350: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. c360: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: c370: 20 43 68 65 63 6b 20 66 6f 72 20 65 76 65 72 79 Check for every c380: 20 70 6f 73 73 69 62 6c 65 20 76 61 6c 69 64 20 possible valid c390: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 76 combination of v c3a0: 61 6c 75 65 73 20 75 73 65 64 20 77 68 65 6e 0d alues used when. c3b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c . # l c3c0: 6f 63 61 74 69 6e 67 20 6f 75 74 20 74 68 65 20 ocating out the c3d0: 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 build output dir c3e0: 65 63 74 6f 72 79 2c 20 73 68 6f 77 69 6e 67 20 ectory, showing c3f0: 65 61 63 68 20 61 76 61 69 6c 61 62 6c 65 0d 0a each available.. c400: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 # bu c410: 69 6c 64 20 76 61 72 69 61 74 69 6f 6e 20 61 6c ild variation al c420: 6f 6e 67 20 74 68 65 20 77 61 79 2e 0d 0a 20 20 ong the way... c430: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 #.. for c440: 65 61 63 68 20 6e 61 74 69 76 65 20 5b 6c 69 73 each native [lis c450: 74 20 66 61 6c 73 65 20 74 72 75 65 5d 20 7b 0d t false true] {. c460: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach c470: 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 year [getBuildY c480: 65 61 72 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 ears] {.. c490: 20 20 20 66 6f 72 65 61 63 68 20 63 6f 6e 66 69 foreach confi c4a0: 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 guration [getBui c4b0: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 ldConfigurations c4c0: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] {.. c4d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. c4e0: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f # NOTE: Figure o c4f0: 75 74 20 74 68 65 20 65 66 66 65 63 74 69 76 65 ut the effective c500: 20 62 75 69 6c 64 20 70 6c 61 74 66 6f 72 6d 2e build platform. c510: 20 20 54 68 69 73 20 69 73 0d 0a 20 20 20 20 20 This is.. c520: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b c530: 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72 20 ased on whether c540: 6f 72 20 6e 6f 74 20 61 20 5b 70 72 69 6d 61 72 or not a [primar c550: 69 6c 79 5d 20 6e 61 74 69 76 65 20 62 75 69 6c ily] native buil c560: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 d.. # c570: 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 is being c580: 75 73 65 64 2e 20 20 46 6f 72 20 5b 70 72 69 6d used. For [prim c590: 61 72 69 6c 79 5d 20 6e 6f 6e 2d 6e 61 74 69 76 arily] non-nativ c5a0: 65 20 62 75 69 6c 64 73 2c 0d 0a 20 20 20 20 20 e builds,.. c5b0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t c5c0: 68 69 73 20 77 69 6c 6c 20 62 65 20 61 6e 20 65 his will be an e c5d0: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 mpty string... c5e0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. c5f0: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 set pla c600: 74 66 6f 72 6d 20 5b 67 65 74 42 75 69 6c 64 50 tform [getBuildP c610: 6c 61 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 5d latform$native]
c620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
c630: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ c640: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- c660: 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for c670: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL c680: 69 74 65 20 62 75 69 6c 64 20 5c 22 22 20 5b 65 ite build \"" [e c690: 78 70 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 xpr \.. c6a0: 20 20 20 20 20 20 20 7b 24 6e 61 74 69 76 65 20 {$native
c6b0: 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20 22 22  ? "native/" : ""
c6c0: 7d 5d 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e  }] [expr {[strin
c6d0: 67 20 6c 65 6e 67 74 68 20 5c 0d 0a 20 20 20 20  g length \..
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61              $pla c6f0: 74 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 tform] > 0 ? [ap c700: 70 65 6e 64 41 72 67 73 20 24 70 6c 61 74 66 6f pendArgs$platfo
c710: 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65  rm /] : ""}] $ye c720: 61 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ar \.. c730: 20 20 20 20 20 20 2f 20 24 63 6f 6e 66 69 67 75 /$configu
c740: 72 61 74 69 6f 6e 20 22 5c 22 2e 2e 2e 20 22 5d  ration "\"... "]
c750: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
c760: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
c770: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
c780: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
c790: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65   directory where
c7a0: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a   the necessary..
c7b0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
c7c0: 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66      components f
c7d0: 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  or System.Data.S
c7e0: 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20  QLite should be
c7f0: 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20  found...
c800: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
c810: 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79     set directory
c820: 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63   [joinBuildDirec
c830: 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5c 0d 0a  tory $native \.. c840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 c850: 5b 67 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 [getBuildBaseDir c860: 65 63 74 6f 72 79 5d 20 24 79 65 61 72 20 24 70 ectory]$year $p c870: 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 latform$configu
c880: 72 61 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ration]....
c890: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
c8a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f        # NOTE: Do
c8b0: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 66   the necessary f
c8c0: 69 6c 65 73 20 65 78 69 73 74 3f 20 20 43 75 72  iles exist?  Cur
c8d0: 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f 74 68 65 72  rently, no other
c8e0: 20 73 74 65 70 73 0d 0a 20 20 20 20 20 20 20 20   steps..
c8f0: 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20      #       are
c900: 74 61 6b 65 6e 20 74 6f 20 76 65 72 69 66 79 20  taken to verify
c910: 74 68 69 73 20 62 75 69 6c 64 20 69 73 20 61 63  this build is ac
c920: 74 75 61 6c 6c 79 20 76 69 61 62 6c 65 2e 0d 0a  tually viable...
c930: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
c940: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
c950: 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65  isBuildAvailable
c960: 20 24 6e 61 74 69 76 65 20 24 64 69 72 65 63 74   $native$direct
c970: 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
c980: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
c990: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
c9a0: 4f 54 45 3a 20 57 68 65 6e 20 69 6e 20 22 73 65  OTE: When in "se
c9b0: 6c 65 63 74 22 20 6d 6f 64 65 2c 20 61 75 74 6f  lect" mode, auto
c9c0: 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74  matically select
c9d0: 20 74 68 65 20 66 69 72 73 74 0d 0a 20 20 20 20   the first..
c9e0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
c9f0: 20 20 61 76 61 69 6c 61 62 6c 65 20 62 75 69 6c    available buil
ca00: 64 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61  d of System.Data
ca10: 2e 53 51 4c 69 74 65 20 61 6e 64 20 74 68 65 6e  .SQLite and then
ca20: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 20   return..
ca30: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
ca40: 6d 6d 65 64 69 61 74 65 6c 79 2e 0d 0a 20 20 20  mmediately...
ca50: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
ca70: 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63  $select && [matc ca80: 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 hPlatform$platf
ca90: 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  orm]} then {..
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
cab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
cac0: 20 23 20 4e 4f 54 45 3a 20 4d 61 6e 75 61 6c 6c   # NOTE: Manuall
cad0: 79 20 6f 76 65 72 72 69 64 65 20 61 6c 6c 20 74  y override all t
cae0: 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f  he build directo
caf0: 72 79 20 73 65 6c 65 63 74 69 6f 6e 0d 0a 20 20  ry selection..
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
cb10: 20 20 20 20 20 20 72 65 6c 61 74 65 64 20 74 65        related te
cb20: 73 74 20 73 65 74 74 69 6e 67 73 20 69 6e 20 6f  st settings in o
cb30: 72 64 65 72 20 74 6f 20 66 6f 72 63 65 20 74 68  rder to force th
cb40: 69 73 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20  is build..
cb50: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
cb60: 20 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61    of System.Data
cb70: 2e 53 51 4c 69 74 65 20 74 6f 20 62 65 20 75 73  .SQLite to be us
cb80: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...
cb90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
cba0: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 63 68          if {![ch
cbb0: 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d  angeNativeRuntim
cbc0: 65 4f 70 74 69 6f 6e 20 24 6e 61 74 69 76 65 5d  eOption $native] cbd0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput cbf0: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
cc00: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
cc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cc20: 22 6e 6f 2c 20 66 61 69 6c 65 64 20 74 6f 20 22  "no, failed to "
cc30: 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20   [expr {$native cc40: 3f 20 22 61 64 64 22 20 3a 20 22 72 65 6d 6f 76 ? "add" : "remov cc50: 65 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 e"}] \.. cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 " cc70: 74 68 65 20 5c 22 6e 61 74 69 76 65 5c 22 20 72 the \"native\" r cc80: 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 5c 6e 22 untime option\n" cc90: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... cca0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa ccb0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lse.. ccc0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... ccd0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a set :: cce0: 74 65 73 74 5f 79 65 61 72 20 24 79 65 61 72 0d test_year$year.
ccf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
cd00: 20 73 65 74 20 3a 3a 74 65 73 74 5f 70 6c 61 74   set ::test_plat
cd10: 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 0d 0a  form $platform.. cd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 cd30: 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 set ::test_confi cd40: 67 75 72 61 74 69 6f 6e 20 24 63 6f 6e 66 69 67 guration$config
cd50: 75 72 61 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  uration....
cd60: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
cd70: 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen cd80: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. cd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 79 65 "ye cda0: 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 5b s, selected (" [ cdb0: 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 expr {$native ?
cdc0: 22 6e 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d  "native/" : ""}]
cdd0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
cde0: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 5b          [expr {[
cdf0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70  string length $p ce00: 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b latform] > 0 ? [ ce10: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. ce20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ce30: 20 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a$platform /] :
ce40: 20 22 22 7d 5d 20 24 79 65 61 72 20 2f 20 24 63   ""}] $year /$c
ce50: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 29 5c  onfiguration ")\
ce60: 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n"]....
ce70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
ce80: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..
ce90: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
cea0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
ceb0: 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e  s $channel yes\n cec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. ced0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } cee0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. cef0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
cf00: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..
cf10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
cf20: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
cf30: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
cf40: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
cf50: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
cf60: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c  proc checkForSQL
cf70: 69 74 65 52 65 6c 65 61 73 65 73 20 7b 20 63 68  iteReleases { ch
cf80: 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 61  annel {select fa
cf90: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
cfa0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
cfb0: 20 43 68 65 63 6b 20 66 6f 72 20 70 61 73 74 20   Check for past
cfc0: 72 65 6c 65 61 73 65 73 20 6f 66 20 53 79 73 74  releases of Syst
cfd0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 69  em.Data.SQLite i
cfe0: 6e 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 0d  n the directory.
cff0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
d000: 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20  ontained in the
d010: 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
d020: 69 74 65 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  ite" environment
d030: 20 76 61 72 69 61 62 6c 65 2c 20 69 66 0d 0a 20   variable, if..
d040: 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65       #       pre
d050: 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  sent...      #..
d060: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
d070: 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 53 79 73  exists ::env(Sys
d080: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29  tem.Data.SQLite)
d090: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
d0a0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
d0b0: 20 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44   $::env(System.D d0c0: 61 74 61 2e 53 51 4c 69 74 65 29 5d 20 3e 20 30 ata.SQLite)] > 0 d0d0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. d0e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N d0f0: 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 OTE: Build the f d100: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 64 ully qualified d d110: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 irectory where t d120: 68 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 he necessary.. d130: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co d140: 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 mponents for Sys d150: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite d160: 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e should be found. d170: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. d180: 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f set directo d190: 72 79 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e ry [file nativen d1a0: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ d1b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 3a ..$:
d1c0: 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61  :env(System.Data
d1d0: 2e 53 51 4c 69 74 65 29 20 5b 67 65 74 52 65 6c  .SQLite) [getRel
d1e0: 65 61 73 65 56 65 72 73 69 6f 6e 5d 5d 5d 0d 0a  easeVersion]]]..
d1f0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
d200: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append d210: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. d220: 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 "---- checki d230: 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ng for System.Da d240: 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 73 ta.SQLite releas d250: 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. d260: 20 20 20 20 20 24 64 69 72 65 63 74 6f 72 79 20$directory
d270: 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20  "\"... "]....
d280: 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65       if {[isRele
d290: 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24 64 69  aseAvailable $di d2a0: 72 65 63 74 6f 72 79 20 70 6c 61 74 66 6f 72 6d rectory platform d2b0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. d2c0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string d2d0: 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 length$platfor
d2e0: 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  m] == 0} then {.
d2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
d300: 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77   platform unknow
d310: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  n..          }..
d320: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
d330: 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63  $select && [matc d340: 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 hPlatform$platf
d350: 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  orm]} then {..
d360: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
d370: 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 20  build_directory
d380: 24 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20  $directory.... d390: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs d3a0: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
d3b0: 41 72 67 73 20 22 79 65 73 2c 20 73 65 6c 65 63  Args "yes, selec
d3c0: 74 65 64 20 28 22 20 24 70 6c 61 74 66 6f 72 6d  ted (" $platform d3d0: 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 ")\n"].... d3e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr d3f0: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 ue.. } d400: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. d410: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
d420: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
d430: 79 65 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d  yes (" $platform d440: 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ")\n"].. d450: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } d460: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. d470: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
d480: 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20   no\n....
d490: 20 20 20 66 6f 72 65 61 63 68 20 70 61 74 68 20     foreach path
d4a0: 5b 6c 73 6f 72 74 20 2d 64 65 63 72 65 61 73 69  [lsort -decreasi
d4b0: 6e 67 20 5b 66 69 6c 65 20 6c 69 73 74 20 24 64  ng [file list $d d4c0: 69 72 65 63 74 6f 72 79 20 2a 5d 5d 20 7b 0d 0a irectory *]] {.. d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { d4e0: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 70 61 [file exists$pa
d4f0: 74 68 5d 20 26 26 20 5b 66 69 6c 65 20 69 73 64  th] && [file isd
d500: 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 5d 7d  irectory $path]} d510: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. d520: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
d530: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
d540: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
d550: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
d560: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d  cking for System
d570: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c  .Data.SQLite rel
d580: 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20  ease \"" \..
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70                $p d5a0: 61 74 68 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d ath "\"... "]... d5b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i d5c0: 66 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61 f {[isReleaseAva d5d0: 69 6c 61 62 6c 65 20 24 70 61 74 68 20 70 6c 61 ilable$path pla
d5e0: 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tform]} then {..
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d600: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
d610: 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d  th $platform] == d620: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. d630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se d640: 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f t platform unkno d650: 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 wn.. d660: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... d670: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 73 65 if {$se
d680: 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 50 6c  lect && [matchPl
d690: 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d  atform $platform d6a0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set d6c0: 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f ::build_directo d6d0: 72 79 20 24 70 61 74 68 0d 0a 0d 0a 20 20 20 20 ry$path....
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
d6f0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap d700: 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c 20 73 pendArgs "yes, s d710: 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c 61 74 elected ("$plat
d720: 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20  form ")\n"]....
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d740: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20                }
d760: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
d770: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
d780: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append d790: 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70 6c Args "yes ("$pl
d7a0: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20  atform ")\n"]..
d7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
d7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
d7d0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
d7e0: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
d7f0: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20  $channel no\n.. d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. d810: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. d820: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. d830: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e d840: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t d850: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
d860: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
d870: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65           "---- e
d880: 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
d890: 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e 44 61 74  ble \"System.Dat
d8a0: 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 20 6e 6f  a.SQLite\" is no
d8b0: 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  t " \..
d8c0: 20 20 20 22 73 65 74 2c 20 73 6b 69 70 70 69 6e     "set, skippin
d8d0: 67 20 63 68 65 63 6b 20 66 6f 72 20 72 65 6c 65  g check for rele
d8e0: 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 20 20 20  ases...\n"]..
d8f0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
d900: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
d910: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
d920: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62  heckForSQLiteLib
d930: 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 6c 20 7d  rary { channel }
d940: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20   {..      tputs
d950: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  $channel "---- c d960: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 hecking for SQLi d970: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e te core library. d980: 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 .. ".... if d990: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. d9a0: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok d9b0: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub d9c0: 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. d9d0: 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S d9e0: 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 QLite.SQLite3 SQ d9f0: 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 LiteVersion.. da00: 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d } version] == da10: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. da20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # da30: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if da40: 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 72 the returned ver da50: 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20 sion was null. da60: 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 If so, make it e da70: 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 asy.. # da80: 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 to spot... da90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. daa0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le dab0: 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d ngth$version] =
dac0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
dad0: 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69         set versi
dae0: 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20  on null..
daf0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
db00: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
db10: 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72   Attempt to quer
db20: 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75  y the Fossil sou
db30: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 66  rce identifier f
db40: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20  or the SQLite..
db50: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
db60: 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20  ore library...
db70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
db80: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
db90: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
dba0: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
dbb0: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
dbc0: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
dbd0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
dbe0: 69 74 65 33 20 53 51 4c 69 74 65 53 6f 75 72 63  ite3 SQLiteSourc
dbf0: 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 73  eId..        } s
dc00: 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b  ourceId]} then {
dc10: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
dc20: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
dc30: 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 75   We failed to qu
dc40: 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73  ery the Fossil s
dc50: 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72  ource identifier
dc60: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
dc70: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f            set so
dc80: 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a  urceId unknown..
dc90: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
dca0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
dcb0: 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
dcc0: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 6f   the returned Fo
dcd0: 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
dce0: 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e  tifier was null.
dcf0: 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 20    If..        #
dd00: 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69        so, make i
dd10: 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d  t easy to spot..
dd20: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
dd30: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
dd40: 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64  length $sourceId dd50: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. dd60: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f set so dd70: 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 urceId null.. dd80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... dd90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N dda0: 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 OTE: Yes, the SQ ddb0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar ddc0: 79 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 y appears to be ddd0: 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 available... dde0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 #.. a ddf0: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c ddConstraint SQL de00: 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 ite.... t de10: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
de20: 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28  ppendArgs "yes (
de30: 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24  " $version " "$
de40: 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d  sourceId ")\n"].
de50: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
de60: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $de70: 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 channel no\n.. de80: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... de90: 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF dea0: 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 orSQLiteInterop deb0: 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 { channel } {.. dec0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
ded0: 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69  nel "---- checki
dee0: 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e  ng for SQLite in
def0: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e  terop assembly..
df00: 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  . "....      if
df10: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
df20: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
df30: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
df40: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
df50: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
df60: 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74  Lite.SQLite3 Int
df70: 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20  eropVersion..
df80: 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d     } version] ==
df90: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
dfa0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
dfb0: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
dfc0: 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 72  the returned ver
dfd0: 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20  sion was null.
dfe0: 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65  If so, make it e
dff0: 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  asy..        #
e000: 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20       to spot...
e010: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
e020: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
e030: 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d  ngth $version] = e040: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. e050: 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69 set versi e060: 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 on null.. e070: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. e080: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: e090: 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72 Attempt to quer e0a0: 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 y the Fossil sou e0b0: 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 66 rce identifier f e0c0: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 or the SQLite.. e0d0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c e0e0: 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 ore library... e0f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. e100: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. e110: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object e120: 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N e130: 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. e140: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System e150: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL e160: 69 74 65 33 20 49 6e 74 65 72 6f 70 53 6f 75 72 ite3 InteropSour e170: 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 ceId.. } e180: 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 sourceId]} then e190: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. e1a0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE e1b0: 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 : We failed to q e1c0: 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 uery the Fossil e1d0: 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 source identifie e1e0: 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d r... #. e1f0: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 . set s e200: 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d ourceId unknown. e210: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... e220: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. e230: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i e240: 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 f the returned F e250: 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 ossil source ide e260: 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c ntifier was null e270: 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 . If.. # e280: 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 so, make e290: 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e it easy to spot. e2a0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. e2b0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string e2c0: 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 length$sourceI
e2d0: 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  d] == 0} then {.
e2e0: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
e2f0: 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20  ourceId null..
e300: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
e310: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
e320: 4e 4f 54 45 3a 20 42 65 66 6f 72 65 20 61 63 74  NOTE: Before act
e330: 75 61 6c 6c 79 20 61 64 64 69 6e 67 20 74 68 65  ually adding the
e340: 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
e350: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 0d  , make sure the.
e360: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
e370: 20 76 65 72 73 69 6f 6e 20 69 73 20 76 61 6c 69   version is vali
e380: 64 20 28 69 2e 65 2e 20 6e 6f 74 20 6a 75 73 74  d (i.e. not just
e390: 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64 20 71   that we could q
e3a0: 75 65 72 79 20 69 74 29 2e 0d 0a 20 20 20 20 20  uery it)...
e3b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
e3c0: 20 7b 24 76 65 72 73 69 6f 6e 20 6e 65 20 22 6e   {$version ne "n e3d0: 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ull"} then {.. e3e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. e3f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 # NOTE: Yes e400: 2c 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 , the SQLite int e410: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 70 erop assembly ap e420: 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 69 pears to be avai e430: 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 lable... e440: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 #.. a e450: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c ddConstraint SQL e460: 69 74 65 49 6e 74 65 72 6f 70 0d 0a 0d 0a 20 20 iteInterop.... e470: 20 20 20 20 20 20 20 20 73 65 74 20 61 6e 73 77 set answ e480: 65 72 20 79 65 73 0d 0a 20 20 20 20 20 20 20 20 er yes.. e490: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. e4a0: 20 20 20 20 73 65 74 20 61 6e 73 77 65 72 20 6e set answer n e4b0: 6f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a o.. }.... e4c0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
e4d0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
e4e0: 67 73 20 24 61 6e 73 77 65 72 20 22 20 28 22 20  gs $answer " (" e4f0: 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73 6f$version " " $so e500: 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 urceId ")\n"].. e510: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. e520: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
e530: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..
e540: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
e550: 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72     proc checkFor
e560: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
e570: 74 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20 6e  tant { channel n
e580: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  ame } {..      t
e590: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a e5a0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. e5b0: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 "---- che e5c0: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d cking for System e5d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65 66 .Data.SQLite def e5e0: 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22 22 ine constant \"" e5f0: 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20$name \..
e600: 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d      "\"... "]...
e610: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
e620: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
e630: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
e640: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
e650: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
e660: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
e670: 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e  QLite3 DefineCon
e680: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20  stants..      }
e690: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d  defineConstants]
e6a0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
e6b0: 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61         if {[lsea
e6c0: 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61  rch -exact -noca
e6d0: 73 65 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61  se $defineConsta e6e0: 6e 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d 31 nts$name] != -1
e6f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
e700: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
e710: 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68   # NOTE: Yes, th
e720: 69 73 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61  is define consta
e730: 6e 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 77  nt was enabled w
e740: 68 65 6e 20 74 68 65 20 6d 61 6e 61 67 65 64 0d  hen the managed.
e750: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
e760: 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20     assembly was
e770: 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20  compiled...
e780: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
e790: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
e7a0: 5b 61 70 70 65 6e 64 41 72 67 73 20 64 65 66 69  [appendArgs defi
e7b0: 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65  neConstant.Syste
e7c0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 20 24  m.Data.SQLite. $e7d0: 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 name].... e7e0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
e7f0: 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20  l yes\n..
e800: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
e810: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan e820: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 nel no\n.. e830: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els e840: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu e850: 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f ts$channel erro
e860: 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  r\n..      }..
e870: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
e880: 20 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d   getDateTimeForm
e890: 61 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  at {} {..      #
e8a0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
e8b0: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 73  This procedure s
e8c0: 69 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68  imply returns th
e8d0: 65 20 22 64 65 66 61 75 6c 74 22 20 44 61 74 65  e "default" Date
e8e0: 54 69 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 64  Time format used
e8f0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
e900: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74  by the test suit
e910: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
e920: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
e930: 73 74 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66  sts ::datetime_f
e940: 6f 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20  ormat] && \..
e950: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
e960: 65 6e 67 74 68 20 24 3a 3a 64 61 74 65 74 69 6d  ength $::datetim e970: 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 e_format] > 0} t e980: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # e990: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE e9a0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 61 6e : Return the man e9b0: 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e ually overridden e9c0: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 44 value for the D e9d0: 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d ateTime format.. e9e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. e9f0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 return$::da
ea00: 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20  tetime_format..
ea10: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
ea20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
ea30: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e    # NOTE: Return
ea40: 20 61 6e 20 49 53 4f 38 36 30 31 20 44 61 74 65   an ISO8601 Date
ea50: 54 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70  Time format comp
ea60: 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 69  atible with SQLi
ea70: 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  te,..        #
ea80: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
ea90: 2e 53 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 69  .SQLite, and sui
eaa0: 74 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d  table for round-
eab0: 74 72 69 70 70 69 6e 67 20 77 69 74 68 20 74 68  tripping with th
eac0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
ead0: 20 20 20 44 61 74 65 54 69 6d 65 20 63 6c 61 73     DateTime clas
eae0: 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  s of the framewo
eaf0: 72 6b 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c  rk.  If this val
eb00: 75 65 20 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a  ue is changed,..
eb10: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
eb20: 76 61 72 69 6f 75 73 20 74 65 73 74 73 20 6d 61  various tests ma
eb30: 79 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20  y fail...
eb40: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
eb50: 72 6e 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48  rn "yyyy-MM-dd H
eb60: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b  H:mm:ss.FFFFFFFK
eb70: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  "..      }..
eb80: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65  }.....    proc e
eb90: 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20  numerableToList
eba0: 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b  { enumerable } {
ebb0: 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75  ..      set resu
ebc0: 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20  lt [list]....
ebd0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
ebe0: 65 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c  ength $enumerabl ebf0: 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d e] == 0 ||$enum
ec00: 65 72 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22  erable eq "null"
ec10: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
ec20: 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result ec30: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... ec40: 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 object foreac ec50: 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65 h -alias item$e
ec60: 6e 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20  numerable {..
ec70: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
ec80: 20 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e   length $item] > ec90: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. eca0: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 lappend re ecb0: 73 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74 sult [$item ToSt
ecc0: 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d  ring]..        }
ecd0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
ece0: 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c     return $resul ecf0: 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 t.. }..... ed00: 20 70 72 6f 63 20 63 61 74 63 68 41 6e 64 52 65 proc catchAndRe ed10: 74 75 72 6e 20 7b 20 73 63 72 69 70 74 20 7b 73 turn { script {s ed20: 74 61 63 6b 54 72 61 63 65 20 66 61 6c 73 65 7d tackTrace false} ed30: 20 7b 73 74 72 69 63 74 20 74 72 75 65 7d 20 7d {strict true} } ed40: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. ed50: 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 # NOTE: Evalu ed60: 61 74 65 20 74 68 65 20 73 63 72 69 70 74 20 70 ate the script p ed70: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 rovided by our c ed80: 61 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63 aller in their c ed90: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 23 ontext,.. # eda0: 20 20 20 20 20 20 20 63 61 70 74 75 72 69 6e 67 capturing edb0: 20 62 6f 74 68 20 74 68 65 20 72 65 73 75 6c 74 both the result edc0: 20 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 20 and the return edd0: 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a code... #.. ede0: 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b set code [ edf0: 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 catch {uplevel 1 ee00: 20 24 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74$script} result
ee10: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
ee20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 20      # NOTE: Did
ee30: 74 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69  the script provi
ee40: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
ee50: 72 20 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 65  r NOT raise an e
ee60: 72 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a  rror?..      #..
ee70: 20 20 20 20 20 20 69 66 20 7b 24 73 74 72 69 63        if {$stric ee80: 74 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 30 20 t &&$code == 0
ee90: 7c 7c 20 21 24 73 74 72 69 63 74 20 26 26 20 24  || !$strict &&$
eea0: 63 6f 64 65 20 21 3d 20 31 7d 20 74 68 65 6e 20  code != 1} then
eeb0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
eec0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75        # NOTE: Su
eed0: 63 63 65 73 73 2e 20 20 52 65 74 75 72 6e 20 61  ccess.  Return a
eee0: 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72   list with the r
eef0: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74  eturn code and t
ef00: 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20  he result...
ef10: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
ef20: 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64  eturn [list $cod ef30: 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 e$result]..
ef40: 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61    } elseif {$sta ef50: 63 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d ckTrace} then {. ef60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. ef70: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c # NOTE: Fail ef80: 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72 ure. Our caller ef90: 20 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 73 74 wants a full st efa0: 61 63 6b 20 74 72 61 63 65 20 28 69 66 20 61 70 ack trace (if ap efb0: 70 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20 plicable),.. efc0: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75 # retu efd0: 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 rn a list with t efe0: 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 he return code a eff0: 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 76 65 nd the result ve f000: 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 rbatim... f010: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu f020: 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 rn [list$code $f030: 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d result].. } f040: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. f050: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO f060: 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75 TE: Failure. Ou f070: 72 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f r caller does no f080: 74 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 73 74 t want a full st f090: 61 63 6b 20 74 72 61 63 65 20 28 69 66 0d 0a 20 ack trace (if.. f0a0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 # a f0b0: 70 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 74 75 pplicable), retu f0c0: 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 rn a list with t f0d0: 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20 he return code, f0e0: 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 the error.. f0f0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 64 65 20 # code f100: 66 6f 72 20 74 68 65 20 69 6e 74 65 72 70 72 65 for the interpre f110: 74 65 72 2c 20 61 6e 64 20 74 68 65 20 65 72 72 ter, and the err f120: 6f 72 20 6d 65 73 73 61 67 65 20 75 70 20 74 6f or message up to f130: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # f140: 20 20 20 20 20 20 70 6f 69 6e 74 20 77 68 65 72 point wher f150: 65 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 e the stack trac f160: 65 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d e should start.. f170: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. f180: 20 20 20 20 73 65 74 20 69 6e 64 65 78 20 5b 73 set index [s f190: 74 72 69 6e 67 20 66 69 72 73 74 20 22 20 20 20 tring first " f1a0: 61 74 20 22 20 24 72 65 73 75 6c 74 5d 3b 20 23 at "$result]; #
f1b0: 20 48 41 43 4b 3a 20 52 65 6c 69 61 62 6c 65 3f   HACK: Reliable?
f1c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
f1d0: 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24  rn [list $code$
f1e0: 3a 3a 65 72 72 6f 72 43 6f 64 65 20 5b 65 78 70  ::errorCode [exp
f1f0: 72 20 7b 24 69 6e 64 65 78 20 21 3d 20 2d 31 20  r {$index != -1 f200: 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ? \.. f210: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 73 [string trim [s f220: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 72 65 73 tring range$res
f230: 75 6c 74 20 30 20 24 69 6e 64 65 78 5d 5d 20 3a  ult 0 $index]] : f240: 20 24 72 65 73 75 6c 74 7d 5d 5d 0d 0a 20 20 20$result}]]..
f250: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
f260: 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c 65      proc compile
f270: 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a 20 20  CSharpWith {..
f280: 20 20 20 20 20 20 20 20 20 20 74 65 78 74 20 6d            text m
f290: 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 73 74  emory symbols st
f2a0: 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 72 4e  rict resultsVarN
f2b0: 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e 61 6d  ame errorsVarNam
f2c0: 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 20  e fileNames..
f2d0: 20 20 20 20 20 20 20 20 20 61 72 67 73 20 7d 20           args }
f2e0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
f2f0: 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20    # NOTE: Since
f300: 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20  we are going to
f310: 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20  use this method
f320: 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73 73 69  name a lot, assi
f330: 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 20 20 20  gn it to a..
f340: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62    #       variab
f350: 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 20 20 20  le first...
f360: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 61 64   #..      set ad
f370: 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 73 65  d ReferencedAsse
f380: 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20  mblies.Add....
f390: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
f3a0: 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68 65 20  OTE: Create the
f3b0: 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20  base command to
f3c0: 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61 64 64  evaluate and add
f3d0: 20 74 68 65 20 70 72 6f 70 65 72 74 79 20 73 65   the property se
f3e0: 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 20 23 20  ttings..      #
f3f0: 20 20 20 20 20 20 74 68 61 74 20 61 72 65 20 61        that are a
f400: 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e 65 65  lmost always nee
f410: 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69 74 20  ded by our unit
f420: 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68 65 20  tests (i.e. the
f430: 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 20 23 20  System..      #
f440: 20 20 20 20 20 20 61 6e 64 20 53 79 73 74 65 6d        and System
f450: 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79 20 72  .Data assembly r
f460: 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20  eferences)...
f470: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
f480: 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 5c 0d  command [list \.
f490: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6d 70 69  .          compi
f4a0: 6c 65 43 53 68 61 72 70 20 24 74 65 78 74 20 24  leCSharp $text$
f4b0: 6d 65 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20  memory $symbols f4c0: 24 73 74 72 69 63 74 20 72 65 73 75 6c 74 73 20$strict results
f4d0: 65 72 72 6f 72 73 20 5c 0d 0a 20 20 20 20 20 20  errors \..
f4e0: 20 20 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e      $add System. f4f0: 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e dll$add System.
f500: 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 20 53 79  Data.dll $add Sy f510: 73 74 65 6d 2e 54 72 61 6e 73 61 63 74 69 6f 6e stem.Transaction f520: 73 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20 s.dll \.. f530: 20 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e 58$add System.X
f540: 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20  ml.dll]....
f550: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
f560: 3a 20 41 64 64 20 61 6c 6c 20 74 68 65 20 70 72  : Add all the pr
f570: 6f 76 69 64 65 64 20 66 69 6c 65 20 6e 61 6d 65  ovided file name
f580: 73 20 61 73 20 61 73 73 65 6d 62 6c 79 20 72 65  s as assembly re
f590: 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20  ferences...
f5a0: 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63   #..      foreac
f5b0: 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  h fileName $file f5c0: 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. f5d0: 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 lappend command f5e0: 20 24 61 64 64 20 5b 67 65 74 42 69 6e 61 72 79$add [getBinary
f5f0: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61  FileName $fileNa f600: 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a me].. }.... f610: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # f620: 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 65 NOTE: Add the e f630: 78 74 72 61 20 61 72 67 75 6d 65 6e 74 73 2c 20 xtra arguments, f640: 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 63 if any, to the c f650: 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 ommand to evalua f660: 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 te... #.. f670: 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 eval lappend f680: 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a command$args..
f690: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
f6a0: 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74   # NOTE: Alias t
f6b0: 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61  he compiler loca
f6c0: 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 20 65 72  l results and er
f6d0: 72 6f 72 73 20 76 61 72 69 61 62 6c 65 73 20 74  rors variables t
f6e0: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  o the..      #
f6f0: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61       variable na
f700: 6d 65 73 20 70 72 6f 76 69 64 65 64 20 62 79 20  mes provided by
f710: 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20  our caller...
f720: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
f730: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $f740: 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 5d 20 resultsVarName] f750: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. f760: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 72 65 upvar 1$re
f770: 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 73  sultsVarName res
f780: 75 6c 74 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  ults..      }...
f790: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
f7a0: 6e 67 20 6c 65 6e 67 74 68 20 24 65 72 72 6f 72  ng length $error f7b0: 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 sVarName] > 0} t f7c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 hen {.. u f7d0: 70 76 61 72 20 31 20 24 65 72 72 6f 72 73 56 61 pvar 1$errorsVa
f7e0: 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a 20 20  rName errors..
f7f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
f800: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
f810: 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e  Evaluate the con
f820: 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c  structed [compil
f830: 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64  eCSharp] command
f840: 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d   and return the.
f850: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72  .      #       r
f860: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d  esult...      #.
f870: 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d  .      eval $com f880: 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a mand.. }..... f890: 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72 proc isMemor f8a0: 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d yDb { fileName } f8b0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. f8c0: 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 # NOTE: Is th f8d0: 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 e specified data f8e0: 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72 base file name r f8f0: 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f eally an in-memo f900: 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20 ry database?.. f910: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 #.. ret f920: 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65 urn [expr {$file
f930: 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79  Name eq ":memory
f940: 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20  :" || \..
f950: 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65     [string range
f960: 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d   $fileName 0 12] f970: 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 eq "file::memor f980: 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d y:"}].. }.... f990: 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61 62 6c . proc isTabl f9a0: 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61 eInDb { name {va f9b0: 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 rName db} } {.. f9c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # f9d0: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t f9e0: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var f9f0: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" fa00: 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context fa10: 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # fa20: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 caller. fa30: 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 It contains the fa40: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect fa50: 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20 ion handle that fa60: 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 will be.. # fa70: 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 65 used to e fa80: 78 65 63 75 74 65 20 74 68 65 20 71 75 65 72 79 xecute the query fa90: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 used to determi faa0: 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 ne if the named fab0: 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20 table is.. fac0: 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20 # present fad0: 69 6e 20 74 68 61 74 20 64 61 74 61 62 61 73 65 in that database fae0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. faf0: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
fb00: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23  me db....      #
fb10: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
fb20: 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  Use the sqlite_m
fb30: 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f 20 64  aster table to d
fb40: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20  etermine if the
fb50: 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a  named table is..
fb60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
fb70: 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74  esent in the dat
fb80: 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d  abase...      #.
fb90: 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 7b  .      set sql {
fba0: 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54  ..        SELECT
fbb0: 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 73   COUNT(*) FROM s
fbc0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
fbd0: 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65  RE type = 'table
fbe0: 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d  ' AND name = ?;.
fbf0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
fc00: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
fc10: 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  E: Return non-ze
fc20: 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20  ro if the named
fc30: 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 6e 74  table is present
fc40: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
fc50: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b    return [expr {
fc60: 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65  ..        [sql e
fc70: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20  xecute -execute
fc80: 73 63 61 6c 61 72 20 24 64 62 20 24 73 71 6c 20  scalar $db$sql
fc90: 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 74 72  [list param1 Str
fca0: 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d  ing $name]] > 0. fcb0: 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d . }].. } fcc0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 ..... proc tr fcd0: 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d imSql { sql } {. fce0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72 . return [r fcf0: 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c egsub -all -- {\ fd00: 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d s+} [string trim fd10: 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20$sql] " "]..
fd20: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
fd30: 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c  executeSql { sql
fd40: 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20   {execute none}
fd50: 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66  {format none} {f
fd60: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d  ileName ""} } {.
fd70: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
fd80: 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e  ng length $fileN fd90: 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ame] == 0} then fda0: 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d {set fileName :m fdb0: 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73 emory:}.. s fdc0: 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 etupDb$fileName
fdd0: 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20   "" "" "" "" ""
fde0: 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73  false false fals
fdf0: 65 20 66 61 6c 73 65 20 64 62 20 74 72 75 65 0d  e false db true.
fe00: 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a  ...      try {..
fe10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
fe20: 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
fe30: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  \..            s
fe40: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
fe50: 75 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f  ute $execute -fo fe60: 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62 rmat$format $db fe70: 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d$sql]]..      }
fe80: 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20   finally {..
fe90: 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66      cleanupDb $f fea0: 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65 ileName db false feb0: 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 false false.. fec0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... fed0: 0a 20 20 20 20 70 72 6f 63 20 68 61 73 4e 6f 46 . proc hasNoF fee0: 6c 61 67 73 20 7b 20 76 61 72 4e 61 6d 65 20 6e lags { varName n fef0: 6f 6e 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 one } {.. u ff00: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
ff10: 66 6c 61 67 73 0d 0a 0d 0a 20 20 20 20 20 20 69  flags....      i
ff20: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
ff30: 20 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d   flags]} then {.
ff40: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
ff50: 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
ff60: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
ff70: 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73  ng length $flags ff80: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. ff90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t ffa0: 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rue.. }.... ffb0: 20 20 20 20 20 20 69 66 20 7b 24 6e 6f 6e 65 20 if {$none
ffc0: 26 26 20 24 66 6c 61 67 73 20 65 71 20 22 4e 6f  && $flags eq "No ffd0: 6e 65 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ne"} then {.. ffe0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true fff0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 10000 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d return false. 10010 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 10020 72 6f 63 20 67 65 74 43 6f 6e 6e 65 63 74 69 6f roc getConnectio 10030 6e 46 6c 61 67 73 20 7b 20 66 69 6c 65 4e 61 6d nFlags { fileNam 10040 65 20 66 6c 61 67 73 20 7b 71 75 69 65 74 20 66 e flags {quiet f 10050 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 10060 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 10070 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 : Figure out whi 10080 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 ch database file 10090 20 6e 61 6d 65 20 6f 72 20 63 6f 6e 6e 65 63 74 name or connect 100a0 69 6f 6e 20 73 74 72 69 6e 67 20 74 68 65 73 65 ion string these 100b0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 100c0 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags 100d0 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 61 will actually a 100e0 70 70 6c 79 20 74 6f 2e 20 20 54 68 69 73 20 69 pply to. This i 100f0 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 0d s not necessary. 10100 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 10110 6e 20 71 75 69 65 74 20 6d 6f 64 65 20 62 65 63 n quiet mode bec 10120 61 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d ause this inform 10130 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 ation is only us 10140 65 64 20 66 6f 72 20 6c 6f 67 67 69 6e 67 0d 0a ed for logging.. 10150 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e # an 10160 64 20 72 65 70 6f 72 74 69 6e 67 20 70 75 72 70 d reporting purp 10170 6f 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a oses... #.. 10180 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
10190 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
101a0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
101b0 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d  ength $fileName] 101c0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 101d0 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 set data 101e0 62 61 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73 base [appendArgs 101f0 20 22 66 69 6c 65 20 6e 61 6d 65 20 5c 22 22 20 "file name \"" 10200 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5d 0d 0a 20$fileName \"]..
10210 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20         } elseif
10220 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
10230 64 61 74 61 53 6f 75 72 63 65 5d 20 26 26 20 5c  dataSource] && \
10240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 21 5b  ..            ![
10250 61 72 72 61 79 20 65 78 69 73 74 73 20 3a 3a 64  array exists ::d
10260 61 74 61 53 6f 75 72 63 65 5d 7d 20 74 68 65 6e  ataSource]} then
10270 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
10280 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 65  t database [appe
10290 6e 64 41 72 67 73 20 22 64 61 74 61 20 73 6f 75  ndArgs "data sou
102a0 72 63 65 20 5c 22 22 20 24 3a 3a 64 61 74 61 53  rce \"" $::dataS 102b0 6f 75 72 63 65 20 5c 22 5d 0d 0a 20 20 20 20 20 ource \"].. 102c0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 102d0 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 62 set datab 102e0 61 73 65 20 3c 75 6e 6b 6e 6f 77 6e 3e 0d 0a 20 ase <unknown>.. 102f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 10300 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 10310 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 # NOTE: Show 10320 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6c (and log) the l 10330 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 ocal connection 10340 66 6c 61 67 73 20 61 6e 64 20 74 68 65 20 61 73 flags and the as 10350 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 sociated.. 10360 23 20 20 20 20 20 20 20 64 61 74 61 20 73 6f 75 # data sou 10370 72 63 65 20 6f 72 20 66 69 6c 65 20 6e 61 6d 65 rce or file name 10380 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 10390 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
103a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
103b0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
103c0 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46   ::no(emitLocalF
103d0 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  lags)] && \..
103e0 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f           (![info
103f0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69   exists ::no(emi
10400 74 4c 6f 63 61 6c 46 6c 61 67 73 49 66 4e 6f 6e  tLocalFlagsIfNon
10410 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20  e)] || \..
10420 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c         ![hasNoFl
10430 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d  ags flags false]
10440 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  )} then {..
10450 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 10460 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 10470 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 10480 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f "---- lo 10490 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 cal connection f 104a0 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 lags for "$data
104b0 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  base \..
104c0 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b        " are: " [
104d0 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61  expr {![hasNoFla
104e0 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 20  gs flags false]
104f0 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ? \..
10500 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c     [appendArgs \
10510 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22  " $flags \"] : " 10520 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 <none>"}] \n].. 10530 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 10540 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 10550 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 # NOTE: Show 10560 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 73 (and log) the s 10570 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e hared connection 10580 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 23 flags... # 10590 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
105a0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
105b0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
105c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
105d0 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65  ect invoke Syste
105e0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
105f0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 53  LiteConnection S
10600 68 61 72 65 64 46 6c 61 67 73 0d 0a 20 20 20 20  haredFlags..
10610 20 20 20 20 7d 20 73 68 61 72 65 64 46 6c 61 67      } sharedFlag
10620 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  s] == 0} then {.
10630 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
10640 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
10650 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67  o(emitSharedFlag
10660 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
10670 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20          (![info
10680 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74  exists ::no(emit
10690 53 68 61 72 65 64 46 6c 61 67 73 49 66 4e 6f 6e  SharedFlagsIfNon
106a0 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20  e)] || \..
106b0 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f           ![hasNo
106c0 46 6c 61 67 73 20 73 68 61 72 65 64 46 6c 61 67  Flags sharedFlag
106d0 73 20 74 72 75 65 5d 29 7d 20 74 68 65 6e 20 7b  s true])} then {
106e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
106f0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 10700 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 10710 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10720 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 "---- shared 10730 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags 10740 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65 for "$database
10750 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10760 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78      " are: " [ex
10770 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73  pr {![hasNoFlags
10780 20 73 68 61 72 65 64 46 6c 61 67 73 20 74 72 75   sharedFlags tru
10790 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20  e] ? \..
107a0 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41          [appendA
107b0 72 67 73 20 5c 22 20 24 73 68 61 72 65 64 46 6c  rgs \" $sharedFl 107c0 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 ags \"] : "<none 107d0 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 >"}] \n].. 107e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 107f0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 10800 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 10810 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 ists ::no(emitSh 10820 61 72 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c aredFlags)] && \ 10830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10840 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 10850 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 no(emitSharedFla 10860 67 73 49 66 55 6e 61 76 61 69 6c 61 62 6c 65 29 gsIfUnavailable) 10870 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 10880 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
10890 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
108a0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
108b0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
108c0 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74  - shared connect
108d0 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20  ion flags for "
108e0 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20  $database \.. 108f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 " a 10900 72 65 3a 20 3c 75 6e 61 76 61 69 6c 61 62 6c 65 re: <unavailable 10910 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 >\n"].. 10920 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 10930 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 10940 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 10950 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 Show (and log) 10960 74 68 65 20 64 65 74 65 63 74 65 64 20 67 6c 6f the detected glo 10970 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 bal connection f 10980 6c 61 67 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 lags, if any... 10990 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 109a0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
109b0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  {..        if {!
109c0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
109d0 6f 28 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67  o(emitGlobalFlag
109e0 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
109f0 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78        (![info ex
10a00 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c  ists ::no(emitGl
10a10 6f 62 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29  obalFlagsIfNone)
10a20 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] || \..
10a30 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67       ![hasNoFlag
10a40 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66  s ::connection_f
10a50 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 68  lags false])} th
10a60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
10a70 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 10a80 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 10a90 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 10aa0 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 "---- global 10ab0 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags 10ac0 20 61 72 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 are: " \.. 10ad0 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b [expr { 10ae0 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 ![hasNoFlags ::c 10af0 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 onnection_flags 10b00 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 false] ? \.. 10b10 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e [appen 10b20 64 41 72 67 73 20 5c 22 20 24 3a 3a 63 6f 6e 6e dArgs \"$::conn
10b30 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 22 5d  ection_flags \"]
10b40 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e   : "<none>"}] \n
10b50 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
10b60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
10b70 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
10b80 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  If there are any
10b90 20 67 6c 6f 62 61 6c 20 28 70 65 72 20 74 65 73   global (per tes
10ba0 74 20 72 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f  t run) connectio
10bb0 6e 20 66 6c 61 67 73 20 63 75 72 72 65 6e 74 6c  n flags currentl
10bc0 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
10bd0 20 73 65 74 2c 20 75 73 65 20 74 68 65 6d 20 6e   set, use them n
10be0 6f 77 20 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62  ow (i.e. by comb
10bf0 69 6e 69 6e 67 20 74 68 65 6d 20 77 69 74 68 20  ining them with
10c00 74 68 65 20 6f 6e 65 73 20 66 6f 72 20 74 68 69  the ones for thi
10c10 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
10c20 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20   connection)...
10c30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
10c40 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
10c50 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67  :connection_flag
10c60 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  s]} then {..
10c70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
10c80 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61   NOTE: Combine a
10c90 6e 64 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68  nd/or replace th
10ca0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  e connection fla
10cb0 67 73 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77  gs and then show
10cc0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
10cd0 20 20 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e        new value.
10ce0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
10cf0 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b       set flags [
10d00 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c  combineFlags $fl 10d10 61 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f ags$::connectio
10d20 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20  n_flags]....
10d30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
10d40 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64   NOTE: Show (and
10d50 20 6c 6f 67 29 20 74 68 65 20 6e 65 77 20 65 66   log) the new ef
10d60 66 65 63 74 69 76 65 20 63 6f 6e 6e 65 63 74 69  fective connecti
10d70 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20  on flags...
10d80 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
10d90 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 10da0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 10db0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 10dc0 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64 :no(emitCombined 10dd0 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Flags)] && \.. 10de0 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 (![i 10df0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 10e00 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46 6c 61 67 emitCombinedFlag 10e10 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a sIfNone)] || \.. 10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 ! 10e30 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 [hasNoFlags flag 10e40 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 s false])} then 10e50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 10e60 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
10e70 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
10e80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
10e90 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e      "---- combin
10ea0 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  ed connection fl
10eb0 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62  ags for " $datab 10ec0 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ase \.. 10ed0 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 20 " are: " 10ee0 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c [expr {![hasNoFl 10ef0 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d ags flags false] 10f00 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ? \.. 10f10 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 [appendArg 10f20 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 s \"$flags \"]
10f30 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d  : "<none>"}] \n]
10f40 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
10f50 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
10f60 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
10f70 6e 20 24 66 6c 61 67 73 0d 0a 20 20 20 20 7d 0d  n $flags.. }. 10f80 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 10f90 46 6c 61 67 73 50 72 6f 70 65 72 74 79 20 7b 20 FlagsProperty { 10fa0 7b 66 6c 61 67 73 20 22 22 7d 20 7b 71 75 69 65 {flags ""} {quie 10fb0 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. 10fc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 10fd0 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 77 OTE: Determine w 10fe0 68 61 74 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 hat the combined 10ff0 20 28 67 6c 6f 62 61 6c 20 61 6e 64 20 6c 6f 63 (global and loc 11000 61 6c 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a al) connection.. 11010 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6c # fl 11020 61 67 73 20 73 68 6f 75 6c 64 20 62 65 2c 20 70 ags should be, p 11030 6f 73 73 69 62 6c 79 20 71 75 69 65 74 6c 79 2e ossibly quietly. 11040 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 11050 20 73 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 set flags [getC 11060 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 onnectionFlags " 11070 22 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d "$flags $quiet] 11080 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 11090 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 6f # NOTE: If no 110a0 20 67 6c 6f 62 61 6c 20 6f 72 20 6c 6f 63 61 6c global or local 110b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 110c0 73 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64 s were specified 110d0 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 , the.. # 110e0 20 20 20 20 20 64 65 66 61 75 6c 74 20 63 6f 6e default con 110f0 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 73 68 nection flags sh 11100 6f 75 6c 64 20 62 65 20 75 73 65 64 3b 20 74 68 ould be used; th 11110 65 72 65 66 6f 72 65 2c 20 72 65 74 75 72 6e 0d erefore, return. 11120 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 11130 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69 n empty string i 11140 6e 20 74 68 61 74 20 63 61 73 65 2e 0d 0a 20 20 n that case... 11150 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 11160 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 11170 24 66 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68$flags] == 0} th
11180 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
11190 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d  turn ""..      }
111a0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
111b0 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e 20 6f 72     # NOTE: In or
111c0 64 65 72 20 74 6f 20 63 68 65 63 6b 20 69 66 20  der to check if
111d0 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e  the default conn
111e0 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65  ection flags are
111f0 20 62 65 69 6e 67 20 75 73 65 64 0d 0a 20 20 20   being used..
11200 20 20 20 23 20 20 20 20 20 20 20 69 74 20 69 73     #       it is
11210 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 61 74   necessary to at
11220 74 65 6d 70 74 20 61 20 63 6f 6e 76 65 72 73 69  tempt a conversi
11230 6f 6e 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c  on to the actual
11240 20 65 6e 75 6d 65 72 61 74 65 64 0d 0a 20 20 20   enumerated..
11250 20 20 20 23 20 20 20 20 20 20 20 74 79 70 65 2e     #       type.
11260 20 20 46 61 69 6c 69 6e 67 20 74 68 61 74 2c 20    Failing that,
11270 74 68 65 20 63 68 65 63 6b 20 61 67 61 69 6e 73  the check agains
11280 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  t the default va
11290 6c 75 65 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20  lue will be..
112a0 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70     #       skipp
112b0 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
112c0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
112d0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 72  ..        set er
112e0 72 6f 72 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f  ror null; # IGNO
112f0 52 45 44 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f  RED....        o
11300 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 55 74 69  bject invoke Uti
11310 6c 69 74 79 20 54 72 79 50 61 72 73 65 46 6c 61  lity TryParseFla
11320 67 73 45 6e 75 6d 20 22 22 20 5c 0d 0a 20 20 20  gsEnum "" \..
11330 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
11340 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
11350 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
11360 73 20 22 22 20 24 66 6c 61 67 73 20 6e 75 6c 6c  s "" $flags null 11370 20 74 72 75 65 20 5c 0d 0a 20 20 20 20 20 20 20 true \.. 11380 20 20 20 20 20 74 72 75 65 20 65 72 72 6f 72 0d true error. 11390 0a 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 7d . } value]} 113a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 113b0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 113c0 54 45 3a 20 41 74 74 65 6d 70 74 69 6e 67 20 74 TE: Attempting t 113d0 6f 20 70 61 72 73 65 20 74 68 65 20 63 6f 6e 6e o parse the conn 113e0 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 61 75 ection flags cau 113f0 73 65 64 20 61 20 73 63 72 69 70 74 0d 0a 20 20 sed a script.. 11400 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 72 # er 11410 72 6f 72 2e 20 20 45 6d 69 74 20 61 20 77 61 72 ror. Emit a war 11420 6e 69 6e 67 20 74 6f 20 74 68 65 20 74 65 73 74 ning to the test 11430 20 6c 6f 67 20 66 69 6c 65 20 61 6e 64 20 63 6f log file and co 11440 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 ntinue.. 11450 23 20 20 20 20 20 20 20 75 73 69 6e 67 20 61 6e # using an 11460 20 65 6d 74 70 79 20 73 74 72 69 6e 67 20 69 6e emtpy string in 11470 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 stead... 11480 23 0d 0a 20 20 20 20 20 20 20 20 74 6c 6f 67 20 #.. tlog 11490 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 114a0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 114b0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 114c0 20 74 6f 20 70 61 72 73 65 20 63 6f 6e 6e 65 63 to parse connec 114d0 74 69 6f 6e 20 66 6c 61 67 73 2c 20 65 72 72 6f tion flags, erro 114e0 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 r: " \.. 114f0 20 20 20 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 \n\t$value
11500 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  \n]....        s
11510 65 74 20 76 61 6c 75 65 20 22 22 0d 0a 20 20 20  et value ""..
11520 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
11530 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
11540 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66  f the combined f
11550 6c 61 67 73 20 73 74 72 69 6e 67 20 63 6f 75 6c  lags string coul
11560 64 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 62  d not actually b
11570 65 20 63 6f 6e 76 65 72 74 65 64 0d 0a 20 20 20  e converted..
11580 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 74 68     #       to th
11590 65 20 65 6e 75 6d 65 72 61 74 65 64 20 74 79 70  e enumerated typ
115a0 65 20 69 74 20 69 73 20 74 68 65 20 64 65 66 61  e it is the defa
115b0 75 6c 74 20 76 61 6c 75 65 2c 20 74 68 65 6e 20  ult value, then
115c0 6a 75 73 74 20 75 73 65 0d 0a 20 20 20 20 20 20  just use..
115d0 23 20 20 20 20 20 20 20 69 74 20 76 65 72 62 61  #       it verba
115e0 74 69 6d 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  tim; otherwise,
115f0 6a 75 73 74 20 72 65 74 75 72 6e 20 61 6e 20 65  just return an e
11600 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 20 49 6e  mpty string.  In
11610 20 74 68 61 74 0d 0a 20 20 20 20 20 20 23 20 20   that..      #
11620 20 20 20 20 20 63 61 73 65 2c 20 74 68 65 20 64       case, the d
11630 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f  efault connectio
11640 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 62 65 20  n flags will be
11650 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  used...      #..
11660 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
11670 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d  g length $value] 11680 20 3d 3d 20 30 20 7c 7c 20 24 76 61 6c 75 65 20 == 0 ||$value
11690 6e 65 20 22 44 65 66 61 75 6c 74 22 7d 20 74 68  ne "Default"} th
116a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
116b0 0a 20 20 20 20 20 20 20 20 23 20 57 41 52 4e 49  .        # WARNI
116c0 4e 47 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73  NG: This returns
116d0 20 74 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   the string valu
116e0 65 20 6f 66 20 74 68 65 20 63 6f 6d 62 69 6e 65  e of the combine
116f0 64 20 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a 20 20  d flags, not..
11700 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
11710 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20   the enumerated
11720 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20  value.  This is
11730 62 79 20 64 65 73 69 67 6e 20 61 6e 64 20 73 68  by design and sh
11740 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20  ould not..
11750 20 20 23 20 20 20 20 20 20 20 20 20 20 62 65 20    #          be
11760 63 68 61 6e 67 65 64 20 77 69 74 68 6f 75 74 20  changed without
11770 63 61 72 65 66 75 6c 20 63 6f 6e 73 69 64 65 72  careful consider
11780 61 74 69 6f 6e 20 28 65 2e 67 2e 20 69 74 20 77  ation (e.g. it w
11790 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 23 20  ould..        #
117a0 20 20 20 20 20 20 20 20 20 70 72 65 76 65 6e 74           prevent
117b0 20 74 68 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65   the SQLiteConne
117c0 63 74 69 6f 6e 20 63 6c 61 73 73 20 66 72 6f 6d  ction class from
117d0 20 61 6c 6c 6f 77 69 6e 67 20 69 6e 76 61 6c 69   allowing invali
117e0 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  d..        #
117f0 20 20 20 20 20 20 5b 22 6d 61 67 69 63 61 6c 22        ["magical"
11800 5d 20 6d 65 74 61 2d 66 6c 61 67 73 29 2e 0d 0a  ] meta-flags)...
11810 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
11820 20 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e     return [appen
11830 64 41 72 67 73 20 22 46 6c 61 67 73 3d 22 20 24  dArgs "Flags=" $11840 66 6c 61 67 73 20 5c 3b 5d 0d 0a 20 20 20 20 20 flags \;].. 11850 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 11860 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d rn "".. }.... 11870 0a 20 20 20 20 70 72 6f 63 20 65 6e 61 62 6c 65 . proc enable 11880 53 68 61 72 65 64 43 61 63 68 65 20 7b 20 63 68 SharedCache { ch 11890 61 6e 6e 65 6c 20 65 6e 61 62 6c 65 20 7b 71 75 annel enable {qu 118a0 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a iet false} } {.. 118b0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 118c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 {.. obje 118d0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 118e0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 118f0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 11900 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e m.Data.SQLite.Un 11910 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 safeNativeMethod 11920 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 11930 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f sqlite3_enable_ 11940 73 68 61 72 65 64 5f 63 61 63 68 65 20 5b 65 78 shared_cache [ex 11950 70 72 20 69 6e 74 28 24 65 6e 61 62 6c 65 29 5d pr int($enable)]
11960 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74  ..      } result
11970 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
11980 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 11990 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 119a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
119b0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
119c0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
119d0 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71     "---- call sq
119e0 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61  lite3_enable_sha
119f0 72 65 64 5f 63 61 63 68 65 28 22 20 24 65 6e 61  red_cache(" $ena 11a00 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ble \.. 11a10 20 20 20 20 20 22 29 2e 2e 2e 20 6f 6b 3a 20 22 ")... ok: " 11a20 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
11a30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
11a40 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
11a50 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 11a60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 11a70 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
11a80 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
11a90 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
11aa0 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65  - call sqlite3_e
11ab0 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63  nable_shared_cac
11ac0 68 65 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a  he(" $enable \.. 11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 29 ") 11ae0 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c ... error: " \n\ 11af0 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
11b00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
11b10 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
11b20 20 70 72 6f 63 20 73 65 74 75 70 44 62 20 7b 0d   proc setupDb {.
11b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c  .            fil
11b40 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 22 22 7d 20  eName {mode ""}
11b50 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20  {dateTimeFormat
11b60 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 4b 69 6e  ""} {dateTimeKin
11b70 64 20 22 22 7d 20 7b 66 6c 61 67 73 20 22 22 7d  d ""} {flags ""}
11b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 65  ..            {e
11b90 78 74 72 61 20 22 22 7d 20 7b 71 75 61 6c 69 66  xtra ""} {qualif
11ba0 79 20 74 72 75 65 7d 20 7b 64 65 6c 65 74 65 20  y true} {delete
11bb0 74 72 75 65 7d 20 7b 75 72 69 20 66 61 6c 73 65  true} {uri false
11bc0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  }..            {
11bd0 74 65 6d 70 6f 72 61 72 79 20 74 72 75 65 7d 20  temporary true}
11be0 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 71 75  {varName db} {qu
11bf0 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  iet false} } {..
11c00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
11c10 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65   NOTE: First, se
11c20 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20  e if our caller
11c30 68 61 73 20 72 65 71 75 65 73 74 65 64 20 61 6e  has requested an
11c40 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62   in-memory datab
11c50 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ase...      #..
11c60 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72       set isMemor
11c70 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66  y [isMemoryDb $f 11c80 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... 11c90 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 11ca0 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20 E: For now, all 11cb0 74 65 73 74 20 64 61 74 61 62 61 73 65 73 20 75 test databases u 11cc0 73 65 64 20 62 79 20 74 68 65 20 74 65 73 74 20 sed by the test 11cd0 73 75 69 74 65 20 61 72 65 20 70 6c 61 63 65 64 suite are placed 11ce0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 11cf0 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 into the databas 11d00 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61 e directory. Ea 11d10 63 68 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 ch database and 11d20 72 65 6c 61 74 65 64 20 66 69 6c 65 73 0d 0a 20 related files.. 11d30 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 # use 11d40 64 20 62 79 20 61 20 74 65 73 74 20 73 68 6f 75 d by a test shou 11d50 6c 64 20 62 65 20 63 6c 65 61 6e 65 64 20 75 70 ld be cleaned up 11d60 20 62 79 20 74 68 61 74 20 74 65 73 74 20 75 73 by that test us 11d70 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 23 ing the.. # 11d80 20 20 20 20 20 20 20 22 63 6c 65 61 6e 75 70 44 "cleanupD 11d90 62 22 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 b" procedure, be 11da0 6c 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 low... #.. 11db0 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d if {!$isMem
11dc0 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d  ory && $qualify} 11dd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11de0 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 set fileName [f 11df0 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 ile join [getDat 11e00 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 abaseDirectory] 11e10 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
11e20 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d  Name]]..      }.
11e30 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
11e40 20 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66    # NOTE: By def
11e50 61 75 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79  ault, delete any
11e60 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61   pre-existing da
11e70 74 61 62 61 73 65 20 77 69 74 68 20 74 68 65 20  tabase with the
11e80 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20  same file..
11e90 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66   #       name if
11ea0 20 69 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78   it currently ex
11eb0 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ists...      #..
11ec0 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65        if {!$isMe 11ed0 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20 mory &&$delete
11ee0 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20  && [file exists
11ef0 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 11f00 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 11f10 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A 11f20 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 ttempt to delete 11f30 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e any pre-existin 11f40 67 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20 g database with 11f50 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 the same file.. 11f60 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e # n 11f70 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ame... #. 11f80 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 11f90 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 tch {file delete 11fa0 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f$fileName} erro
11fb0 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..
11fc0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11fd0 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f     # NOTE: We so
11fe0 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20  mehow failed to
11ff0 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c  delete the file,
12000 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20   report why...
12010 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12020 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 12030 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12040 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
12050 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
12060 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
12070 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
12080 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
12090 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62   to delete datab
120a0 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69  ase file \"" $fi 120b0 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. 120c0 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 "\" du 120d0 72 69 6e 67 20 73 65 74 75 70 2c 20 65 72 72 6f ring setup, erro 120e0 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
120f0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
12100 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
12110 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
12120 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
12130 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65  Refer to the spe
12140 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20  cified variable
12150 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74  (e.g. "db") in t
12160 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75  he context of ou
12170 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
12180 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61   caller.  The ha
12190 6e 64 6c 65 20 74 6f 20 74 68 65 20 6f 70 65 6e  ndle to the open
121a0 65 64 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c  ed database will
121b0 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65   be stored there
121c0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
121d0 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 121e0 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # 121f0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 12200 53 74 61 72 74 20 62 75 69 6c 64 69 6e 67 20 74 Start building t 12210 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 he connection st 12220 72 69 6e 67 2e 20 20 54 68 65 20 6f 6e 6c 79 20 ring. The only 12230 72 65 71 75 69 72 65 64 20 70 6f 72 74 69 6f 6e required portion 12240 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 12250 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f of the connectio 12260 6e 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20 n string is the 12270 64 61 74 61 20 73 6f 75 72 63 65 2c 20 77 68 69 data source, whi 12280 63 68 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d ch contains the. 12290 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 122a0 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d atabase file nam 122b0 65 20 69 74 73 65 6c 66 2e 20 20 49 66 20 6f 75 e itself. If ou 122c0 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 74 r caller wants t 122d0 6f 20 75 73 65 20 61 20 55 52 49 20 61 73 0d 0a o use a URI as.. 122e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 122f0 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20 75 e data source, u 12300 73 65 20 74 68 65 20 46 75 6c 6c 55 72 69 20 63 se the FullUri c 12310 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string 12320 20 70 72 6f 70 65 72 74 79 20 74 6f 0d 0a 20 20 property to.. 12330 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 76 # prev 12340 65 6e 74 20 74 68 65 20 64 61 74 61 20 73 6f 75 ent the data sou 12350 72 63 65 20 73 74 72 69 6e 67 20 66 72 6f 6d 20 rce string from 12360 62 65 69 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a being mangled... 12370 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 12380 66 20 7b 24 75 72 69 7d 20 74 68 65 6e 20 7b 0d f {$uri} then {.
12390 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e  .        set con
123a0 6e 65 63 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 69  nection {FullUri
123b0 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20  =${fileName}}.. 123c0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 123d0 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 set conne 123e0 63 74 69 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72 ction {Data Sour 123f0 63 65 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d ce=${fileName}}.
12400 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
12410 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
12420 45 3a 20 53 69 6e 63 65 20 74 68 69 73 20 70 72  E: Since this pr
12430 6f 63 65 64 75 72 65 20 68 61 73 20 6e 6f 20 73  ocedure has no s
12440 70 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 65  pecial knowledge
12450 20 6f 66 20 77 68 61 74 20 74 68 65 20 64 65 66   of what the def
12460 61 75 6c 74 0d 0a 20 20 20 20 20 20 23 20 20 20  ault..      #
12470 20 20 20 20 73 65 74 74 69 6e 67 20 69 73 20 66      setting is f
12480 6f 72 20 74 68 65 20 54 6f 46 75 6c 6c 50 61 74  or the ToFullPat
12490 68 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  h connection str
124a0 69 6e 67 20 70 72 6f 70 65 72 79 2c 20 61 6c 77  ing propery, alw
124b0 61 79 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ays..      #
124c0 20 20 20 61 64 64 20 74 68 65 20 76 61 6c 75 65     add the value
124d0 20 77 65 20 6b 6e 6f 77 20 61 62 6f 75 74 20 74   we know about t
124e0 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  o the connection
124f0 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
12500 23 0d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20  #..      append
12510 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f 46  connection {;ToF
12520 75 6c 6c 50 61 74 68 3d 24 7b 71 75 61 6c 69 66  ullPath=${qualif 12530 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a y}}.... #.. 12540 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 12550 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 our caller spec 12560 69 66 69 65 64 20 61 20 6a 6f 75 72 6e 61 6c 20 ified a journal 12570 6d 6f 64 65 2c 20 61 64 64 20 74 68 65 20 6e 65 mode, add the ne 12580 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d cessary portion. 12590 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f . # o 125a0 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e f the connection 125b0 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 string now... 125c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 125d0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 125e0 24 6d 6f 64 65 5d 20 3e 20 30 7d 20 74 68 65 6e$mode] > 0} then
125f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65   {..        appe
12600 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b  nd connection {;
12610 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d  Journal Mode=${m 12620 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a ode}}.. }.. 12630 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 12640 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 # NOTE: If our 12650 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified 12660 20 61 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d a DateTime form 12670 61 74 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 at, add the nece 12680 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 ssary.. # 12690 20 20 20 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20 portion of 126a0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 the connection s 126b0 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 tring now... 126c0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 126d0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 string length$d
126e0 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 3e  ateTimeFormat] >
126f0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
12700 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
12710 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65  ction {;DateTime
12720 46 6f 72 6d 61 74 3d 24 7b 64 61 74 65 54 69 6d  Format=${dateTim 12730 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20 20 20 eFormat}}.. 12740 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 12750 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 12760 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 our caller speci 12770 66 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 4b fied a DateTimeK 12780 69 6e 64 2c 20 61 64 64 20 74 68 65 20 6e 65 63 ind, add the nec 12790 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a essary portion.. 127a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 # of 127b0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 the connection 127c0 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 string now... 127d0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 127e0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
127f0 64 61 74 65 54 69 6d 65 4b 69 6e 64 5d 20 3e 20  dateTimeKind] >
12800 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
12810 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63     append connec
12820 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 4b  tion {;DateTimeK
12830 69 6e 64 3d 24 7b 64 61 74 65 54 69 6d 65 4b 69  ind=${dateTimeKi 12840 6e 64 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d nd}}.. }... 12850 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 12860 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f # NOTE: Figure o 12870 75 74 20 77 68 61 74 20 74 68 65 20 66 69 6e 61 ut what the fina 12880 6c 20 66 6c 61 67 73 20 66 6f 72 20 74 68 69 73 l flags for this 12890 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65 65 64 connection need 128a0 20 74 6f 20 62 65 2e 0d 0a 20 20 20 20 20 20 23 to be... # 128b0 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 .. set flag 128c0 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e s [getConnection 128d0 46 6c 61 67 73 20 24 66 69 6c 65 4e 61 6d 65 20 Flags$fileName
128e0 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a  $flags$quiet]..
128f0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
12900 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20   # NOTE: If our
12910 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64  caller specified
12920 20 73 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e   some SQLiteConn
12930 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64  ectionFlags, add
12940 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
12950 20 20 20 20 6e 65 63 65 73 73 61 72 79 20 70 6f      necessary po
12960 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e  rtion of the con
12970 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e  nection string n
12980 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ow...      #..
12990 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
129a0 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e  length $flags] > 129b0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 129c0 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 append conne 129d0 63 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b ction {;Flags=${
129e0 66 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d  flags}}..      }
129f0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
12a00 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75     # NOTE: If ou
12a10 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69  r caller specifi
12a20 65 64 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c  ed an extra payl
12a30 6f 61 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65  oad to the conne
12a40 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20  ction..      #
12a50 20 20 20 20 20 73 74 72 69 6e 67 2c 20 61 70 70       string, app
12a60 65 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20  end it now...
12a70 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
12a80 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $12a90 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e extra] > 0} then 12aa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 {.. appe 12ab0 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b nd connection \; 12ac0 20 24 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d$extra..      }
12ad0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
12ae0 20 20 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20     # NOTE: Open
12af0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
12b00 6e 65 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61  nection now, pla
12b10 63 69 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20  cing the opaque
12b20 68 61 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20  handle value..
12b30 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f      #       into
12b40 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 73 70   the variable sp
12b50 65 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63  ecified by our c
12b60 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d  aller...      #.
12b70 0a 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 73  .      set db [s
12b80 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51  ql open -type SQ
12b90 4c 69 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e  Lite [subst $con 12ba0 6e 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 nection]].... 12bb0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 12bc0 54 45 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 TE: Configure th 12bd0 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 e temporary dire 12be0 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65 ctory for the ne 12bf0 77 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62 wly opened datab 12c00 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ase.. # 12c10 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f connection no 12c20 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c w unless our cal 12c30 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d ler forbids it.. 12c40 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 12c50 69 66 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 if {$temporary &
12c60 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  & ![info exists
12c70 3a 3a 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72  ::no(setTemporar
12c80 79 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68  yDirectory)]} th
12c90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71  en {..        sq
12ca0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61  l execute $db [a 12cb0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 12cc0 20 20 20 20 20 20 20 20 20 22 50 52 41 47 4d 41 "PRAGMA 12cd0 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 temp_store_dire 12ce0 63 74 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 ctory = \"" [get 12cf0 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f TemporaryDirecto 12d00 72 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 ry] \"\;].. 12d10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 12d20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 50 65 72 # NOTE: Per 12d30 66 6f 72 6d 20 61 6e 79 20 65 78 74 72 61 20 70 form any extra p 12d40 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 65 er-connection se 12d50 74 75 70 20 66 6f 72 20 74 68 65 20 6e 65 77 6c tup for the newl 12d60 79 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20 20 y opened.. 12d70 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 # database 12d80 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 now unless our 12d90 63 61 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 69 caller forbids i 12da0 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 t... #.. 12db0 20 20 20 73 65 74 20 65 78 65 63 75 74 65 4f 6e set executeOn 12dc0 53 65 74 75 70 20 5b 67 65 74 45 78 65 63 75 74 Setup [getExecut 12dd0 65 4f 6e 53 65 74 75 70 5d 0d 0a 0d 0a 20 20 20 eOnSetup].... 12de0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 12df0 65 6e 67 74 68 20 24 65 78 65 63 75 74 65 4f 6e ength$executeOn
12e00 53 65 74 75 70 5d 20 3e 20 30 20 26 26 20 5c 0d  Setup] > 0 && \.
12e10 0a 20 20 20 20 20 20 20 20 20 20 21 5b 69 6e 66  .          ![inf
12e20 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78  o exists ::no(ex
12e30 65 63 75 74 65 4f 6e 53 65 74 75 70 29 5d 7d 20  ecuteOnSetup)]}
12e40 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12e50 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
12e60 45 3a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20  E: This command
12e70 6d 61 79 20 72 61 69 73 65 20 61 6e 20 65 72 72  may raise an err
12e80 6f 72 3b 20 69 66 20 73 6f 2c 20 74 68 61 74 20  or; if so, that
12e90 69 73 20 66 69 6e 65 2c 20 61 73 0d 0a 20 20 20  is fine, as..
12ea0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
12eb0 20 65 6e 63 6c 6f 73 69 6e 67 20 74 65 73 74 20   enclosing test
12ec0 77 69 6c 6c 20 74 68 65 6e 20 66 61 69 6c 2e 20  will then fail.
12ed0 20 54 68 65 20 5b 73 75 62 73 74 5d 20 63 6f 6d   The [subst] com
12ee0 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 20 20  mand is..
12ef0 20 23 20 20 20 20 20 20 20 75 73 65 64 20 6f 6e   #       used on
12f00 20 74 68 65 20 53 51 4c 20 69 6e 20 63 61 73 65   the SQL in case
12f10 20 69 74 20 6e 65 65 64 73 20 74 6f 20 72 65 66   it needs to ref
12f20 65 72 20 74 6f 20 73 74 61 74 65 20 69 6e 20 6f  er to state in o
12f30 75 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ur..        #
12f40 20 20 20 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20      context...
12f50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12f60 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62   sql execute $db 12f70 20 5b 73 75 62 73 74 20 24 65 78 65 63 75 74 65 [subst$execute
12f80 4f 6e 53 65 74 75 70 5d 0d 0a 20 20 20 20 20 20  OnSetup]..
12f90 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
12fa0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61      # NOTE: Alwa
12fb0 79 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f  ys return the co
12fc0 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle
12fd0 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20  upon success...
12fe0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
12ff0 74 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d  turn $db.. }. 13000 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 13010 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b DbConnection { { 13020 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d varName db} } {. 13030 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 13040 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f # NOTE: Refer to 13050 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 the specified v 13060 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 ariable (e.g. "d 13070 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 b") in the conte 13080 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 xt of our.. 13090 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e # caller. 130a0 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 The handle to 130b0 74 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 the database pre 130c0 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 viously opened v 130d0 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 ia the.. # 130e0 20 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 [setupDb] 130f0 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 procedure should 13100 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 be stored there 13110 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 13120 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
13130 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23  me db....      #
13140 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
13150 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65  This returns the
13160 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e   ADO.NET IDbConn
13170 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e  ection object in
13180 73 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a  stance for the..
13190 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 70        #       sp
131a0 65 63 69 66 69 65 64 20 64 61 74 61 62 73 65 20  ecified databse
131b0 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67  handle.  Since g
131c0 65 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65  etting this obje
131d0 63 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a  ct relies upon..
131e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61        #       Ea
131f0 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67  gle internals, g
13200 72 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64  reat care should
13210 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f   be taken to avo
13220 69 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d  id disposing of.
13230 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
13240 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74  his object or ot
13250 68 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 20  herwise putting
13260 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c  it into an inval
13270 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20  id state...
13280 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
13290 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20  nfo exists db]}
132a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
132b0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
132c0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
132d0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
132e0 6e 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66  nPublic -objectf
132f0 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20  lags +NoDispose
13300 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20  -alias \..
13310 20 20 20 20 20 20 20 20 49 6e 74 65 72 70 72 65          Interpre
13320 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f  ter.GetActive.co
13330 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d 20 24  nnections Item $13340 64 62 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 db.. } re 13350 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 13360 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 13370 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 13380 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74 75 E: Success, retu 13390 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 rn the opaque ob 133a0 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 ject handle... 133b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 133c0 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
133d0 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  ult..        } e
133e0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
133f0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
13400 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72  NOTE: Failure, r
13410 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20  eport why...
13420 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13430 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 13440 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 13450 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 13460 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 13470 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 ING: failed to g 13480 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 et connection ha 13490 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 ndle for databas 134a0 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. 134b0 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20$db "\",
134c0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72  error: " \n\t $r 134d0 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. 134e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 134f0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 13500 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c # NOTE: Failure, 13510 20 72 65 74 75 72 6e 20 61 6e 20 6f 62 76 69 6f return an obvio 13520 75 73 6c 79 20 69 6e 76 61 6c 69 64 20 6f 70 61 usly invalid opa 13530 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c que object handl 13540 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 13550 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 13560 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 13570 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f freeDbConnectio 13580 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e n { {varName con 13590 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 nection} } {.. 135a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 135b0 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 OTE: Refer to th 135c0 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 e specified vari 135d0 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e able (e.g. "conn 135e0 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d ection") in the. 135f0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 13600 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 ontext of our ca 13610 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71 75 ller. The opaqu 13620 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 e object handle 13630 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a for an ADO.NET.. 13640 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 13650 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 nnection previou 13660 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62 79 20 sly returned by 13670 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e [getDbConnection 13680 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 ] should be.. 13690 20 20 20 23 20 20 20 20 20 20 20 73 74 6f 72 65 # store 136a0 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 d there... 136b0 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 136c0 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63$varName connec
136d0 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  tion....      #.
136e0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  .      # NOTE: A
136f0 74 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65  ttempt to remove
13700 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65   the opaque obje
13710 63 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74  ct handle from t
13720 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 0d 0a  he interpreter..
13730 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 6f        #       no
13740 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65 63 74  w.  This [object
13750 20 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77   dispose] call w
13760 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79  ill not actually
13770 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 0d   dispose of the.
13780 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75  .      #       u
13790 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74  nderlying object
137a0 20 62 65 63 61 75 73 65 20 74 68 65 20 2b 4e 6f   because the +No
137b0 44 69 73 70 6f 73 65 20 66 6c 61 67 20 77 61 73  Dispose flag was
137c0 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20   set on it..
137d0 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67    #       during
137e0 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 74 68 65   creation of the
137f0 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68   opaque object h
13800 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d  andle...      #.
13810 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
13820 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 63 74 69   exists connecti
13830 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  on] && \..
13840 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65      [catch {obje
13850 63 74 20 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e  ct dispose $conn 13860 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20 ection} error]} 13870 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 13880 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 13890 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 E: We somehow fa 138a0 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 74 iled to remove t 138b0 68 65 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72 he handle, repor 138c0 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 t why... 138d0 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 138e0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
138f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
13900 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
13910 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
13920 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e  d to remove conn
13930 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22  ection handle \"
13940 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d  " $connection \. 13950 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 . "\" 13960 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 13970 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
13980 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
13990 20 20 20 70 72 6f 63 20 61 64 64 44 62 43 6f 6e     proc addDbCon
139a0 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63  nection { connec
139b0 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62  tion {varName db
139c0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
139d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
139e0 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69  fer to the speci
139f0 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65  fied variable (e
13a00 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65  .g. "db") in the
13a10 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d   context of our.
13a20 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
13a30 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d  aller...      #.
13a40 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $13a50 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 varName db.... 13a60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 13a70 4f 54 45 3a 20 43 72 65 61 74 65 20 61 20 63 6f OTE: Create a co 13a80 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 65 rrectly formatte 13a90 64 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64 d name for the d 13aa0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 atabase connecti 13ab0 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 on to.. # 13ac0 20 20 20 20 20 62 65 20 61 64 64 65 64 20 74 6f be added to 13ad0 20 74 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 65 the list manage 13ae0 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 20 69 d by the Eagle i 13af0 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 nterpreter... 13b00 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 13b10 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b db [object invok 13b20 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 13b30 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 13b40 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e Eagle._Componen 13b50 74 73 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d 61 ts.Private.Forma 13b60 74 4f 70 73 20 44 61 74 61 62 61 73 65 4f 62 6a tOps DatabaseObj 13b70 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74 ectName$connect
13b80 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
13b90 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
13ba0 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65  n [object invoke
13bb0 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
13bc0 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d  Active NextId]].
13bd0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
13be0 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68    # NOTE: Add th
13bf0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
13c00 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62  ction provided b
13c10 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f 20  y our caller to
13c20 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 20 20  the list..
13c30 23 20 20 20 20 20 20 20 6f 66 20 74 68 6f 73 65  #       of those
13c40 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61   known to the Ea
13c50 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  gle interpreter.
13c60 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
13c70 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
13c80 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
13c90 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
13ca0 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f  Active.connectio
13cb0 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 20 20 20  ns Add \..
13cc0 20 20 20 20 24 64 62 20 24 63 6f 6e 6e 65 63 74      $db$connect
13cd0 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ion..    }.....
13ce0 20 20 20 70 72 6f 63 20 67 65 74 52 6f 77 73 46     proc getRowsF
13cf0 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b 20 64  romDataTable { d
13d00 61 74 61 54 61 62 6c 65 20 7d 20 7b 0d 0a 20 20  ataTable } {..
13d10 20 20 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69      set rows [li
13d20 73 74 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 63  st]..      set c
13d30 6f 75 6e 74 20 5b 24 64 61 74 61 54 61 62 6c 65  ount [$dataTable 13d40 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d Columns.Count]. 13d50 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 ... for {se 13d60 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 t index 0} {$ind
13d70 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e  ex < $count} {in 13d80 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 cr index} {.. 13d90 20 20 20 20 20 73 65 74 20 64 61 74 61 43 6f 6c set dataCol 13da0 75 6d 6e 20 5b 24 64 61 74 61 54 61 62 6c 65 20 umn [$dataTable
13db0 2d 61 6c 69 61 73 20 43 6f 6c 75 6d 6e 73 2e 67  -alias Columns.g
13dc0 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d  et_Item $index]. 13dd0 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d . set nam 13de0 65 73 28 24 69 6e 64 65 78 29 20 5b 24 64 61 74 es($index) [$dat 13df0 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61 aColumn ColumnNa 13e00 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a me].. }.... 13e10 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 object for 13e20 65 61 63 68 20 2d 61 6c 69 61 73 20 64 61 74 61 each -alias data 13e30 52 6f 77 20 5b 73 65 74 20 64 61 74 61 52 6f 77 Row [set dataRow 13e40 73 20 5b 24 64 61 74 61 54 61 62 6c 65 20 52 6f s [$dataTable Ro
13e50 77 73 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ws]] {..
13e60 73 65 74 20 72 6f 77 20 5b 6c 69 73 74 5d 0d 0a  set row [list]..
13e70 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73  ..        for {s
13e80 65 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e  et index 0} {$in 13e90 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 dex <$count} {i
13ea0 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20  ncr index} {..
13eb0 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75          set valu
13ec0 65 20 5b 24 64 61 74 61 52 6f 77 20 2d 63 72 65  e [$dataRow -cre 13ed0 61 74 65 20 2d 61 6c 69 61 73 20 67 65 74 5f 49 ate -alias get_I 13ee0 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20 tem$index]....
13ef0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
13f00 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c  ring length $val 13f10 75 65 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 ue] > 0 && \.. 13f20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 6f 62 ![ob 13f30 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 76 ject invoke Conv 13f40 65 72 74 20 49 73 44 42 4e 75 6c 6c 20 24 76 61 ert IsDBNull$va
13f50 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  lue]} then {..
13f60 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
13f70 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d  d row [list $nam 13f80 65 73 28 24 69 6e 64 65 78 29 20 5b 24 76 61 6c es($index) [$val 13f90 75 65 20 54 6f 53 74 72 69 6e 67 5d 5d 0d 0a 20 ue ToString]].. 13fa0 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 13fb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c {.. l 13fc0 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 append row [list 13fd0 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 5d$names($index)] 13fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 13ff0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 14000 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 73 lappend rows 14010 20 24 72 6f 77 0d 0a 20 20 20 20 20 20 7d 0d 0a$row..      }..
14020 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $14030 72 6f 77 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a rows.. }..... 14040 20 20 20 20 70 72 6f 63 20 64 75 6d 70 52 6f 77 proc dumpRow 14050 73 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b sFromDataTable { 14060 20 63 68 61 6e 6e 65 6c 20 72 6f 77 73 20 7d 20 channel rows } 14070 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 65 71 {.. set seq 14080 75 65 6e 63 65 20 31 0d 0a 0d 0a 20 20 20 20 20 uence 1.... 14090 20 66 6f 72 65 61 63 68 20 72 6f 77 20 24 72 6f foreach row$ro
140a0 77 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  ws {..        tp
140b0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 140c0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 140d0 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 [expr {$
140e0 73 65 71 75 65 6e 63 65 20 3e 20 31 20 3f 20 22  sequence > 1 ? "
140f0 5c 6e 22 20 3a 20 22 22 7d 5d 20 22 2d 2d 2d 2d  \n" : ""}] "----
14100 20 52 4f 57 20 23 22 20 24 73 65 71 75 65 6e 63   ROW #" $sequenc 14110 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 e :\n].... 14120 20 20 66 6f 72 65 61 63 68 20 70 61 69 72 20 24 foreach pair$
14130 72 6f 77 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  row {..
14140 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70   if {[llength $p 14150 61 69 72 5d 20 3e 3d 20 32 7d 20 74 68 65 6e 20 air] >= 2} then 14160 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 14170 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
14180 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a  ppendArgs \t \..
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
141a0 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70  [list [lindex $p 141b0 61 69 72 20 30 5d 5d 20 22 3a 20 22 20 5b 6c 69 air 0]] ": " [li 141c0 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 st [lindex$pair
141d0 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20   1]] \n]..
141e0 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6c      } elseif {[l
141f0 6c 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3d 3d  length $pair] == 14200 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 1} then {.. 14210 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
14220 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
14230 67 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20  gs \t \..
14240 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b           [list [
14250 6c 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d  lindex $pair 0]] 14260 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e 22 5d 0d 0a ": <null>\n"].. 14270 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 14280 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 14290 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c tputs$channel \
142a0 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20 23 20 4e 4f  t<empty>\n; # NO
142b0 54 45 3a 20 4e 6f 20 64 61 74 61 3f 0d 0a 20 20  TE: No data?..
142c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
142d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
142e0 69 6e 63 72 20 73 65 71 75 65 6e 63 65 0d 0a 20  incr sequence..
142f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
14300 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e  ..    proc clean
14310 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20  upDb { fileName
14320 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f  {varName db} {co
14330 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61  llect true} {qua
14340 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20  lify true}..
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14360 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d   {delete true} }
14370 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
14380 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
14390 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20  pt to force all
143a0 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65  pending "garbage
143b0 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20  " objects to be
143c0 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20  collected,..
143d0 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64    #       includ
143e0 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65  ing SQLite state
143f0 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70  ments and backup
14400 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73   objects; this s
14410 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20  hould allow..
14420 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75     #       the u
14430 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61  nderlying databa
14440 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65  se file to be de
14450 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  leted...      #.
14460 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c  .      if {$coll 14470 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ect} then {.. 14480 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 collectGarb 14490 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e age$::test_chan
144a0 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  nel..      }....
144b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
144c0 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
144d0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
144e0 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
144f0 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
14500 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
14510 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20  #       caller.
14520 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74   The handle to t
14530 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76  he database prev
14540 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69  iously opened vi
14550 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  a the..      #
14560 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70       [setupDb] p
14570 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20  rocedure should
14580 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e  be stored there.
14590 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
145a0 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 145b0 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d e db.... #. 145c0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 145d0 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 lose the connect 145e0 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 ion to the datab 145f0 61 73 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73 ase now. This s 14600 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a hould allow us.. 14610 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f # to 14620 20 64 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65 delete the unde 14630 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 rlying database 14640 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a file... #.. 14650 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 14660 65 78 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63 exists db] && [c 14670 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 atch {sql close 14680 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65$db} error]} the
14690 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
146a0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
146b0 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65  We somehow faile
146c0 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64  d to close the d
146d0 61 74 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20  atabase, report
146e0 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  why...        #.
146f0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $14700 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 14710 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 14720 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 14730 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 14740 74 6f 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73 to close databas 14750 65 20 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65 e \""$db "\", e
14760 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20  rror: " \..
14770 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72         \n\t $err 14780 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d or \n].. }. 14790 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 147a0 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c # NOTE: First, 147b0 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c see if our call 147c0 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 er has requested 147d0 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 an in-memory da 147e0 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 tabase... # 147f0 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 .. set isMe 14800 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 mory [isMemoryDb 14810 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20$fileName]....
14820 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
14830 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
14840 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65  full path to the
14850 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e   database file n
14860 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61  ame.  For now, a
14870 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23  ll test..      #
14880 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20         database
14890 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64  files are stored
148a0 20 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72   in the temporar
148b0 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20  y directory...
148c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
148d0 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24  {!$isMemory &&$
148e0 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d  qualify} then {.
148f0 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c  .        set fil
14900 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  eName [file join
14910 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
14920 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61  ectory] [file ta
14930 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  il $fileName]].. 14940 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 14950 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 14960 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 : Check if the f 14970 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 ile still exists 14980 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 14990 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 if {!$isMemory
149a0 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b   && $delete && [ 149b0 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
149c0 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
149d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
149e0 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
149f0 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73  deleting databas
14a00 65 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62  e files if someb
14a10 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f  ody sets the glo
14a20 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  bal..        #
14a30 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f       variable to
14a40 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20   prevent it...
14a50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14a60 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
14a70 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44  ts ::no(cleanupD
14a80 62 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  bFile)]} then {.
14a90 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
14aa0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
14ab0 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74  Attempt to delet
14ac0 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62  e the test datab
14ad0 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20  ase file now...
14ae0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
14af0 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63        if {[set c
14b00 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65  ode [catch {file
14b10 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d   delete $fileNam 14b20 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e e} error]]} then 14b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 14b40 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 14b50 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f NOTE: We someho 14b60 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 w failed to dele 14b70 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 te the file, rep 14b80 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 ort why... 14b90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 14ba0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
14bb0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
14bc0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
14bd0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
14be0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
14bf0 74 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61  to delete databa
14c00 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  se file \"" $fil 14c10 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. 14c20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72 "\" dur 14c30 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 ing cleanup, err 14c40 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
14c50 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
14c60 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
14c70 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
14c80 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
14c90 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77  OTE: Show that w
14ca0 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69  e skipped deleti
14cb0 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20  ng the file...
14cc0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14cd0 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d       set code 0.
14ce0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  ...          tpu
14cf0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 14d00 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 14d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14d20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 "==== WARNING: s 14d30 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 kipped deleting 14d40 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 database file \" 14d50 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 "$fileName \..
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
14d70 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c   during cleanup\
14d80 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n"]..        }..
14d90 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
14da0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14db0 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66     # NOTE: The f
14dc0 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  ile does not exi
14dd0 73 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20  st, success!..
14de0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14df0 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20   set code 0..
14e00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
14e10 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20  turn $code.. 14e20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 }..... proc s 14e30 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 aveEnvironmentVa 14e40 72 69 61 62 6c 65 73 20 7b 20 6e 61 6d 65 73 20 riables { names 14e50 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b {varName ""} } { 14e60 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 14e70 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 65 61 63 # NOTE: For eac 14e80 68 20 6e 61 6d 65 2c 20 64 6f 65 73 20 74 68 65 h name, does the 14e90 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e live environmen 14ea0 74 20 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 t variable exist 14eb0 3f 20 20 49 66 0d 0a 20 20 20 20 20 20 23 20 20 ? If.. # 14ec0 20 20 20 20 20 73 6f 2c 20 73 61 76 65 20 74 68 so, save th 14ed0 65 20 76 61 6c 75 65 20 66 6f 72 20 6c 61 74 65 e value for late 14ee0 72 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 r; otherwise, ma 14ef0 6b 65 20 73 75 72 65 20 74 68 65 20 73 61 76 65 ke sure the save 14f00 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 14f10 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 value does not 14f20 65 78 69 73 74 20 65 69 74 68 65 72 2e 20 20 54 exist either. T 14f30 68 65 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d he live environm 14f40 65 6e 74 20 76 61 72 69 61 62 6c 65 73 0d 0a 20 ent variables.. 14f50 20 20 20 20 20 23 20 20 20 20 20 20 20 41 52 45 # ARE 14f60 20 4e 4f 54 20 63 68 61 6e 67 65 64 20 62 79 20 NOT changed by 14f70 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 0d this procedure.. 14f80 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 14f90 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 14fa0 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 th$varName] ==
14fb0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
14fc0 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 20 73     set varName s
14fd0 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d  avedEnv..      }
14fe0 0d 0a 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20  ....      upvar
14ff0 31 20 24 76 61 72 4e 61 6d 65 20 73 61 76 65 64  1 $varName saved 15000 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 Env.... for 15010 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 each name$names
15020 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
15030 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65  [info exists ::e
15040 6e 76 28 24 6e 61 6d 65 29 5d 7d 20 74 68 65 6e  nv($name)]} then 15050 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 15060 74 20 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 t savedEnv($name
15070 29 20 24 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 0d  ) $::env($name).
15080 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
15090 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73  {..          uns
150a0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73  et -nocomplain s
150b0 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a  avedEnv($name).. 150c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 150d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 150e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 150f0 73 20 69 73 20 73 65 6c 66 2d 63 6c 65 61 6e 69 s is self-cleani 15100 6e 67 2e 20 20 49 66 20 6e 6f 20 73 61 76 65 64 ng. If no saved 15110 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 environment var 15120 69 61 62 6c 65 73 20 6e 6f 77 0d 0a 20 20 20 20 iables now.. 15130 20 20 23 20 20 20 20 20 20 20 65 78 69 73 74 2c # exist, 15140 20 72 65 6d 6f 76 65 20 74 68 65 20 61 72 72 61 remove the arra 15150 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 y... #.. 15160 20 20 20 69 66 20 7b 5b 61 72 72 61 79 20 73 69 if {[array si 15170 7a 65 20 73 61 76 65 64 45 6e 76 5d 20 3d 3d 20 ze savedEnv] == 15180 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 15190 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 unset -nocomp 151a0 6c 61 69 6e 20 73 61 76 65 64 45 6e 76 0d 0a 20 lain savedEnv.. 151b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 151c0 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f .. proc resto 151d0 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 reEnvironmentVar 151e0 69 61 62 6c 65 73 20 7b 20 6e 61 6d 65 73 20 7b iables { names { 151f0 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d varName ""} } {. 15200 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 15210 23 20 4e 4f 54 45 3a 20 46 6f 72 20 65 61 63 68 # NOTE: For each 15220 20 6e 61 6d 65 2c 20 64 6f 65 73 20 74 68 65 20 name, does the 15230 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e saved environmen 15240 74 20 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 t variable exist 15250 3f 20 20 49 66 0d 0a 20 20 20 20 20 20 23 20 20 ? If.. # 15260 20 20 20 20 20 73 6f 2c 20 72 65 73 74 6f 72 65 so, restore 15270 20 74 68 65 20 73 61 76 65 64 20 76 61 6c 75 65 the saved value 15280 20 61 6e 64 20 75 6e 73 65 74 20 69 74 3b 20 6f and unset it; o 15290 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 therwise, make s 152a0 75 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ure.. # 152b0 20 20 20 74 68 65 20 6c 69 76 65 20 65 6e 76 69 the live envi 152c0 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 ronment variable 152d0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 20 does not exist 152e0 65 69 74 68 65 72 20 28 69 2e 65 2e 20 69 74 0d either (i.e. it. 152f0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 . # w 15300 61 73 20 6e 6f 74 20 73 65 74 20 74 6f 20 62 65 as not set to be 15310 67 69 6e 20 77 69 74 68 29 2e 20 20 42 6f 74 68 gin with). Both 15320 20 73 61 76 65 64 20 61 6e 64 20 6c 69 76 65 20 saved and live 15330 65 6e 76 69 72 6f 6e 6d 65 6e 74 0d 0a 20 20 20 environment.. 15340 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 # varia 15350 62 6c 65 73 20 41 52 45 20 63 68 61 6e 67 65 64 bles ARE changed 15360 20 62 79 20 74 68 69 73 20 70 72 6f 63 65 64 75 by this procedu 15370 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 re... #.. 15380 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 15390 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d length$varName]
153a0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
153b0 20 20 20 20 20 20 20 73 65 74 20 76 61 72 4e 61         set varNa
153c0 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20  me savedEnv..
153d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 75 70     }....      up
153e0 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 73  var 1 $varName s 153f0 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 avedEnv.... 15400 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 6e foreach name$n
15410 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
15420 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
15430 20 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29   savedEnv($name) 15440 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 15450 20 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 24 set ::env($
15460 6e 61 6d 65 29 20 24 73 61 76 65 64 45 6e 76 28  name) $savedEnv( 15470 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20$name)..
15480 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
15490 61 69 6e 20 73 61 76 65 64 45 6e 76 28 24 6e 61  ain savedEnv($na 154a0 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 me).. } e 154b0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 154c0 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 unset -nocompla 154d0 69 6e 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 0d in ::env($name).
154e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
154f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
15500 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
15510 69 73 20 69 73 20 73 65 6c 66 2d 63 6c 65 61 6e  is is self-clean
15520 69 6e 67 2e 20 20 49 66 20 6e 6f 20 73 61 76 65  ing.  If no save
15530 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61  d environment va
15540 72 69 61 62 6c 65 73 20 6e 6f 77 0d 0a 20 20 20  riables now..
15550 20 20 20 23 20 20 20 20 20 20 20 65 78 69 73 74     #       exist
15560 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 61 72 72  , remove the arr
15570 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ay...      #..
15580 20 20 20 20 69 66 20 7b 5b 61 72 72 61 79 20 73      if {[array s
15590 69 7a 65 20 73 61 76 65 64 45 6e 76 5d 20 3d 3d  ize savedEnv] ==
155a0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
155b0 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d      unset -nocom
155c0 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76 0d 0a  plain savedEnv..
155d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
155e0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75  ...    proc setu
155f0 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c  pDbInterruptCall
15600 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c  back { channel l
15610 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70  og } {..      tp
15620 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 15630 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64 65 -- setting up de 15640 62 75 67 67 65 72 20 69 6e 74 65 72 72 75 70 74 bugger interrupt 15650 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a callback... ".. 15660 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 15670 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 61 ch {.. sa 15680 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 veEnvironmentVar 15690 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a iables [list \.. 156a0 20 20 20 20 20 20 20 20 20 20 20 20 71 75 69 65 quie 156b0 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65 72 tFindInterpreter 156c0 54 65 73 74 50 61 74 68 20 71 75 69 65 74 53 65 TestPath quietSe 156d0 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 54 65 tupInterpreterTe 156e0 73 74 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20 20 stPath].... 156f0 20 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 try {.. 15700 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 15710 20 23 20 4e 4f 54 45 3a 20 50 72 65 76 65 6e 74 # NOTE: Prevent 15720 20 74 68 65 20 76 65 6e 64 6f 72 20 73 63 72 69 the vendor scri 15730 70 74 20 66 72 6f 6d 20 62 65 69 6e 67 20 6e 6f pt from being no 15740 69 73 79 20 77 68 65 6e 20 63 72 65 61 74 69 6e isy when creatin 15750 67 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 g.. # 15760 20 20 20 20 20 74 68 65 20 69 73 6f 6c 61 74 65 the isolate 15770 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a d interpreter... 15780 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 15790 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 set ::env 157a0 28 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 (quietFindInterp 157b0 72 65 74 65 72 54 65 73 74 50 61 74 68 29 20 31 reterTestPath) 1 157c0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 157d0 3a 3a 65 6e 76 28 71 75 69 65 74 53 65 74 75 70 ::env(quietSetup 157e0 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50 InterpreterTestP 157f0 61 74 68 29 20 31 0d 0a 0d 0a 20 20 20 20 20 20 ath) 1.... 15800 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 15810 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 # NOTE: Make su 15820 72 65 20 74 68 65 20 73 63 72 69 70 74 20 64 65 re the script de 15830 62 75 67 67 65 72 20 61 6e 64 20 74 68 65 20 69 bugger and the i 15840 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 solated interpre 15850 74 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ter.. # 15860 20 20 20 20 20 20 20 61 72 65 20 73 65 74 75 70 are setup 15870 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 and ready for u 15880 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 se... # 15890 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 .. debu 158a0 67 20 73 65 74 75 70 20 74 72 75 65 20 74 72 75 g setup true tru 158b0 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 e.... # 158c0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 158d0 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 TE: Load the nec 158e0 65 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20 essary packages 158f0 69 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 into the isolate 15900 64 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a d interpreter... 15910 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 15920 20 20 20 20 20 20 20 64 65 62 75 67 20 65 76 61 debug eva 15930 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l {.. 15940 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 package require 15950 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 Eagle.. 15960 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 package requ 15970 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 ire Eagle.Librar 15980 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 y.. p 15990 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 ackage require E 159a0 61 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 agle.Test.. 159b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 159c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 159d0 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 # NOTE: Copy th 159e0 65 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69 e necessary vari 159f0 61 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69 ables into the i 15a00 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 solated interpre 15a10 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ter... 15a20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 #.. deb 15a30 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 ug invoke 0 set 15a40 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 ::test_channel$
15a50 63 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a  channel; # NOTE:
15a60 20 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20   For [tputs]...
15a70 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69           debug i
15a80 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65  nvoke 0 set ::te
15a90 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e  st_log $log; # N 15aa0 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e OTE: For [tlog]. 15ab0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 15ac0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 15ad0 45 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 E: Install the c 15ae0 61 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74 allback script t 15af0 6f 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 69 o be evaluated i 15b00 6e 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a n the isolated.. 15b10 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 15b20 20 20 69 6e 74 65 72 70 72 65 74 65 72 20 77 68 interpreter wh 15b30 65 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 en this interpre 15b40 74 65 72 20 69 73 20 69 6e 74 65 72 72 75 70 74 ter is interrupt 15b50 65 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20 20 ed by script.. 15b60 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 15b70 63 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 cancellation, et 15b80 63 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d c... #. 15b90 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 . debug 15ba0 20 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 callback apply 15bb0 7b 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 {{sender e} {.. 15bc0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 15bd0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 15be0 3a 20 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 : Check if this 15bf0 64 65 62 75 67 67 65 72 20 63 61 6c 6c 62 61 63 debugger callbac 15c00 6b 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65 k is one that we 15c10 20 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20 care about... 15c20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 15c30 20 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 74 set int 15c40 65 72 72 75 70 74 54 79 70 65 73 20 5b 73 70 6c erruptTypes [spl 15c50 69 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70 74 it [$e Interrupt
15c60 54 79 70 65 5d 20 22 2c 20 22 5d 0d 0a 0d 0a 20  Type] ", "]....
15c70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22             if {"
15c80 43 61 6e 63 65 6c 65 64 22 20 69 6e 20 24 69 6e  Canceled" in $in 15c90 74 65 72 72 75 70 74 54 79 70 65 73 20 7c 7c 20 terruptTypes || 15ca0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 15cb0 20 20 20 22 55 6e 77 6f 75 6e 64 22 20 69 6e 20 "Unwound" in 15cc0 24 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 7d$interruptTypes}
15cd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
15ce0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15cf0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
15d00 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 5b 6f  Make sure the [o
15d10 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69  bject] command i
15d20 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 69  s available.  Si
15d30 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nce..
15d40 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20     #       this
15d50 69 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 69  is an isolated i
15d60 6e 74 65 72 70 72 65 74 65 72 2c 20 63 68 65 63  nterpreter, chec
15d70 6b 20 66 6f 72 20 69 74 20 74 68 65 20 68 61 72  k for it the har
15d80 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..
15d90 20 23 20 20 20 20 20 20 20 77 61 79 2e 0d 0a 20   #       way...
15da0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
15db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
15dc0 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f   {[llength [info
15dd0 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74   commands object
15de0 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ]] > 0} then {..
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15e00 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
15e10 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61     # NOTE: Itera
15e20 74 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64  te through all d
15e30 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
15e40 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65  ons known to the
15e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15e60 20 20 23 20 20 20 20 20 20 20 70 61 72 65 6e 74    #       parent
15e70 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
15e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
15e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15ea0 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
15eb0 20 2d 61 6c 69 61 73 20 70 61 69 72 20 5b 6f 62   -alias pair [ob
15ec0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
15ed0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
15ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
15ef0 20 20 20 20 20 24 65 20 49 6e 74 65 72 70 72 65       $e Interpre 15f00 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d ter.connections] 15f10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 15f20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 15f30 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 15f40 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61 E: Attempt to ca 15f50 6e 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65 ncel any SQL que 15f60 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 ries in progress 15f70 20 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on.. 15f80 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 15f90 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e his database con 15fa0 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 nection... 15fb0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 15fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 15fd0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 if {[catch {$pa
15fe0 69 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d  ir Value.Cancel}
15ff0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
16000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
16010 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 16020 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 16030 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 ndArgs \n \.. 16040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16050 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 16060 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61 NG: failed to ca 16070 6e 63 65 6c 20 71 75 65 72 79 20 66 6f 72 20 22 ncel query for " 16080 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16090 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e "con 160a0 6e 65 63 74 69 6f 6e 20 5c 22 22 20 5b 24 70 61 nection \"" [$pa
160b0 69 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72  ir Key] "\", err
160c0 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20  or: " \n\t \..
160d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
160e0 20 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d        $error \n] 160f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16100 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 16110 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 16120 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 16130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16140 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
16150 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
16160 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20  rgs \n \..
16170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
16180 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 6e  === WARNING: can
16190 6e 6f 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 71  not cancel any q
161a0 75 65 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 20  ueries: " \..
161b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
161c0 20 22 74 68 65 20 5c 22 6f 62 6a 65 63 74 5c 22   "the \"object\"
161d0 20 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20   command is not
161e0 61 76 61 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20  available\n"]..
161f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16200 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
16210 20 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20           }}..
16220 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b       } finally {
16230 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 74  ..          rest
16240 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61  oreEnvironmentVa
16250 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d  riables [list \.
16260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 71  .              q
16270 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65  uietFindInterpre
16280 74 65 72 54 65 73 74 50 61 74 68 20 71 75 69 65  terTestPath quie
16290 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65  tSetupInterprete
162a0 72 54 65 73 74 50 61 74 68 5d 0d 0a 20 20 20 20  rTestPath]..
162b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
162c0 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  rror] == 0} then
162d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   {..        addC
162e0 6f 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72  onstraint interr
162f0 75 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69  uptCallback.sqli
16300 74 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  te3....        t
16310 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65  puts $channel ye 16320 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 s\n.. } els 16330 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu 16340 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
16350 65 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72  endArgs "no, err
16360 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 16370 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a r \n].. }.. 16380 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 16390 6f 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b oc cleanupFile { 163a0 20 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 fileName {colle 163b0 63 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 ct true} {force 163c0 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 163d0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 163e0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f E: Attempt to fo 163f0 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 rce all pending 16400 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 "garbage" object 16410 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 s to be collecte 16420 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 d,.. # 16430 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 including SQLi 16440 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e te statements an 16450 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 d backup objects 16460 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c ; this should al 16470 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 low.. # 16480 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e the underlyin 16490 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 g database file 164a0 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a to be deleted... 164b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 164c0 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 f {$collect} the
164d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c  n {..        col
164e0 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74  lectGarbage $::t 164f0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 est_channel.. 16500 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 16510 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 16520 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 heck if the file 16530 20 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a still exists... 16540 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 16550 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 f {[file exists 16560 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
16570 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
16580 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
16590 6b 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73  kip deleting tes
165a0 74 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62  t files if someb
165b0 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f  ody sets the glo
165c0 62 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20  bal variable..
165d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
165e0 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20   prevent it...
165f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
16600 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21   if {$force || ! 16610 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 16620 6f 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d o(cleanupFile)]} 16630 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 16640 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 16650 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 16660 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 to delete the te 16670 73 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 st file now... 16680 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 16690 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f if {[set co 166a0 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 de [catch {file 166b0 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 delete$fileName
166c0 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20  } error]]} then
166d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
166e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
166f0 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
16700 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
16710 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f  e the file, repo
16720 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20  rt why...
16730 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16740 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 16750 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 16760 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 16770 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 16780 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 16790 6f 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 o delete test fi 167a0 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 le \""$fileName
167b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
167c0 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63      "\" during c
167d0 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22  leanup, error: "
167e0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 167f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 16800 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 16810 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 16820 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 16830 53 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 Show that we ski 16840 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 pped deleting th 16850 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 e file... 16860 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 16870 73 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 set code 0.... 16880 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
16890 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
168a0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
168b0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
168c0 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65   WARNING: skippe
168d0 64 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20  d deleting test
168e0 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa 168f0 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 16900 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 "\" during c 16910 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 leanup\n"].. 16920 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 16930 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 16940 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 16950 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 : The file does 16960 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 not exist, succe 16970 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ss!.. #.. 16980 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code 16990 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 0.. }.... 169a0 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 return$cod
169b0 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  e..    }.....
169c0 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 4d 65 6d   proc cleanupMem
169d0 6f 72 79 20 7b 20 76 61 72 4e 61 6d 65 20 7b 71  ory { varName {q
169e0 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
169f0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
16a00 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
16a10 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  and] && \..
16a20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
16a30 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20  gth $varName] > 16a40 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 16a50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 16a60 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 16a70 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 16a80 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e iable (e.g. "con 16a90 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 nection") in the 16aa0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 16ab0 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 context of our 16ac0 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 caller. The op 16ad0 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 aque object hand 16ae0 6c 65 20 66 6f 72 20 61 6e 0d 0a 20 20 20 20 20 le for an.. 16af0 20 20 20 23 20 20 20 20 20 20 20 41 44 4f 2e 4e # ADO.N 16b00 45 54 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 ET connection pr 16b10 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 eviously returne 16b20 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 d by [getDbConne 16b30 63 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ction].. 16b40 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 # should b 16b50 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d e stored there.. 16b60 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 16b70 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
16b80 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  Name connection.
16b90 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
16ba0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
16bb0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
16bc0 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 6c   $connection Rel 16bd0 65 61 73 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20 easeMemory.. 16be0 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 } result]} t 16bf0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 16c00 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
16c10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
16c20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 16c30 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 16c40 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 16c50 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 16c60 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 16c70 72 65 6c 65 61 73 65 20 64 61 74 61 62 61 73 65 release database 16c80 20 6d 65 6d 6f 72 79 2c 20 65 72 72 6f 72 3a 20 memory, error: 16c90 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 16ca0 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c \n\t$resul
16cb0 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
16cc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
16cd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
16ce0 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e  if {[llength [in
16cf0 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75  fo commands debu
16d00 67 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  g]] > 0} then {.
16d10 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
16d20 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
16d30 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74   uplevel 1 [list
16d40 20 64 65 62 75 67 20 70 75 72 67 65 5d 0d 0a 20   debug purge]..
16d50 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d         } result]
16d60 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
16d70 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 16d80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 16d90 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
16da0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
16db0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
16dc0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
16dd0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
16de0 74 6f 20 70 75 72 67 65 20 63 61 6c 6c 20 66 72  to purge call fr
16df0 61 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d  ame, error: " \.
16e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
16e10 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 16e20 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 16e30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 16e40 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 16e50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c {.. upl 16e60 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 evel 1 [list deb 16e70 75 67 20 63 6c 65 61 6e 75 70 5d 0d 0a 20 20 20 ug cleanup].. 16e80 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 } result]} 16e90 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 16ea0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
16eb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
16ec0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 16ed0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 16ee0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 16ef0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 16f00 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 16f10 20 63 6c 65 61 6e 75 70 20 69 6e 74 65 72 70 72 cleanup interpr 16f20 65 74 65 72 2c 20 65 72 72 6f 72 3a 20 22 20 5c eter, error: " \ 16f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 16f40 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c \n\t$result \
16f50 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
16f60 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
16f70 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
16f80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70   {..          up
16f90 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65  level 1 [list de
16fa0 62 75 67 20 63 6f 6c 6c 65 63 74 5d 0d 0a 20 20  bug collect]..
16fb0 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d        } result]}
16fc0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
16fd0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 16fe0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 16ff0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
17000 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
17010 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
17020 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
17030 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
17040 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67  o collect garbag
17050 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20  e, error: " \..
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
17070 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 17080 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 17090 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 170a0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 170b0 70 72 6f 63 20 73 65 74 75 70 4d 65 6d 6f 72 79 proc setupMemory 170c0 43 6f 75 6e 74 65 72 73 20 7b 20 76 61 72 4e 61 Counters { varNa 170d0 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 me } {.. if 170e0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 170f0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 17100 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 n {.. upv 17110 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f ar 1$varName co
17120 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20  unter....
17130 20 73 65 74 20 63 6f 75 6e 74 65 72 28 31 29 20   set counter(1)
17140 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d  [object create -
17150 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20  alias \..
17160 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67       System.Diag
17170 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61  nostics.Performa
17180 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65  nceCounter Proce
17190 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ss \..
171a0 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 22 20    "Working Set"
171b0 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b  [file rootname [
171c0 66 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e  file tail $::bin 171d0 5f 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 _file]]].... 171e0 20 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 set counter( 171f0 32 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 2) [object creat 17200 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 e -alias \.. 17210 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 17220 69 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f iagnostics.Perfo 17230 72 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 rmanceCounter Pr 17240 6f 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 ocess \.. 17250 20 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 "Working Se 17260 74 20 50 65 61 6b 22 20 5b 66 69 6c 65 20 72 6f t Peak" [file ro 17270 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 otname [file tai 17280 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d l$::bin_file]]]
17290 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
172a0 63 6f 75 6e 74 65 72 28 33 29 20 5b 6f 62 6a 65  counter(3) [obje
172b0 63 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73  ct create -alias
172c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
172d0 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69  System.Diagnosti
172e0 63 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f  cs.PerformanceCo
172f0 75 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d  unter Process \.
17300 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72  .            "Pr
17310 69 76 61 74 65 20 42 79 74 65 73 22 20 5b 66 69  ivate Bytes" [fi
17320 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c  le rootname [fil
17330 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69  e tail $::bin_fi 17340 6c 65 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a le]]].. }.. 17350 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 .. return " 17360 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ".. }..... 17370 20 70 72 6f 63 20 72 65 70 6f 72 74 4d 65 6d 6f proc reportMemo 17380 72 79 43 6f 75 6e 74 65 72 73 20 7b 20 63 68 61 ryCounters { cha 17390 6e 6e 65 6c 20 76 61 72 4e 61 6d 65 20 70 72 65 nnel varName pre 173a0 66 69 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 fix } {.. i 173b0 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 f {[haveSQLiteOb 173c0 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 jectCommand]} th 173d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 en {.. up 173e0 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 var 1$varName c
173f0 6f 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20  ounter....
17400 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 17410 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 17420 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 17430 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f - "$prefix " co
17440 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20  unter \"" \..
17450 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74           [object
17460 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72   invoke $counter 17470 28 31 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d (1) CounterName] 17480 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 "\" value is " 17490 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 174a0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 object invoke$c
174b0 6f 75 6e 74 65 72 28 31 29 20 52 61 77 56 61 6c  ounter(1) RawVal
174c0 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ue] \n]....
174d0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 174e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 174f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 17500 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 -- "$prefix " c
17510 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20  ounter \"" \..
17520 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63            [objec
17530 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65  t invoke $counte 17540 72 28 32 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 r(2) CounterName 17550 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 ] "\" value is " 17560 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17570 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 [object invoke$
17580 63 6f 75 6e 74 65 72 28 32 29 20 52 61 77 56 61  counter(2) RawVa
17590 6c 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  lue] \n]....
175a0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 175b0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 175c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 175d0 2d 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 --- "$prefix "
175e0 63 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20  counter \"" \..
175f0 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65             [obje
17600 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74  ct invoke $count 17610 65 72 28 33 29 20 43 6f 75 6e 74 65 72 4e 61 6d er(3) CounterNam 17620 65 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 e] "\" value is 17630 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 17640 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 17650 24 63 6f 75 6e 74 65 72 28 33 29 20 52 61 77 56$counter(3) RawV
17660 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  alue] \n]..
17670 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
17680 20 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61    proc collectGa
17690 72 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20  rbage { channel
176a0 7b 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30  {milliseconds 10
176b0 30 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d  00} {quiet true}
176c0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b   } {..      if {
176d0 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
176e0 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
176f0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
17700 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
17710 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
17720 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f   GC GetTotalMemo
17730 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ry false..
17740 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30    } result] == 0
17750 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
17760 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 17770 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 17780 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
17790 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
177a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
177b0 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20     "---- memory
177c0 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c  in use by the CL
177d0 52 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74  R before collect
177e0 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20  ion... " \..
177f0 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73              $res 17800 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d ult " bytes\n"]. 17810 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 17820 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 17830 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 17840 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
17850 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
17860 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
17870 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67  ING: failed to g
17880 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73  et CLR memory us
17890 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d  age, error: " \.
178a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c  .              \
178b0 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 178c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 178d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 }.... ### 178e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 178f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 17900 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 17910 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 17920 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 ######.... 17930 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 17940 20 52 65 70 65 61 74 65 64 6c 79 20 61 74 74 65 Repeatedly atte 17950 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 mpt to collect g 17960 61 72 62 61 67 65 20 75 6e 74 69 6c 20 74 68 65 arbage until the 17970 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62 65 72 allotted number 17980 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 17990 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 of milliseconds 179a0 68 61 73 20 65 6c 61 70 73 65 64 2e 20 20 41 6c has elapsed. Al 179b0 77 61 79 73 20 61 74 74 65 6d 70 74 20 74 6f 20 ways attempt to 179c0 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 0d collect garbage. 179d0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 179e0 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d 0a 20 t least once... 179f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 17a00 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 17a10 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 17a20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 n {.. set 17a30 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20 73 65 start [clock se 17a40 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20 20 conds].. 17a50 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72 20 7b set stop [expr { 17a60 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c 6c 69$start + ($milli 17a70 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 29 7d seconds / 1000)} 17a80 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64 6f 20 ].... do 17a90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 17aa0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 17ab0 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 : Attempt to for 17ac0 63 65 20 61 20 66 75 6c 6c 20 67 61 72 62 61 67 ce a full garbag 17ad0 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 e collection now 17ae0 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a 20 . Report any.. 17af0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 17b00 20 65 72 72 6f 72 20 74 68 61 74 20 69 73 20 65 error that is e 17b10 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 20 77 65 ncountered if we 17b20 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20 fail... 17b30 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 17b40 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 17b50 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 17b60 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 invoke GC GetTot 17b70 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 0d 0a 20 alMemory true.. 17b80 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 } error 17b90 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 17ba0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
17bb0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
17bc0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
17bd0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
17be0 4e 47 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20  NG: failed full
17bf0 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69  garbage collecti
17c00 6f 6e 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a  on, error: " \..
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17c20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 17c30 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 17c40 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f set no 17c50 77 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 w [clock seconds 17c60 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69 ].. } whi 17c70 6c 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e le {$start <= $n 17c80 6f 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74 ow &&$now < $st 17c90 6f 70 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a op}.. }.... 17ca0 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 ########## 17cb0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 17cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 17cd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 17ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d ###############. 17cf0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 ... if {[ha 17d00 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo 17d10 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a mmand]} then {.. 17d20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 17d30 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 17d40 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 object invoke GC 17d50 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 GetTotalMemory 17d60 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d false.. } 17d70 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 result] == 0} t 17d80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 17d90 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
17da0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
17db0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 17dc0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 17dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 17de0 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 "---- memory in 17df0 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 61 use by the CLR a 17e00 66 74 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e fter collection. 17e10 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 .. " \.. 17e20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20$result
17e30 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20  " bytes\n"]..
17e40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
17e50 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
17e60 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 17e70 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 17e80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17e90 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 17ea0 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 failed to get C 17eb0 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c LR memory usage, 17ec0 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 error: " \.. 17ed0 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 17ee0 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
17ef0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
17f00 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
17f10 72 6f 63 20 67 65 74 53 51 4c 69 74 65 48 61 6e  roc getSQLiteHan
17f20 64 6c 65 43 6f 75 6e 74 73 20 7b 20 63 68 61 6e  dleCounts { chan
17f30 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65  nel {quiet false
17f40 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  } } {..      set
17f50 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a   result [list]..
17f60 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76  ..      if {[hav
17f70 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  eSQLiteObjectCom
17f80 6d 61 6e 64 5d 20 26 26 20 5b 68 61 76 65 43 6f  mand] && [haveCo
17f90 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20  nstraint \..
17fa0 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65            define
17fb0 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
17fc0 44 61 74 61 2e 53 51 4c 69 74 65 2e 43 4f 55 4e  Data.SQLite.COUN
17fd0 54 5f 48 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20  T_HANDLE]} then
17fe0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
17ff0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64        # NOTE: Ad
18000 64 20 65 61 63 68 20 63 72 69 74 69 63 61 6c 20  d each critical
18010 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20  handle count to
18020 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 6c 69  the resulting li
18030 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  st...        #..
18040 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
18050 6e 61 6d 65 20 5b 6c 69 73 74 20 63 6f 6e 6e 65  name [list conne
18060 63 74 69 6f 6e 43 6f 75 6e 74 20 73 74 61 74 65  ctionCount state
18070 6d 65 6e 74 43 6f 75 6e 74 20 62 61 63 6b 75 70  mentCount backup
18080 43 6f 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 20  Count] {..
18090 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
180a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
180b0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
180c0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
180d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
180e0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
180f0 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65  ite.UnsafeNative
18100 4d 65 74 68 6f 64 73 20 24 6e 61 6d 65 0d 0a 20  Methods $name.. 18110 20 20 20 20 20 20 20 20 20 7d 20 76 61 6c 75 65 } value 18120 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 18130 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 18140 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
18150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
18160 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 18170 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 18190 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61 ---- critical ha 181a0 6e 64 6c 65 20 63 6f 75 6e 74 20 5c 22 22 20 24 ndle count \""$
181b0 6e 61 6d 65 20 22 5c 22 20 69 73 20 22 20 24 76  name "\" is " $v 181c0 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 alue \n].. 181d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 181e0 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 lappend r 181f0 65 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 esult$value..
18200 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
18210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
18220 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 18230 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 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 63 72 69 74 69 63 61 d to get critica 18270 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c l handle count \ 18280 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 18290 20 20 20 20 20 20 24 6e 61 6d 65 20 22 5c 22 2c$name "\",
182a0 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $182b0 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 value \n].. 182c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 182d0 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 }.. } elsei 182e0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
182f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
18300 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
18310 68 65 20 61 63 74 75 61 6c 20 68 61 6e 64 6c 65  he actual handle
18320 20 63 6f 75 6e 74 73 20 61 72 65 20 6e 6f 74 20   counts are not
18330 61 76 61 69 6c 61 62 6c 65 3b 20 74 68 65 72 65  available; there
18340 66 6f 72 65 2c 20 6a 75 73 74 0d 0a 20 20 20 20  fore, just..
18350 20 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75      #       retu
18360 72 6e 20 61 6e 20 65 6d 70 74 79 20 6c 69 73 74  rn an empty list
18370 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
18380 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 18390 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 69 74 69 nnel "---- criti 183a0 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 cal handle count 183b0 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 5c 6e 22 s unavailable\n" 183c0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 183d0 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c return$resul
183e0 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  t..    }.....
183f0 20 70 72 6f 63 20 73 68 75 74 64 6f 77 6e 53 51   proc shutdownSQ
18400 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  Lite { channel {
18410 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7b 71 75  force false} {qu
18420 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  iet false} } {..
18430 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
18440 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65   NOTE: Make sure
18450 20 74 68 61 74 20 53 51 4c 69 74 65 20 63 6f 72   that SQLite cor
18460 65 20 6c 69 62 72 61 72 79 20 69 73 20 63 6f 6d  e library is com
18470 70 6c 65 74 65 6c 79 20 73 68 75 74 64 6f 77 6e  pletely shutdown
18480 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 20 20 23  .  This..      #
18490 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20 62         is used b
184a0 79 20 74 65 73 74 73 20 74 68 61 74 20 63 68 61  y tests that cha
184b0 6e 67 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  nge configuratio
184c0 6e 20 6f 70 74 69 6f 6e 73 20 61 6e 64 2f 6f 72  n options and/or
184d0 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 23 20   those..      #
184e0 20 20 20 20 20 20 74 68 61 74 20 6e 65 65 64 20        that need
184f0 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 6c 6f 67  to make sure log
18500 67 69 6e 67 20 69 73 20 69 6e 69 74 69 61 6c 69  ging is initiali
18510 7a 65 64 20 28 69 2e 65 2e 20 6a 75 73 74 20 69  zed (i.e. just i
18520 6e 20 63 61 73 65 0d 0a 20 20 20 20 20 20 23 20  n case..      #
18530 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65        the SQLite
18540 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61   core library wa
18550 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e  s initialized in
18560 20 74 68 65 20 70 72 6f 63 65 73 73 20 70 72 69   the process pri
18570 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20  or to..      #
18580 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 4c       the SQLiteL
18590 6f 67 20 63 6c 61 73 73 20 62 65 69 6e 67 20 61  og class being a
185a0 62 6c 65 20 74 6f 20 73 65 74 75 70 20 69 74 73  ble to setup its
185b0 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63   logging callbac
185c0 6b 29 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  k)...      #
185d0 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69     Normally, thi
185e0 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62 65  s should only be
185f0 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51   performed if SQ
18600 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61  Lite is loaded a
18610 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  nd..      #
18620 20 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20    ready for use
18630 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74  by the test suit
18640 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
18650 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c     if {$force || 18660 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d [isSQLiteReady] 18670 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 18680 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 #.. # B 18690 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 75 72 65 UGFIX: Make sure 186a0 20 74 68 61 74 20 61 6e 79 20 22 6c 65 61 6b 65 that any "leake 186b0 64 22 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 d" transactions 186c0 61 6e 64 2f 6f 72 20 63 6f 6e 6e 65 63 74 69 6f and/or connectio 186d0 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ns.. # 186e0 20 20 20 20 20 20 61 72 65 20 63 6c 65 61 6e 65 are cleane 186f0 64 20 75 70 20 62 65 66 6f 72 65 20 63 61 6c 6c d up before call 18700 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 73 ing the native s 18710 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e hutdown function 18720 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 18730 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 74 72 foreach tr 18740 61 6e 73 61 63 74 69 6f 6e 20 5b 69 6e 66 6f 20 ansaction [info 18750 74 72 61 6e 73 61 63 74 69 6f 6e 73 5d 20 7b 0d transactions] {. 18760 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 18770 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a string match \.. 18780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 18790 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69 74 65 stem#Data#SQLite 187a0 23 53 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69 #SQLiteTransacti 187b0 6f 6e 23 2a 20 24 74 72 61 6e 73 61 63 74 69 6f on#*$transactio
187c0 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  n]} then {..
187d0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
187e0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
187f0 20 20 20 20 73 71 6c 20 74 72 61 6e 73 61 63 74      sql transact
18800 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 24 74 72  ion rollback $tr 18810 61 6e 73 61 63 74 69 6f 6e 0d 0a 20 20 20 20 20 ansaction.. 18820 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 } error] 18830 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 18840 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 18850 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
18860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
18870 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 18880 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 18890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 188a0 20 20 20 22 2d 2d 2d 2d 20 72 6f 6c 6c 65 64 20 "---- rolled 188b0 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 61 6e back leaked tran 188c0 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 saction \"" \.. 188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 188e0 20 20 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 20$transaction
188f0 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  \"\n]..
18900 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
18910 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
18920 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
18930 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 18940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 18950 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
18960 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18980 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
18990 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 6f 6c 6c  : failed to roll
189a0 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 61 6e  back leaked tran
189b0 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20  saction \"" \..
189c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
189d0 20 20 20 24 74 72 61 6e 73 61 63 74 69 6f 6e 20     $transaction 189e0 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "\", error: " \n 189f0 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
18a10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
18a20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
18a30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
18a40 20 66 6f 72 65 61 63 68 20 64 62 20 5b 69 6e 66   foreach db [inf
18a50 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b  o connections] {
18a60 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
18a70 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d  [string match \.
18a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
18a90 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69 74  ystem#Data#SQLit
18aa0 65 23 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e#SQLiteConnecti
18ab0 6f 6e 23 2a 20 24 64 62 5d 7d 20 74 68 65 6e 20  on#* $db]} then 18ac0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 18ad0 66 20 7b 5b 63 61 74 63 68 20 7b 73 71 6c 20 63 f {[catch {sql c 18ae0 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 5d lose$db} error]
18af0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
18b10 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 18b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18b30 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
18b40 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
18b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
18b60 20 20 20 20 22 2d 2d 2d 2d 20 63 6c 6f 73 65 64      "---- closed
18b70 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61 73 65   leaked database
18b80 20 5c 22 22 20 24 64 62 20 5c 22 5c 6e 5d 0d 0a   \"" $db \"\n].. 18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 18ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e 18bb0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 18bc0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
18bd0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
18be0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
18bf0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 18c00 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 18c10 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 18c20 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 18c30 64 20 74 6f 20 63 6c 6f 73 65 20 6c 65 61 6b 65 d to close leake 18c40 64 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c d database \"" \ 18c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18c60 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65$db "\", e
18c70 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 18c80 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 18c90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 18ca0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 18cb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 18cc0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 18cd0 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 # BUGFIX: 18ce0 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 Before calling t 18cf0 68 65 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f he native shutdo 18d00 77 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b wn function, mak 18d10 65 20 73 75 72 65 20 62 6f 74 68 0d 0a 20 20 20 e sure both.. 18d20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 6f # o 18d30 66 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c f the PRAGMA rel 18d40 61 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e ated directory n 18d50 61 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d ames are freed.. 18d60 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 18d70 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 checkForSQLi 18d80 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 63 teDirectories$c
18d90 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20  hannel true....
18da0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
18db0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
18dc0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
18dd0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
18de0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18df0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
18e00 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
18e10 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 73  ethods sqlite3_s
18e20 68 75 74 64 6f 77 6e 0d 0a 20 20 20 20 20 20 20  hutdown..
18e30 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d   } result] == 0}
18e40 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18e50 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 18e60 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 18e70 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
18e80 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
18e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18ea0 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c    "---- call sql
18eb0 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e  ite3_shutdown().
18ec0 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74  .. ok: " $result 18ed0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 18ee0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 18ef0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 e {.. i 18f00 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
18f10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
18f20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 18f30 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 18f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 18f50 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 --- call sqlite3 18f60 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 65 _shutdown()... e 18f70 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 rror: " \n\t$re
18f80 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
18f90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
18fa0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
18fb0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65  .....    proc re
18fc0 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72  portSQLiteResour
18fd0 63 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ces {..
18fe0 20 20 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65     channel {quie
18ff0 74 20 66 61 6c 73 65 7d 20 7b 72 65 73 65 74 20  t false} {reset
19000 74 72 75 65 7d 20 7b 63 6f 6c 6c 65 63 74 20 74  true} {collect t
19010 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
19020 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
19030 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 72   If available, r
19040 65 70 6f 72 74 20 6f 6e 20 28 61 6e 64 20 70 6f  eport on (and po
19050 73 73 69 62 6c 79 20 72 65 73 65 74 29 20 74 68  ssibly reset) th
19060 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 20 20  e runtime..
19070 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75   #       configu
19080 72 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63  ration statistic
19090 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
190a0 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69     if {[haveSQLi
190b0 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
190c0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
190d0 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74   [haveConstraint
190e0 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74   buildConfigurat
190f0 69 6f 6e 2e 44 65 62 75 67 5d 20 26 26 20 5b 63  ion.Debug] && [c
19100 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
19110 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
19120 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
19130 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20  -alias \..
19140 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
19150 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
19160 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 65 74  ativeMethods set
19170 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 0d 0a  tingReadCounts..
19180 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52        } settingR
19190 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d  eadCounts] == 0}
191a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
191b0 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b   set nameCount [
191c0 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e  $settingReadCoun 191d0 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 ts Count].. 191e0 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f 75 6e set valueCoun 191f0 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f t 0.... o 19200 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 bject foreach -a 19210 6c 69 61 73 20 70 61 69 72 20 24 73 65 74 74 69 lias pair$setti
19220 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a  ngReadCounts {..
19230 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76            incr v
19240 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72  alueCount [$pair 19250 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 Value].... 19260 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
19270 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
19280 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 19290 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 192a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 192b0 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e "---- settin 192c0 67 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 g \"" [$pair Key
192d0 5d 20 22 5c 22 20 77 61 73 20 72 65 61 64 20 22  ] "\" was read "
192e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
192f0 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65      [$pair Value 19300 5d 20 22 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20 ] " times\n"].. 19310 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 19320 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 19330 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 if {$reset} the
19340 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
19350 66 20 7b 5b 63 61 74 63 68 20 7b 24 73 65 74 74  f {[catch {$sett 19360 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6c ingReadCounts Cl 19370 65 61 72 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 ear} error] == 0 19380 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 19390 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
193a0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
193b0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $193c0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 193d0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 193e0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 "---- r 193f0 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 eset setting sta 19400 74 69 73 74 69 63 73 20 66 6f 72 20 74 68 65 20 tistics for the 19410 70 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 previous " \.. 19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19430 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d$nameCount " nam
19440 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43  es and " $valueC 19450 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 20 72 65 ount " values re 19460 61 64 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 ad\n"].. 19470 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 19480 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 19490 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
194a0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
194b0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
194c0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
194d0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65  NG: failed to re
194e0 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74  set setting stat
194f0 69 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a  istics for " \..
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19510 22 74 68 65 20 70 72 65 76 69 6f 75 73 20 22 20  "the previous "
19520 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d  $nameCount " nam 19530 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 es and "$valueC
19540 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  ount \..
19550 20 20 20 20 20 20 20 20 22 20 76 61 6c 75 65 73          " values
19560 20 72 65 61 64 2c 20 65 72 72 6f 72 3a 20 22 20   read, error: "
19570 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 19580 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 19590 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 195a0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 .... if {[h 195b0 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 aveSQLiteObjectC 195c0 6f 6d 6d 61 6e 64 5d 20 26 26 20 5b 68 61 76 65 ommand] && [have 195d0 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 Constraint \.. 195e0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 defi 195f0 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 neConstant.Syste 19600 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e m.Data.SQLite.IN 19610 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 TEROP_VIRTUAL_TA 19620 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 BLE] && \.. 19630 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 [haveConstr 19640 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 aint \.. 19650 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 defineCons 19660 74 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 tant.System.Data 19670 2e 53 51 4c 69 74 65 2e 54 52 41 43 4b 5f 4d 45 .SQLite.TRACK_ME 19680 4d 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 68 65 MORY_BYTES]} the 19690 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 196a0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
196b0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
196c0 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- 196d0 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 current memory 196e0 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 in use by SQLite 196f0 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 Memory... ".. 19700 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 19710 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 19720 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 19730 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 19740 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 19750 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 19760 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ 19770 4c 69 74 65 4d 65 6d 6f 72 79 20 62 79 74 65 73 LiteMemory bytes 19780 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 Allocated.. 19790 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 } memory] == 197a0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 197b0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
197c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
197d0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 197e0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 197f0 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73$memory " bytes
19800 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
19810 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
19820 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e {..          s
19830 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77  et memory unknow
19840 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n....          i
19850 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 19860 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 19870 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
19880 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 19890 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ry \n].. 198a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 198b0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 .. if {!$
198c0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
198d0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $198e0 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 channel "---- ma 198f0 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 ximum memory in 19900 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d use by SQLiteMem 19910 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 ory... ".. 19920 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 }.... i 19930 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 19940 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 19950 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 19960 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 19970 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 19980 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit 19990 65 4d 65 6d 6f 72 79 20 6d 61 78 69 6d 75 6d 42 eMemory maximumB 199a0 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 ytesAllocated.. 199b0 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d } memory] 199c0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 199d0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
199e0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
199f0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
19a00 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 19a10 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 Args$memory " b
19a20 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  ytes\n"]..
19a30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
19a40 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
19a50 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e     set memory un
19a60 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  known....
19a70 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 19a80 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 19a90 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
19aa0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $19ab0 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 memory \n].. 19ac0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 19ad0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 19ae0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
19af0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
19b00 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 19b10 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d "---- current m 19b20 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 19b30 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 SQLite... ".. 19b40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 19b50 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 19b60 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 19b70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 19b80 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 19b90 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 19ba0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 19bb0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 19bc0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 19bd0 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 19be0 61 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c ativeMethods sql 19bf0 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 ite3_memory_used 19c00 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f .. } memo 19c10 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ry] == 0} then { 19c20 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 19c30 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
19c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
19c50 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 19c60 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
19c70 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20  " bytes\n"]..
19c80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
19c90 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
19ca0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
19cb0 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65     # NOTE: Maybe
19cc0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
19cd0 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76   library is unav
19ce0 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20  ailable?..
19cf0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
19d00 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e   set memory unkn
19d10 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  own....
19d20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 19d30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19d40 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
19d50 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 19d60 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 19d70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 19d80 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 19d90 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 .. set me 19da0 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 mory unavailable 19db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 19dc0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
19dd0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
19de0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 19df0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e dArgs$memory \n
19e00 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
19e10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73      }....      s
19e20 65 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72  et result $memor 19e30 79 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 y; # NOTE: Retur 19e40 6e 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 n memory in-use 19e50 74 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a to our caller... 19e60 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
19e70 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
19e80 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 19e90 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 nel "---- maximu 19ea0 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 m memory in use 19eb0 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a by SQLite... ".. 19ec0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 19ed0 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 if {[haveSQLite 19ee0 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 ObjectCommand]} 19ef0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 19f00 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 19f10 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 19f20 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 19f30 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 19f40 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 19f50 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 Data.SQLite.Unsa 19f60 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 feNativeMethods 19f70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 19f80 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f sqlite3_memory_ 19f90 68 69 67 68 77 61 74 65 72 20 30 0d 0a 20 20 20 highwater 0.. 19fa0 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d } memory] = 19fb0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 19fc0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
19fd0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
19fe0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 19ff0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1a000 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 gs$memory " byt
1a010 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
1a020 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
1a030 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1a040 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
1a050 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20  NOTE: Maybe the
1a060 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
1a070 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62  ary is unavailab
1a080 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 23  le?..          #
1a090 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
1a0a0 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a  memory unknown..
1a0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1a0c0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1a0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1a0e0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1a0f0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 1a100 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 1a110 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 1a120 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1a130 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 set memory 1a140 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 unavailable.... 1a150 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
1a160 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
1a170 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1a180 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1a190 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20$memory \n]..
1a1a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
1a1b0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63  ....      if {$c 1a1c0 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a ollect} then {.. 1a1d0 20 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 collectG 1a1e0 61 72 62 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d arbage$channel.
1a1f0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
1a200 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1a210 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t 1a220 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
1a230 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f  --- current memo
1a240 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65  ry in use by the
1a250 20 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20   CLR... "..
1a260 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
1a270 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
1a280 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
1a290 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  {..        if {[
1a2a0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1a2b0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
1a2c0 20 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f   GC GetTotalMemo
1a2d0 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ry false..
1a2e0 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30    } memory] == 0
1a2f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1a300 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
1a310 69 73 20 69 6e 74 65 67 65 72 20 2d 73 74 72 69  is integer -stri
1a320 63 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74 68 65  ct $memory]} the 1a330 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1a340 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1a350 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1a360 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1a370 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
1a380 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e  memory " bytes\n
1a390 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
1a3a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  }..          } e
1a3b0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1a3c0 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 69 6e     set memory in
1a3d0 76 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 20 20  valid....
1a3e0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 1a3f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a400 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1a410 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1a420 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a  gs $memory \n].. 1a430 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1a440 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1a450 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1a460 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f set memo 1a470 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 ry unknown.... 1a480 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1a490 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1a4a0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1a4b0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1a4c0 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d rgs$memory \n].
1a4d0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1a4e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
1a4f0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1a500 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76   set memory unav
1a510 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20  ailable....
1a520 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1a530 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1a540 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1a550 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 1a560 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 1a570 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 1a580 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
1a590 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
1a5a0 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f      proc checkFo
1a5b0 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69  rSQLiteDirectori
1a5c0 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 65  es { channel {re
1a5d0 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  set false} } {..
1a5e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
1a5f0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
1a600 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33  the sqlite3_win3
1a610 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20  2_set_directory
1a620 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69  function is avai
1a630 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d  lable...      #.
1a640 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch 1a650 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 1a660 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e "---- checkin 1a670 67 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 73 g for function s 1a680 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 1a690 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 22 0d _directory... ". 1a6a0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1a6b0 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 # NOTE: This c 1a6c0 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c 69 74 all to the sqlit 1a6d0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 1a6e0 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 ectory function 1a6f0 75 73 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 uses the.. 1a700 23 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 20 # invalid 1a710 76 61 6c 75 65 20 30 20 66 6f 72 20 74 68 65 20 value 0 for the 1a720 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 20 first argument. 1a730 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 64 65 This code is de 1a740 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 signed.. # 1a750 20 20 20 20 20 20 74 6f 20 63 68 65 63 6b 20 69 to check i 1a760 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 f calling the fu 1a770 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 69 73 nction will rais 1a780 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 28 e an exception ( 1a790 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 i.e... # 1a7a0 20 20 20 20 74 68 65 20 61 63 74 75 61 6c 20 72 the actual r 1a7b0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e esult of the fun 1a7c0 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 6d ction does not m 1a7d0 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 61 73 atter as long as 1a7e0 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 no.. # 1a7f0 20 20 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 directory is 1a800 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 20 20 changed)... 1a810 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 #.. if {[c 1a820 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1a830 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 1a840 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 1a850 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 \.. S 1a860 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 1a870 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 e.UnsafeNativeMe 1a880 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 thods \.. 1a890 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e sqlite3_win 1a8a0 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 1a8b0 20 30 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 0 null.. } 1a8c0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1a8d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1a8e0 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c 6c 69 # NOTE: Calli 1a8f0 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 ng the sqlite3_w 1a900 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f in32_set_directo 1a910 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 ry function does 1a920 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 not.. # 1a930 20 20 20 20 20 20 63 61 75 73 65 20 61 6e 20 65 cause an e 1a940 78 63 65 70 74 69 6f 6e 3b 20 74 68 65 72 65 66 xception; theref 1a950 6f 72 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20 ore, it must be 1a960 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65 2e 0d available (i.e.. 1a970 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1a980 20 65 76 65 6e 20 74 68 6f 75 67 68 20 69 74 20 even though it 1a990 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 61 20 should return a 1a9a0 66 61 69 6c 75 72 65 20 72 65 74 75 72 6e 20 63 failure return c 1a9b0 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 ode in this.. 1a9c0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 73 # cas 1a9d0 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e)... #.. 1a9e0 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 1a9f0 72 61 69 6e 74 20 73 71 6c 69 74 65 33 5f 77 69 raint sqlite3_wi 1aa00 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 1aa10 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 y.... tpu 1aa20 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c ts$channel yes\
1aa30 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n....        #..
1aa40 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1aa50 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20  Does our caller
1aa60 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68  want to reset th
1aa70 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 0d 0a  e directories?..
1aa80 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1aa90 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d 20 74     if {$reset} t 1aaa0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1aab0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 1aac0 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 NOTE: Now make s 1aad0 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 ure the database 1aae0 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 and temporary d 1aaf0 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a irectories are.. 1ab00 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1ab10 20 20 72 65 73 65 74 20 74 68 65 69 72 20 64 65 reset their de 1ab20 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 fault values, wh 1ab30 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 ich should be nu 1ab40 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 ll for both... 1ab50 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1ab60 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 Since the sqlite 1ab70 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 1ab80 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 ctory function i 1ab90 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d 0a 20 20 s available,.. 1aba0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1abb0 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 use it... 1abc0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1abd0 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 for {set index 1 1abe0 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20 7b } {$index < 3} {
1abf0 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20  incr index} {..
1ac00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
1ac10 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
1ac20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
1ac30 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
1ac40 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
1ac60 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
1ac70 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
1ac80 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
1ac90 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
1aca0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
1acb0 6f 72 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 0d  ory $index null. 1acc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 72 . } r 1acd0 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the 1ace0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1acf0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1ad00 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1ad10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1ad20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71     "---- call sq
1ad30 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
1ad40 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64  directory(" $ind 1ad50 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ex \.. 1ad60 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 ", null) 1ad70 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c ... ok: "$resul
1ad80 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  t \n]..
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 20 20 74 70 75 74 73             tputs
1adb0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 1adc0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1add0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1ade0 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 call sqlite3_wi 1adf0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 1ae00 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 y("$index \..
1ae10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ae20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f  ", null)... erro
1ae30 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c  r: " \n\t $resul 1ae40 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 1ae50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1ae60 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 1ae70 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1ae80 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1ae90 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20  nnel no\n....
1aea0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1aeb0 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72  # NOTE: Does our
1aec0 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20   caller want to
1aed0 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63 74  reset the direct
1aee0 6f 72 69 65 73 3f 20 20 54 68 69 73 20 63 61 6e  ories?  This can
1aef0 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 23   only..        #
1af00 20 20 20 20 20 20 20 62 65 20 70 65 72 66 6f 72         be perfor
1af10 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73  med if SQLite is
1af20 20 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 61 64   loaded and read
1af30 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  y for use by the
1af40 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23   test..        #
1af50 20 20 20 20 20 20 20 73 75 69 74 65 2e 0d 0a 20         suite...
1af60 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1af70 20 20 69 66 20 7b 24 72 65 73 65 74 20 26 26 20    if {$reset && 1af80 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d 7d [isSQLiteReady]} 1af90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1afa0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1afb0 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 # NOTE: Now make 1afc0 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 sure the databa 1afd0 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 se and temporary 1afe0 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 directories are 1aff0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 1b000 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72 20 reset their 1b010 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 default values, 1b020 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 which should be 1b030 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a null for both... 1b040 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1b050 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69 Since the sqli 1b060 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di 1b070 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e rectory function 1b080 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 does not.. 1b090 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 70 # app 1b0a0 65 61 72 20 74 6f 20 62 65 20 61 76 61 69 6c 61 ear to be availa 1b0b0 62 6c 65 2c 20 75 73 65 20 74 68 65 20 61 73 73 ble, use the ass 1b0c0 6f 63 69 61 74 65 64 20 50 52 41 47 4d 41 20 63 ociated PRAGMA c 1b0d0 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20 20 20 ommands.. 1b0e0 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 74 65 # inste 1b0f0 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ad... # 1b100 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 .. fore 1b110 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c ach directory [l 1b120 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 ist data_store_d 1b130 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 irectory temp_st 1b140 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b ore_directory] { 1b150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 1b160 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 t sql [appendArg 1b170 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 72 s "PRAGMA "$dir
1b180 65 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c 22 3b  ectory " = \"\";
1b190 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  "]....
1b1a0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78    if {[catch {ex
1b1b0 65 63 75 74 65 53 71 6c 20 24 73 71 6c 7d 20 72  ecuteSql $sql} r 1b1c0 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the 1b1d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1b1e0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
1b1f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1b200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1b210 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65     "---- execute
1b220 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63   PRAGMA " $direc 1b230 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 tory "... ok: \" 1b240 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1b250 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 5c$result \
1b260 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
1b270 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1b280 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1b290 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 1b2a0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1b2b0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1b2c0 65 78 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 execute PRAGMA " 1b2d0 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e$directory "...
1b2e0 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20   error: " \..
1b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1b300 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 1b310 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 1b320 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1b330 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 1b340 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1b350 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c # NOTE: Finall 1b360 79 2c 20 73 68 6f 77 20 74 68 65 20 63 75 72 72 y, show the curr 1b370 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 ent value of the 1b380 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 database and te 1b390 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 mporary.. # 1b3a0 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 69 directori 1b3b0 65 73 2e 20 20 54 68 69 73 20 63 61 6e 20 6f 6e es. This can on 1b3c0 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 ly be performed 1b3d0 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 if SQLite is loa 1b3e0 64 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ded.. # 1b3f0 20 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 and ready for 1b400 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 use by the test 1b410 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 suite... # 1b420 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 53 .. if {[isS 1b430 51 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 QLiteReady]} the 1b440 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 n {.. for 1b450 65 61 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b each directory [ 1b460 6c 69 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f list data_store_ 1b470 64 69 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 directory temp_s 1b480 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 tore_directory] 1b490 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 1b4a0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
1b4b0 65 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68  endArgs "---- ch
1b4c0 65 63 6b 69 6e 67 20 22 20 24 64 69 72 65 63 74  ecking " $direct 1b4d0 6f 72 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 ory "... "].... 1b4e0 20 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c set sql 1b4f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 [appendArgs "PR 1b500 41 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 AGMA "$director
1b510 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  y \;]....
1b520 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65     if {[catch {e
1b530 78 65 63 75 74 65 53 71 6c 20 24 73 71 6c 20 73  xecuteSql $sql s 1b540 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d calar} result] = 1b550 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 1b560 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1b570 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1b580 72 67 73 20 22 6f 6b 3a 20 5c 22 22 20 24 72 65  rgs "ok: \"" $re 1b590 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 sult \"\n].. 1b5a0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1b5b0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1b5c0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1b5d0 6e 64 41 72 67 73 20 22 65 72 72 6f 72 3a 20 22  ndArgs "error: "
1b5e0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 1b5f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 1b600 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1b610 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 1b620 20 20 70 72 6f 63 20 6c 6f 61 64 53 51 4c 69 74 proc loadSQLit 1b630 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 7b 20 eTestSettings { 1b640 63 68 61 6e 6e 65 6c 20 7b 73 75 66 66 69 78 20 channel {suffix 1b650 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 ""} {quiet false 1b660 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 1b670 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 1b680 69 70 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 73 ip loading the s 1b690 65 74 74 69 6e 67 73 20 69 66 20 74 68 65 69 72 ettings if their 1b6a0 20 75 73 61 67 65 20 68 61 73 20 62 65 65 6e 20 usage has been 1b6b0 64 69 73 61 62 6c 65 64 2e 0d 0a 20 20 20 20 20 disabled... 1b6c0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b #.. if {![ 1b6d0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 1b6e0 28 73 71 6c 69 74 65 54 65 73 74 53 65 74 74 69 (sqliteTestSetti 1b6f0 6e 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ngs)]} then {.. 1b700 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1b710 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 # NOTE: Load c 1b720 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 ustom per-user a 1b730 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 nd/or per-host t 1b740 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 est settings now 1b750 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1b760 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 1b770 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 exists ::tcl_pla 1b780 74 66 6f 72 6d 28 75 73 65 72 29 5d 7d 20 74 68 tform(user)]} th 1b790 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1b7a0 73 65 74 20 75 73 65 72 53 65 74 74 69 6e 67 73 set userSettings 1b7b0 46 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a FileName [file j 1b7c0 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 oin [getCommonDi 1b7d0 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 rectory] \.. 1b7e0 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e [appen 1b7f0 64 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 dArgs settings$
1b800 73 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f  suffix . $::tcl_ 1b810 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 20 2e platform(user) . 1b820 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 eagle]].... 1b830 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 if {[file e 1b840 78 69 73 74 73 20 24 75 73 65 72 53 65 74 74 69 xists$userSetti
1b850 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  ngsFileName]} th
1b860 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1b870 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1b880 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1b890 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1b8a0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1b8b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1b8c0 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69       "---- loadi
1b8d0 6e 67 20 70 65 72 2d 75 73 65 72 20 74 65 73 74  ng per-user test
1b8e0 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c   settings file \
1b8f0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
1b900 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74          $userSet 1b910 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 tingsFileName \" 1b920 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ...\n].. 1b930 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1b940 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1b950 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1b960 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 1b970 20 73 6f 75 72 63 65 20 24 75 73 65 72 53 65 74 source$userSet
1b980 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a  tingsFileName]..
1b990 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72              } er
1b9a0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ror]} then {..
1b9b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1b9c0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 1b9d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1b9e0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1b9f0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ba10 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
1ba20 3a 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64  : failed to load
1ba30 20 70 65 72 2d 75 73 65 72 20 73 65 74 74 69 6e   per-user settin
1ba40 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20  gs file \"" \..
1ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ba60 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67 73     $userSettings 1ba70 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 FileName "\", er 1ba80 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
1ba90 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
1baa0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1bab0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1bac0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1bad0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1bae0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1baf0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1bb00 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1bb10 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1bb20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1bb30 20 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67   skipped loading
1bb40 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73   per-user test s
1bb50 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
1bb60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1bb70 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69        $userSetti 1bb80 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c ngsFileName "\", 1bb90 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 it does not exi 1bba0 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 st\n"].. 1bbb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1bbc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1bbd0 0a 20 20 20 20 20 20 20 20 23 23 23 23 23 23 23 . ####### 1bbe0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1bbf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1bc00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1bc10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1bc20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 1bc30 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 1bc40 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 cl_platform(host 1bc50 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 1bc60 20 20 20 20 20 20 73 65 74 20 68 6f 73 74 53 65 set hostSe 1bc70 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b ttingsFileName [ 1bc80 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f file join [getCo 1bc90 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c mmonDirectory] \ 1bca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1bcb0 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 [appendArgs sett 1bcc0 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 ings$suffix . $1bcd0 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 ::tcl_platform(h 1bce0 6f 73 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d ost) .eagle]]... 1bcf0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 1bd00 66 69 6c 65 20 65 78 69 73 74 73 20 24 68 6f 73 file exists$hos
1bd10 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  tSettingsFileNam
1bd20 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
1bd30 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1bd40 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1bd50 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1bd60 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1bd70 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1bd80 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1bd90 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73   loading per-hos
1bda0 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20  t test settings
1bdb0 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20  file \"" \..
1bdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68                $h 1bdd0 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e ostSettingsFileN 1bde0 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 ame \"...\n].. 1bdf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 1be00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 1be10 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1be20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 uplevel 1 1be30 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 68 [list source$h
1be40 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  ostSettingsFileN
1be50 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ame]..
1be60 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e    } error]} then
1be70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1be80 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1be90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1bea0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1beb0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1bec0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1bed0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
1bee0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
1bef0 6f 20 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74 20  o load per-host
1bf00 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
1bf10 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1bf20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53 65           $hostSe 1bf30 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 ttingsFileName " 1bf40 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c \", error: " \n\ 1bf50 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
1bf60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1bf70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1bf80 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
1bf90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1bfa0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 1bfb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1bfc0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1bfd0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bff0 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c   "---- skipped l
1c000 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20  oading per-host
1c010 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69  test settings fi
1c020 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  le \"" \..
1c030 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73              $hos 1c040 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d tSettingsFileNam 1c050 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e e "\", it does n 1c060 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 ot exist\n"].. 1c070 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1c080 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1c090 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 1c0a0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 1c0b0 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72 runSQLiteTestPr 1c0c0 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 ologue {} {.. 1c0d0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1c0e0 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 TE: Skip running 1c0f0 20 6f 75 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c our custom prol 1c100 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e ogue if the main 1c110 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 one has been.. 1c120 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 # ski 1c130 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a pped... #.. 1c140 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 1c150 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f exists ::no(pro 1c160 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 logue.eagle)]} t 1c170 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 1c180 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1c190 3a 20 4c 6f 61 64 20 74 68 65 20 22 62 65 66 6f : Load the "befo 1c1a0 72 65 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 re-constraints" 1c1b0 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 custom per-user 1c1c0 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d and/or per-host. 1c1d0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1c1e0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e test settings n 1c1f0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ow... #.. 1c200 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 uplevel 1c210 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 1 [list loadSQLi 1c220 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 teTestSettings$
1c230 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e  ::test_channel .
1c240 62 65 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20  before]....
1c250 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
1c260 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
1c270 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d  he [object] comm
1c280 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c 65  and is available
1c290 3b 20 69 66 20 6e 6f 74 2c 20 61 64 64 20 73 6f  ; if not, add so
1c2a0 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  me..        #
1c2b0 20 20 20 20 73 68 69 6d 73 20 74 6f 20 6d 61 6b      shims to mak
1c2c0 65 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  e the test suite
1c2d0 20 72 75 6e 20 73 6d 6f 6f 74 68 65 72 2e 0d 0a   run smoother...
1c2e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1c2f0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
1c300 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 24  eObjectCommand $1c310 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 1c320 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1c330 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 # NOTE: Det 1c340 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 73 ermine the names 1c350 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 20 70 of the native p 1c360 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 latform and arch 1c370 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 itecture... 1c380 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se 1c390 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 t platform [getB 1c3a0 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 72 75 uildPlatform tru 1c3b0 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 e].. set 1c3c0 61 72 63 68 69 74 65 63 74 75 72 65 20 5b 61 72 architecture [ar 1c3d0 63 68 69 74 65 63 74 75 72 65 46 6f 72 50 6c 61 chitectureForPla 1c3e0 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d tform$platform]
1c3f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
1c400 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
1c410 68 6f 77 20 74 68 65 20 70 6c 61 74 66 6f 72 6d  how the platform
1c420 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 75 72   and architectur
1c430 65 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20 6c  e used to help l
1c440 6f 63 61 74 65 20 74 68 65 0d 0a 20 20 20 20 20  ocate the..
1c450 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76     #       nativ
1c460 65 20 62 75 69 6c 64 20 66 69 6c 65 73 2e 0d 0a  e build files...
1c470 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1c480 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1c490 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1c4a0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1c4b0 20 20 20 20 22 2d 2d 2d 2d 20 70 6c 61 74 66 6f "---- platfo 1c4c0 72 6d 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 rm for locating 1c4d0 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c native build fil 1c4e0 65 73 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 es is \"" \.. 1c4f0 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f$platfo
1c500 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  rm \"\n]....
1c510 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1c520 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1c530 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1c540 20 20 20 20 20 22 2d 2d 2d 2d 20 61 72 63 68 69 "---- archi 1c550 74 65 63 74 75 72 65 20 66 6f 72 20 6c 6f 63 61 tecture for loca 1c560 74 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 6c ting native buil 1c570 64 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 5c d files is \"" \ 1c580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 61 ..$a
1c590 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 5c 6e  rchitecture \"\n
1c5a0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
1c5b0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1c5c0 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20  Build a list of
1c5d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69  configuration fi
1c5e0 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64  les that we hand
1c5f0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  le...        #..
1c600 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66          set conf
1c610 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  igFileNames [lis
1c620 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
1c630 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1c640 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 0d  ite.dll.config].
1c650 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1c660 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
1c670 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61 75  ild a list of au
1c680 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 64 20  xiliary Managed
1c690 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74  Debugging Assist
1c6a0 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 20 20  ants (MDA)..
1c6b0 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66      #       conf
1c6c0 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73 20  iguration files
1c6d0 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d  that we handle..
1c6e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1c6f0 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e 66 69      set mdaConfi
1c700 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  gFileNames [list
1c710 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1c720 45 61 67 6c 65 53 68 65 6c 6c 33 32 2e 65 78 65  EagleShell32.exe
1c730 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e 73 74  .mda.config Inst
1c740 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e 63 6f  aller.exe.mda.co
1c750 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20 20  nfig \..
1c760 20 20 20 20 74 65 73 74 2e 65 78 65 2e 6d 64 61      test.exe.mda
1c770 2e 63 6f 6e 66 69 67 20 74 65 73 74 6c 69 6e 71  .config testlinq
1c780 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20  .exe.mda.config
1c790 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  \..            t
1c7a0 65 73 74 65 66 36 2e 65 78 65 2e 6d 64 61 2e 63  estef6.exe.mda.c
1c7b0 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20  onfig]....
1c7c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1c7d0 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c  OTE: Build the l
1c7e0 69 73 74 20 6f 66 20 65 78 74 65 72 6e 61 6c 20  ist of external
1c7f0 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61  files that we ha
1c800 6e 64 6c 65 2e 20 20 53 6f 6d 65 20 6f 66 0d 0a  ndle.  Some of..
1c810 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1c820 74 68 65 73 65 20 66 69 6c 65 73 20 6d 61 79 20  these files may
1c830 62 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72  be native and/or
1c840 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
1c850 69 65 73 20 74 68 61 74 20 61 72 65 0d 0a 20 20  ies that are..
1c860 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
1c870 71 75 69 72 65 64 20 74 6f 20 70 65 72 66 6f 72  quired to perfor
1c880 6d 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 2e  m various tests.
1c890 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1c8a0 20 20 20 20 20 73 65 74 20 65 78 74 65 72 6e 61       set externa
1c8b0 6c 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  lFileNames [list
1c8c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1c8d0 5b 66 69 6c 65 20 6a 6f 69 6e 20 45 6e 74 69 74  [file join Entit
1c8e0 79 46 72 61 6d 65 77 6f 72 6b 20 6c 69 62 20 5b  yFramework lib [
1c8f0 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74  string map [list
1c900 20 46 78 20 22 22 5d 20 5b 73 74 72 69 6e 67 20   Fx ""] [string
1c910 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6d  \..            m
1c920 61 70 20 5b 6c 69 73 74 20 6e 65 74 46 78 34 35  ap [list netFx45
1c930 31 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34  1 netFx45 netFx4
1c940 35 32 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78  52 netFx45 netFx
1c950 34 36 20 6e 65 74 46 78 34 35 20 5c 0d 0a 20 20  46 netFx45 \..
1c960 20 20 20 20 20 20 20 20 20 20 6e 65 74 46 78 34            netFx4
1c970 36 31 20 6e 65 74 46 78 34 35 5d 20 5b 67 65 74  61 netFx45] [get
1c980 42 75 69 6c 64 4e 65 74 46 78 5d 5d 5d 20 45 6e  BuildNetFx]]] En
1c990 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64 6c  tityFramework.dl
1c9a0 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  l]]....        #
1c9b0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1c9c0 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74  : Build the list
1c9d0 20 6f 66 20 6e 61 74 69 76 65 20 61 73 73 65 6d   of native assem
1c9e0 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77  bly files that w
1c9f0 65 20 68 61 6e 64 6c 65 2e 20 20 54 68 65 0d 0a  e handle.  The..
1ca00 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1ca10 72 65 61 73 6f 6e 20 74 68 65 20 22 53 79 73 74  reason the "Syst
1ca20 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
1ca30 6c 6c 22 20 66 69 6c 65 20 69 73 20 69 6e 63 6c  ll" file is incl
1ca40 75 64 65 64 20 68 65 72 65 20 69 73 0d 0a 20 20  uded here is..
1ca50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
1ca60 63 61 75 73 65 20 69 74 20 63 6f 75 6c 64 20 62  cause it could b
1ca70 65 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65  e the mixed-mode
1ca80 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20   assembly...
1ca90 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
1caa0 65 74 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  et nativeFileNam
1cab0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  es [list \..
1cac0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 2e          sqlite3.
1cad0 64 6c 6c 20 53 51 4c 69 74 65 2e 49 6e 74 65 72  dll SQLite.Inter
1cae0 6f 70 2e 64 6c 6c 20 53 79 73 74 65 6d 2e 44 61  op.dll System.Da
1caf0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 0d 0a  ta.SQLite.dll]..
1cb00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1cb10 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
1cb20 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d  ld the list of m
1cb30 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20  anaged assembly
1cb40 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61  files that we ha
1cb50 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  ndle...        #
1cb60 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 61  ..        set ma
1cb70 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b  nagedFileNames [
1cb80 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
1cb90 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
1cba0 53 51 4c 69 74 65 2e 64 6c 6c 20 53 79 73 74 65  SQLite.dll Syste
1cbb0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69  m.Data.SQLite.Li
1cbc0 6e 71 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20  nq.dll \..
1cbd0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
1cbe0 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c  a.SQLite.EF6.dll
1cbf0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
1cc00 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1cc10 52 65 6d 6f 76 65 20 61 6e 79 20 74 65 73 74 20  Remove any test
1cc20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74 68 61 74  constraints that
1cc30 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6e 61   refer to the na
1cc40 74 69 76 65 20 61 6e 64 2f 6f 72 0d 0a 20 20 20  tive and/or..
1cc50 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e       #       man
1cc60 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69  aged assembly fi
1cc70 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64  les that we hand
1cc80 6c 65 20 75 6e 6c 65 73 73 20 66 6f 72 62 69 64  le unless forbid
1cc90 64 65 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20  den from..
1cca0 20 20 23 20 20 20 20 20 20 20 64 6f 69 6e 67 20    #       doing
1ccb0 73 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  so...        #..
1ccc0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
1ccd0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73  fo exists ::no(s
1cce0 71 6c 69 74 65 52 65 6d 6f 76 65 43 6f 6e 73 74  qliteRemoveConst
1ccf0 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b  raints)]} then {
1cd00 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
1cd10 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f  ach fileName $co 1cd20 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d nfigFileNames {. 1cd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 1cd40 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 oveConstraint [a 1cd50 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 1cd60 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
1cd70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1cd80 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
1cd90 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67  eName $mdaConfig 1cda0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 1cdb0 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 removeC 1cdc0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 1cdd0 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c dArgs file_$fil
1cde0 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20  eName]..
1cdf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
1ce00 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
1ce10 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e  e $externalFileN 1ce20 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 1ce30 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 removeConstr 1ce40 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 1ce50 20 66 69 6c 65 5f 20 5b 66 69 6c 65 20 74 61 69 file_ [file tai 1ce60 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 l$fileName]]..
1ce70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
1ce80 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
1ce90 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65  fileName $native 1cea0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 1ceb0 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 removeC 1cec0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 1ced0 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c dArgs file_$fil
1cee0 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20  eName]..
1cef0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
1cf00 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
1cf10 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61  e $managedFileNa 1cf20 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 1cf30 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 removeConstra 1cf40 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 1cf50 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d file_$fileName]
1cf60 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1cf70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1cf80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1cf90 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20   NOTE: Skip all
1cfa0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
1cfb0 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65 20  te related file
1cfc0 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 69  handling (deleti
1cfd0 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ng,..        #
1cfe0 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 6e       copying, an
1cff0 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69 6e  d loading) if in
1d000 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20  structed...
1d010 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
1d020 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
1d030 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 73  ::no(sqliteFiles
1d040 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
1d050 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1d060 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
1d070 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 65  trying to delete
1d080 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e   any files if in
1d090 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20  structed...
1d0a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1d0b0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
1d0c0 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
1d0d0 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68  qliteFiles)]} th
1d0e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1d0f0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
1d100 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
1d110 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73  qliteConfigFiles
1d120 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
1d130 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
1d140 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66  h fileName $conf 1d150 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 igFileNames {.. 1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 1d170 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 ryDeleteBinaryFi 1d180 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 le$fileName..
1d190 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1d1a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1d1c0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
1d1d0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 45  no(deleteSqliteE
1d1e0 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20  xternalFiles)]}
1d1f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1d200 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
1d210 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69  leName $mdaConfi 1d220 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 gFileNames {.. 1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 1d240 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 yDeleteBuildFile 1d250 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
1d260 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1d270 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
1d280 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65  each fileName $e 1d290 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 xternalFileNames 1d2a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d2b0 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e tryDeleteBin 1d2c0 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d aryFile$fileNam
1d2d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
1d2e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
1d2f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
1d300 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
1d310 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
1d320 6c 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29  liteNativeFiles)
1d330 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1d340 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
1d350 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
1d360 64 65 6c 65 74 65 53 71 6c 69 74 65 49 6d 70 6c  deleteSqliteImpl
1d370 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65  icitFiles)]} the
1d380 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1d390 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
1d3a0 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c  eName $nativeFil 1d3b0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 1d3c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 1d3d0 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 eleteAssembly$f
1d3e0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
1d3f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1d400 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1d410 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
1d420 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
1d430 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65  :no(deleteSqlite
1d440 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73  NonImplicitFiles
1d450 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
1d460 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1d470 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
1d480 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50  no(deleteSqliteP
1d490 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26  latformFiles)] &
1d4a0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
1d4b0 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
1d4c0 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72   length $platfor 1d4d0 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a m] > 0} then {.. 1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d4f0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 1d500 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 me$nativeFileNa
1d510 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
1d520 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
1d530 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69  leteAssembly $fi 1d540 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d leName$platform
1d550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1d560 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1d570 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1d580 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1d590 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
1d5a0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 41  no(deleteSqliteA
1d5b0 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73  rchitectureFiles
1d5c0 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  )] && \..
1d5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
1d5e0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63  ring length $arc 1d5f0 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 hitecture] > 0} 1d600 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d610 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 1d620 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 h fileName$nati
1d630 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
1d640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d650 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65     tryDeleteAsse
1d660 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24  mbly $fileName$
1d670 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20  architecture..
1d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d690 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
1d6a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1d6b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1d6c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1d6d0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
1d6e0 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
1d6f0 65 53 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 69  eSqliteManagedFi
1d700 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
1d710 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
1d720 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 1d730 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 anagedFileNames 1d740 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d750 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 tryDeleteAsse 1d760 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a mbly$fileName..
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1d780 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1d790 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1d7a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1d7b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
1d7c0 65 63 6b 20 66 6f 72 20 74 68 65 20 22 61 75 74  eck for the "aut
1d7d0 6f 53 65 6c 65 63 74 22 20 72 75 6e 74 69 6d 65  oSelect" runtime
1d7e0 20 6f 70 74 69 6f 6e 2e 20 20 49 66 20 70 72 65   option.  If pre
1d7f0 73 65 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  sent,..
1d800 20 23 20 20 20 20 20 20 20 61 74 74 65 6d 70 74   #       attempt
1d810 20 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c   to automaticall
1d820 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 72  y select the fir
1d830 73 74 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20  st available..
1d840 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1d850 62 75 69 6c 64 20 28 6f 72 20 22 72 65 6c 65 61  build (or "relea
1d860 73 65 22 29 20 6f 66 20 53 51 4c 69 74 65 20 61  se") of SQLite a
1d870 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nd System.Data.S
1d880 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20  QLite..
1d890 20 23 20 20 20 20 20 20 20 66 6f 72 20 75 73 65   #       for use
1d8a0 20 77 69 74 68 20 74 68 65 20 74 65 73 74 20 73   with the test s
1d8b0 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  uite...
1d8c0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
1d8d0 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74   {[hasRuntimeOpt
1d8e0 69 6f 6e 20 61 75 74 6f 53 65 6c 65 63 74 5d 7d  ion autoSelect]}
1d8f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1d900 20 20 20 20 20 69 66 20 7b 21 5b 63 68 65 63 6b       if {![check
1d910 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20  ForSQLiteBuilds
1d920 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1d930 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 true]} then {.. 1d940 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 che 1d950 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 ckForSQLiteRelea 1d960 73 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ses$::test_chan
1d970 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 20 20  nel true..
1d980 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1d990 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1d9a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
1d9b0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69   NOTE: Skip tryi
1d9c0 6e 67 20 74 6f 20 76 65 72 69 66 79 20 74 68 65  ng to verify the
1d9d0 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
1d9e0 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 3b 0d   if instructed;.
1d9f0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
1da00 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61     otherwise, ma
1da10 6b 65 20 73 75 72 65 20 69 74 20 61 63 74 75 61  ke sure it actua
1da20 6c 6c 79 20 65 78 69 73 74 73 20 6f 72 20 68 61  lly exists or ha
1da30 6c 74 20 74 68 65 20 65 6e 74 69 72 65 0d 0a 20  lt the entire..
1da40 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1da50 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
1da60 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   if it does not
1da70 65 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20  exist...
1da80 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
1da90 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
1daa0 20 3a 3a 6e 6f 28 76 65 72 69 66 79 42 75 69 6c   ::no(verifyBuil
1dab0 64 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68  dDirectory)]} th
1dac0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1dad0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1dae0 20 23 20 4e 4f 54 45 3a 20 41 74 20 74 68 69 73   # NOTE: At this
1daf0 20 70 6f 69 6e 74 2c 20 74 68 65 20 62 75 69 6c   point, the buil
1db00 64 20 64 69 72 65 63 74 6f 72 79 20 4d 55 53 54  d directory MUST
1db10 20 65 78 69 73 74 20 61 73 20 61 0d 0a 20 20 20   exist as a..
1db20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1db30 20 76 61 6c 69 64 20 64 69 72 65 63 74 6f 72 79   valid directory
1db40 20 66 6f 72 20 74 68 65 20 74 65 73 74 69 6e 67   for the testing
1db50 20 70 72 6f 63 65 73 73 20 74 6f 20 63 6f 6e 74   process to cont
1db60 69 6e 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  inue...
1db70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1db80 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20    set directory
1db90 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f  [getBuildDirecto
1dba0 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ry]....
1dbb0 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
1dbc0 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d  ists $directory] 1dbd0 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 1dbe0 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 ![file is 1dbf0 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 directory$direc
1dc00 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tory]} then {..
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
1dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
1dc30 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72  NOTE: Just prior
1dc40 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c   to actually hal
1dc50 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67  ting the testing
1dc60 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20   process,..
1dc70 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1dc80 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f   add an error to
1dc90 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69   the test log fi
1dca0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le...
1dcb0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1dcc0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1dcd0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1dce0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1dcf0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 1dd00 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 could not verif 1dd10 79 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 y build director 1dd20 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f 72 79 y \""$directory
1dd30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1dd40 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c 20 74        "\", all t
1dd50 65 73 74 69 6e 67 20 68 61 6c 74 65 64 5c 6e 22  esting halted\n"
1dd60 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
1dd70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1dd80 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 69 73      # NOTE: Rais
1dd90 69 6e 67 20 61 20 73 63 72 69 70 74 20 65 72 72  ing a script err
1dda0 6f 72 20 66 72 6f 6d 20 74 68 69 73 20 70 6f 69  or from this poi
1ddb0 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 0d 0a  nt should halt..
1ddc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
1ddd0 20 20 20 20 20 20 74 68 65 20 74 65 73 74 69 6e        the testin
1dde0 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  g process...
1ddf0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1de00 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1de10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1de20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1de30 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72    "could not ver
1de40 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74  ify build direct
1de50 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f  ory \"" $directo 1de60 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. 1de70 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c "\", all 1de80 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 testing halted" 1de90 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 1dea0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 1deb0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1dec0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1ded0 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 63 Skip trying to c 1dee0 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 20 69 66 opy any files if 1def0 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 instructed... 1df00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1df10 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 1df20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 1df30 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 SqliteFiles)]} t 1df40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1df50 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 1df60 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 1df70 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 29 liteConfigFiles) 1df80 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1df90 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 1dfa0 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 fileName$confi
1dfb0 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  gFileNames {..
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1dfd0 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24  yCopyBuildFile $1dfe0 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 1dff0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1e000 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1e010 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 1e020 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 1e030 6f 70 79 53 71 6c 69 74 65 45 78 74 65 72 6e 61 opySqliteExterna 1e040 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b lFiles)]} then { 1e050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e060 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1e070 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 # NOTE: Copy th 1e080 65 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 e Managed Debugg 1e090 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 ing Assistants ( 1e0a0 4d 44 41 29 20 63 6f 6e 66 69 67 75 72 61 74 69 MDA) configurati 1e0b0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 on.. 1e0c0 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 66 # file f 1e0d0 6f 72 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 or the Eagle she 1e0e0 6c 6c 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 ll to the build 1e0f0 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 output directory 1e100 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.. 1e110 20 23 20 20 20 20 20 20 20 77 68 69 6c 65 20 75 # while u 1e120 73 69 6e 67 20 65 61 63 68 20 6f 66 20 74 68 65 sing each of the 1e130 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 76 61 names of the va 1e140 72 69 6f 75 73 20 6c 65 67 61 63 79 20 74 65 73 rious legacy tes 1e150 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t.. 1e160 20 23 20 20 20 20 20 20 20 65 78 65 63 75 74 61 # executa 1e170 62 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c bles. This will 1e180 20 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 help to make su 1e190 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d re that all the. 1e1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1e1b0 20 20 20 20 20 20 20 6c 65 67 61 63 79 20 74 65 legacy te 1e1c0 73 74 73 20 72 75 6e 20 77 69 74 68 20 65 78 61 sts run with exa 1e1d0 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65 ctly the same se 1e1e0 74 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 t of Managed.. 1e1f0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 1e200 20 20 20 20 44 65 62 75 67 67 69 6e 67 20 41 73 Debugging As 1e210 73 69 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75 sistants configu 1e220 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 red... 1e230 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1e240 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 1e250 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 eName$mdaConfig
1e260 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
1e270 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
1e280 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20 45  CopyBinaryFile E
1e290 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64  agleShell.exe.md
1e2a0 61 2e 63 6f 6e 66 69 67 20 22 22 20 24 66 69 6c  a.config "" $fil 1e2b0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 eName.. 1e2c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1e2d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1e2e0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1e2f0 20 43 6f 70 79 20 74 68 65 20 65 78 74 65 72 6e Copy the extern 1e300 61 6c 20 62 69 6e 61 72 69 65 73 2c 20 69 66 20 al binaries, if 1e310 61 6e 79 2c 20 74 6f 20 74 68 65 20 64 69 72 65 any, to the dire 1e320 63 74 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 20 ctory that.. 1e330 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1e340 20 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 45 contains the E 1e350 61 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 69 agle shell. Thi 1e360 73 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 75 s is typically u 1e370 73 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 20 sed to make.. 1e380 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 1e390 20 20 20 73 75 72 65 20 61 73 73 65 6d 62 6c 69 sure assembli 1e3a0 65 73 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 es referenced by 1e3b0 20 74 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 20 the ones being 1e3c0 74 65 73 74 65 64 20 61 72 65 0d 0a 20 20 20 20 tested are.. 1e3d0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1e3e0 20 20 61 76 61 69 6c 61 62 6c 65 20 64 75 72 69 available duri 1e3f0 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 70 ng the testing p 1e400 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 rocess... 1e410 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1e420 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1e430 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e fileName$extern
1e440 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  alFileNames {..
1e450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1e460 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 69  ryCopyExternalFi
1e470 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  le $fileName.. 1e480 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1e490 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1e4b0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 1e4c0 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 no(copySqliteNat 1e4d0 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e iveFiles)]} then 1e4e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1e4f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1e500 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th 1e510 65 20 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 20 e test platform 1e520 69 73 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65 is likely the de 1e530 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73 0d 0a fault for this.. 1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 1e550 20 20 20 20 20 20 6d 61 63 68 69 6e 65 2c 20 61 machine, a 1e560 6c 73 6f 20 74 72 79 20 74 6f 20 63 6f 70 79 20 lso try to copy 1e570 74 68 65 20 6e 61 74 69 76 65 20 66 69 6c 65 73 the native files 1e580 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 to the.. 1e590 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 1e5a0 69 6e 61 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d inary location.. 1e5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1e5c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e5d0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 1e5e0 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 1e5f0 65 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d eImplicitFiles)] 1e600 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 1e610 20 20 20 20 20 20 20 20 20 5b 69 73 44 65 66 61 [isDefa 1e620 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d ultBuildPlatform 1e630 20 74 72 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a true]} then {.. 1e640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e650 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 1e660 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65$nativeFileName
1e670 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
1e680 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73         tryCopyAs
1e690 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65  sembly $fileName 1e6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e6b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 1e6c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1e6d0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 1e6e0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 exists ::no(cop 1e6f0 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 ySqliteNonImplic 1e700 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 itFiles)]} then 1e710 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1e720 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 1e730 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 1e740 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 litePlatformFile 1e750 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 [s 1e770 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c tring length$pl
1e780 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65  atform] > 0} the
1e790 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1e7a0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
1e7b0 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46  ileName $nativeF 1e7c0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 1e7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e7e0 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 tryCopyAssembly 1e7f0 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66$fileName $platf 1e800 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 orm.. 1e810 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1e820 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 1e830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i 1e840 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 1e850 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 ::no(copySqlite 1e860 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 ArchitectureFile 1e870 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 [s 1e890 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 tring length$ar
1e8a0 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d  chitecture] > 0}
1e8b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1e8c0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
1e8d0 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74  ch fileName $nat 1e8e0 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a iveFileNames {.. 1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1e900 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d tryCopyAssem 1e910 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 bly$fileName $a 1e920 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 rchitecture.. 1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 1e940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1e950 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 1e960 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1e970 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 1e980 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 1e990 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 1e9a0 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 73 liteManagedFiles 1e9b0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 1e9c0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 1e9d0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 h fileName$mana
1e9e0 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  gedFileNames {..
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ea00 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20  tryCopyAssembly
1ea10 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 1ea20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1ea30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1ea40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1ea50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1ea60 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 # NOTE: Skip tr 1ea70 79 69 6e 67 20 74 6f 20 6c 6f 61 64 20 61 6e 79 ying to load any 1ea80 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 files if instru 1ea90 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 cted... 1eaa0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 1eab0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1eac0 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 ::no(loadSqliteF 1ead0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 1eae0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 1eaf0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 1eb00 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 49 6d 70 no(loadSqliteImp 1eb10 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 licitFiles)]} th 1eb20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1eb30 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d tryLoadAssem 1eb40 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e bly System.Data. 1eb50 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 SQLite.dll.. 1eb60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1eb70 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 1eb80 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 1eb90 6c 6f 61 64 53 71 6c 69 74 65 4c 69 6e 71 46 69 loadSqliteLinqFi 1eba0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 1ebc0 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 LoadAssembly Sys 1ebd0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 1ebe0 4c 69 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 Linq.dll.. 1ebf0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1ec00 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 1ec10 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f o exists ::no(lo 1ec20 61 64 53 71 6c 69 74 65 45 66 36 46 69 6c 65 73 adSqliteEf6Files 1ec30 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 1ec40 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 tryLoa 1ec50 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d dAssembly System 1ec60 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 .Data.SQLite.EF6 1ec70 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 1ec80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 1ec90 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 1eca0 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 ists ::no(loadSq 1ecb0 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 liteNonImplicitF 1ecc0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 1ece0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1ecf0 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 50 ::no(loadSqliteP 1ed00 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 latformFiles)] & 1ed10 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 1ed20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 1ed30 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d ength$platform]
1ed40 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
1ed50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1ed60 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79  yLoadAssembly Sy
1ed70 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1ed80 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 0d 0a  .dll $platform.. 1ed90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 1eda0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 1edb0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 1edc0 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 ts ::no(loadSqli 1edd0 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69 teArchitectureFi 1ede0 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 les)] && \.. 1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 [s 1ee00 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 tring length$ar
1ee10 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d  chitecture] > 0}
1ee20 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1ee30 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64           tryLoad
1ee40 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e  Assembly System.
1ee50 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20  Data.SQLite.dll
1ee60 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20  $architecture.. 1ee70 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 1ee80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1ee90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1eea0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1eeb0 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 1eec0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1eed0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1eee0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1eef0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
1ef00 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 73  e version of \"s
1ef10 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20  qlite3.dll\"...
1ef20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
1ef30 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e     [file version
1ef40 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
1ef50 61 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d  ame sqlite3.dll]
1ef60 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  ] \n]..        }
1ef70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
1ef80 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
1ef90 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1efa0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1efb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1efc0 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 "---- file ver 1efd0 73 69 6f 6e 20 6f 66 20 5c 22 53 51 4c 69 74 65 sion of \"SQLite 1efe0 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e .Interop.dll\".. 1eff0 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 . " \.. 1f000 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 [file versi 1f010 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c on [getBinaryFil 1f020 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 eName SQLite.Int 1f030 65 72 6f 70 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a erop.dll]] \n].. 1f040 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1f050 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 1f060 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1f070 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1f080 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1f090 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
1f0a0 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
1f0b0 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53   \"System.Data.S
1f0c0 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22  QLite.dll\"... "
1f0d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f0e0 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20    [file version
1f0f0 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
1f100 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  me System.Data.S
1f110 51 4c 69 74 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d  QLite.dll]] \n].
1f120 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
1f130 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
1f140 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1f150 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1f160 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1f170 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 1f180 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f - file version o 1f190 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e f \"System.Data. 1f1a0 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5c SQLite.Linq.dll\ 1f1b0 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 "... " \.. 1f1c0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 [file ve 1f1d0 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 rsion [getBinary 1f1e0 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e FileName System. 1f1f0 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 Data.SQLite.Linq 1f200 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 .dll]] \n].. 1f210 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1f220 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 catch {.. 1f230 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1f240 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1f250 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1f260 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
1f270 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53  e version of \"S
1f280 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1f290 65 2e 45 46 36 2e 64 6c 6c 5c 22 2e 2e 2e 20 22  e.EF6.dll\"... "
1f2a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f2b0 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20    [file version
1f2c0 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
1f2d0 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  me System.Data.S
1f2e0 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 5d 20  QLite.EF6.dll]]
1f2f0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  \n]..        }..
1f300 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
1f310 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c  tring length $pl 1f320 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 atform] > 0} the 1f330 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 1f340 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 1f350 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1f360 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1f370 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1f380 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
1f390 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c  ile version of \
1f3a0 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a  "" $platform \.. 1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f3c0 22 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 5c 22 2e "/sqlite3.dll\". 1f3d0 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 .. " [file versi 1f3e0 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 on \.. 1f3f0 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 [getBinary 1f400 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 65 33 FileName sqlite3 1f410 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d .dll$platform]]
1f420 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1f430 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63  }....          c
1f440 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1f450 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1f460 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1f470 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 1f480 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 1f490 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c ile version of \ 1f4a0 22 22 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a ""$platform \..
1f4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f4c0 22 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70  "/SQLite.Interop
1f4d0 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c  .dll\"... " [fil
1f4e0 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20  e version \..
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
1f500 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
1f510 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64  SQLite.Interop.d
1f520 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c  ll $platform]] \ 1f530 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 1f540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 ... cat 1f550 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1f560 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1f570 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1f580 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1f590 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
1f5a0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22  e version of \""
1f5b0 20 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20   $platform \.. 1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2f "/ 1f5d0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 1f5e0 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 te.dll\"... " [f 1f5f0 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 ile version \.. 1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 1f610 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 1f620 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ 1f630 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f Lite.dll$platfo
1f640 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rm]] \n]..
1f650 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1f660 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
1f670 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $1f680 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 architecture] > 1f690 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1f6a0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 1f6b0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1f6c0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1f6d0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1f6f0 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
1f700 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74  n of \"" $archit 1f710 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 ecture \.. 1f720 20 20 20 20 20 20 20 20 20 20 22 2f 73 71 6c 69 "/sqli 1f730 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b te3.dll\"... " [ 1f740 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a file version \.. 1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f760 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 [getBinaryFileNa 1f770 6d 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 me sqlite3.dll$
1f780 61 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c  architecture]] \
1f790 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
1f7a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74  ...          cat
1f7b0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1f7c0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1f7d0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1f7e0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1f7f0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c "---- fil 1f800 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 e version of \"" 1f810 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c$architecture \
1f820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f830 20 20 22 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72    "/SQLite.Inter
1f840 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66  op.dll\"... " [f
1f850 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20  ile version \..
1f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
1f870 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
1f880 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70  e SQLite.Interop
1f890 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75  .dll $architectu 1f8a0 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 re]] \n].. 1f8b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1f8c0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 1f8d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1f8e0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1f8f0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1f900 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
1f910 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
1f920 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 65 63  of \"" $architec 1f930 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 ture \.. 1f940 20 20 20 20 20 20 20 20 22 2f 53 79 73 74 65 6d "/System 1f950 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 1f960 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 \"... " [file ve 1f970 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 rsion \.. 1f980 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e [getBin 1f990 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 aryFileName Syst 1f9a0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 1f9b0 6c 6c 20 24 61 72 63 68 69 74 65 63 74 75 72 65 ll$architecture
1f9c0 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ]] \n]..
1f9d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1f9e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1f9f0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61       # NOTE: Gra
1fa00 62 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61  b the list of ma
1fa10 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73  naged assemblies
1fa20 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
1fa30 20 70 72 6f 63 65 73 73 0d 0a 20 20 20 20 20 20   process..
1fa40 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65    #       and re
1fa50 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 79 73 74  port on the Syst
1fa60 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72  em.Data.SQLite r
1fa70 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 20  elated ones...
1fa80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1fa90 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
1faa0 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20  ObjectCommand]}
1fab0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1fac0 20 20 73 65 74 20 61 73 73 65 6d 62 6c 69 65 73    set assemblies
1fad0 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
1fae0 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e  AppDomain.Curren
1faf0 74 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d  tDomain GetAssem
1fb00 62 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20  blies]....
1fb10 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
1fb20 63 68 20 61 73 73 65 6d 62 6c 79 20 24 61 73 73  ch assembly $ass 1fb30 65 6d 62 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20 emblies {.. 1fb40 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 1fb50 6e 67 20 6d 61 74 63 68 20 5c 7b 53 79 73 74 65 ng match \{Syste 1fb60 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2a 20 24 m.Data.SQLite*$
1fb70 61 73 73 65 6d 62 6c 79 5d 7d 20 74 68 65 6e 20  assembly]} then
1fb80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1fb90 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1fba0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1fbb0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1fbc0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f "---- fo 1fbd0 75 6e 64 20 6c 6f 61 64 65 64 20 61 73 73 65 6d und loaded assem 1fbe0 62 6c 79 3a 20 22 20 24 61 73 73 65 6d 62 6c 79 bly: "$assembly
1fbf0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1fc00 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
1fc10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
1fc20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
1fc30 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1fc40 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1fc50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1fc60 20 22 2d 2d 2d 2d 20 64 65 66 69 6e 65 20 63 6f "---- define co 1fc70 6e 73 74 61 6e 74 73 20 66 6f 72 20 5c 22 53 79 nstants for \"Sy 1fc80 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 1fc90 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 \"... ".... 1fca0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1fcb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f {.. o 1fcc0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 1fcd0 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 1fce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1fcf0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 1fd00 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 65 66 Lite.SQLite3 Def 1fd10 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 ineConstants.. 1fd20 20 20 20 20 20 20 20 20 7d 20 64 65 66 69 6e 65 } define 1fd30 43 6f 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d Constants] == 0} 1fd40 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1fd50 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
1fd60 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
1fd70 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69  ndArgs [formatLi
1fd80 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20  st [lsort \..
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 65               $de 1fda0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3c fineConstants] < 1fdb0 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 none>] \n].. 1fdc0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1fde0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1fdf0 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20  l unknown\n..
1fe00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1fe10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
1fe20 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1fe30 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1fe40 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 1fe50 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 1fe60 6f 75 72 63 65 20 76 65 72 73 69 6f 6e 20 6f 66 ource version of 1fe70 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 \"System.Data.S 1fe80 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 QLite.dll\"... " 1fe90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 1fea0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 1feb0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 1fec0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 1fed0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 1fee0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 1fef0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ 1ff00 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 LiteConnection P 1ff10 72 6f 76 69 64 65 72 56 65 72 73 69 6f 6e 0d 0a roviderVersion.. 1ff20 20 20 20 20 20 20 20 20 20 20 7d 20 76 65 72 73 } vers 1ff30 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ion] == 0} then 1ff40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 1ff50 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 1ff60 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 h$version] == 0
1ff70 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1ff80 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73          set vers
1ff90 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20  ion null..
1ffa0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1ffb0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 1ffc0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 1ffd0 6e 64 41 72 67 73 20 24 76 65 72 73 69 6f 6e 20 ndArgs$version
1ffe0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1fff0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
20000 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 20010 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f st_channel unkno 20020 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 wn\n.. 20030 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 20040 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 20050 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 20060 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
20070 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
20080 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 63    "---- source c
20090 68 65 63 6b 6f 75 74 20 6f 66 20 5c 22 53 79 73  heckout of \"Sys
200a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
200b0 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  dll\"... "....
200c0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
200d0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
200e0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
200f0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
20100 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
20110 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
20120 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f  .SQLite.SQLiteCo
20130 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65  nnection Provide
20140 72 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20  rSourceId..
20150 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 5d       } sourceId]
20160 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
20170 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
20180 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73  string length $s 20190 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 ourceId] == 0} t 201a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 201b0 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 set sourceI 201c0 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 d null.. 201d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 201e0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
201f0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
20200 41 72 67 73 20 24 73 6f 75 72 63 65 49 64 20 5c  Args $sourceId \ 20210 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 n].. } 20220 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 20230 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
20240 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77  t_channel unknow
20250 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n\n..          }
20260 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
20270 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
20280 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
20290 74 68 65 20 61 76 61 69 6c 61 62 6c 65 20 62 75  the available bu
202a0 69 6c 64 73 20 28 61 6e 64 20 22 72 65 6c 65 61  ilds (and "relea
202b0 73 65 73 22 29 20 6f 66 20 53 51 4c 69 74 65 20  ses") of SQLite
202c0 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20  and..        #
202d0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
202e0 2e 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 20 20  .SQLite...
202f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65    #..        che
20300 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64  ckForSQLiteBuild
20310 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 20320 6c 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b l.. check 20330 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 ForSQLiteRelease 20340 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
20350 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  l....        #..
20360 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
20370 4e 6f 77 2c 20 77 65 20 6e 65 65 64 20 74 6f 20  Now, we need to
20380 6b 6e 6f 77 20 69 66 20 74 68 65 20 53 51 4c 69  know if the SQLi
20390 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library
203a0 69 73 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20  is available..
203b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28 69        #       (i
203c0 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 65 20  .e. because the
203d0 6d 61 6e 61 67 65 64 2d 6f 6e 6c 79 20 53 79 73  managed-only Sys
203e0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
203f0 61 73 73 65 6d 62 6c 79 20 63 61 6e 0d 0a 20 20  assembly can..
20400 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f        #       lo
20410 61 64 20 77 69 74 68 6f 75 74 20 69 74 3b 20 68  ad without it; h
20420 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 6e 6f  owever, it canno
20430 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 73  t do anything us
20440 65 66 75 6c 20 77 69 74 68 6f 75 74 0d 0a 20 20  eful without..
20450 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74        #       it
20460 29 2e 20 20 49 66 20 77 65 20 61 72 65 20 75 73  ).  If we are us
20470 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f  ing the mixed-mo
20480 64 65 20 61 73 73 65 6d 62 6c 79 20 61 6e 64 20  de assembly and
20490 77 65 20 61 6c 72 65 61 64 79 0d 0a 20 20 20 20  we already..
204a0 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 75 6e      #       foun
204b0 64 20 69 74 20 28 61 62 6f 76 65 29 2c 20 74 68  d it (above), th
204c0 69 73 20 73 68 6f 75 6c 64 20 61 6c 77 61 79 73  is should always
204d0 20 73 75 63 63 65 65 64 2e 0d 0a 20 20 20 20 20   succeed...
204e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
204f0 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62 72  eckForSQLiteLibr
20500 61 72 79 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ary $::test_chan 20510 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 nel.... # 20520 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 20530 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 53 : Check if the S 20540 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as 20550 73 65 6d 62 6c 79 20 69 73 20 61 76 61 69 6c 61 sembly is availa 20560 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ble... #. 20570 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f . checkFo 20580 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 24 rSQLiteInterop$
20590 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
205a0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
205b0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
205c0 63 6b 20 74 68 65 20 53 51 4c 69 74 65 20 64 61  ck the SQLite da
205d0 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 6f  tabase and tempo
205e0 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65 73  rary directories
205f0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
20600 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
20610 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20  LiteDirectories
20620 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d  $::test_channel. 20630 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 20640 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 20650 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 tempt to determi 20660 6e 65 20 69 66 20 76 61 72 69 6f 75 73 20 63 6f ne if various co 20670 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f mpile-time optio 20680 6e 73 20 6e 65 65 64 65 64 20 66 6f 72 0d 0a 20 ns needed for.. 20690 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 206a0 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 est constraints 206b0 77 65 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 were enabled for 206c0 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 the managed ass 206d0 65 6d 62 6c 79 2e 20 20 54 68 65 72 65 0d 0a 20 embly. There.. 206e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 # a 206f0 72 65 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 2d re some compile- 20700 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 74 68 61 time options tha 20710 74 20 6d 75 73 74 20 61 6c 73 6f 20 68 61 76 65 t must also have 20720 20 62 65 65 6e 20 65 6e 61 62 6c 65 64 0d 0a 20 been enabled.. 20730 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 # f 20740 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 or the interop a 20750 73 73 65 6d 62 6c 79 20 69 6e 20 6f 72 64 65 72 ssembly in order 20760 20 74 6f 20 62 65 20 65 66 66 65 63 74 69 76 65 to be effective 20770 2e 20 20 46 6f 72 20 74 68 6f 73 65 0d 0a 20 20 . For those.. 20780 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 70 # op 20790 74 69 6f 6e 73 2c 20 69 74 20 77 69 6c 6c 20 62 tions, it will b 207a0 65 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 69 e assumed that i 207b0 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 66 6f t was enabled fo 207c0 72 20 74 68 65 20 69 6e 74 65 72 6f 70 0d 0a 20 r the interop.. 207d0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 # a 207e0 73 73 65 6d 62 6c 79 20 69 66 20 69 74 20 77 61 ssembly if it wa 207f0 73 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 s enabled for th 20800 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 e managed assemb 20810 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ly... #.. 20820 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 20830 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b defineConstant [ 20840 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 list \.. 20850 20 20 20 20 43 48 45 43 4b 5f 53 54 41 54 45 20 CHECK_STATE 20860 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 20 44 45 42 COUNT_HANDLE DEB 20870 55 47 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 UG INTEROP_CODEC 20880 20 49 4e 54 45 52 4f 50 5f 44 45 42 55 47 20 5c INTEROP_DEBUG \ 20890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e .. IN 208a0 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f TEROP_EXTENSION_ 208b0 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f FUNCTIONS INTERO 208c0 50 5f 46 54 53 35 5f 45 58 54 45 4e 53 49 4f 4e P_FTS5_EXTENSION 208d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 208e0 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f INTEROP_INCLUDE_ 208f0 43 45 52 4f 44 20 49 4e 54 45 52 4f 50 5f 49 4e CEROD INTEROP_IN 20900 43 4c 55 44 45 5f 45 58 54 52 41 20 49 4e 54 45 CLUDE_EXTRA INTE 20910 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 20 ROP_INCLUDE_SEE 20920 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 \.. I 20930 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 5a NTEROP_INCLUDE_Z 20940 49 50 56 46 53 20 49 4e 54 45 52 4f 50 5f 4a 53 IPVFS INTEROP_JS 20950 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d ON1_EXTENSION \. 20960 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 . INT 20970 45 52 4f 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 EROP_LEGACY_CLOS 20980 45 20 49 4e 54 45 52 4f 50 5f 4c 4f 47 20 49 4e E INTEROP_LOG IN 20990 54 45 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 TEROP_PERCENTILE 209a0 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 _EXTENSION \.. 209b0 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f INTERO 209c0 50 5f 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49 P_REGEXP_EXTENSI 209d0 4f 4e 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f ON INTEROP_TEST_ 209e0 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 EXTENSION \.. 209f0 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP 20a00 5f 54 4f 54 59 50 45 5f 45 58 54 45 4e 53 49 4f _TOTYPE_EXTENSIO 20a10 4e 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 N INTEROP_VIRTUA 20a20 4c 5f 54 41 42 4c 45 20 4e 45 54 5f 32 30 20 4e L_TABLE NET_20 N 20a30 45 54 5f 33 35 20 5c 0d 0a 20 20 20 20 20 20 20 ET_35 \.. 20a40 20 20 20 20 20 4e 45 54 5f 34 30 20 4e 45 54 5f NET_40 NET_ 20a50 34 35 20 4e 45 54 5f 34 35 31 20 4e 45 54 5f 34 45 NET_451 NET_4 20a60 35 32 20 4e 45 54 5f 34 36 20 4e 45 54 5f 34 36 52 NET_46 NET_46 20a70 31 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 1 NET_COMPACT_20 20a80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20a90 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 PLATFORM_COMPACT 20aa0 46 52 41 4d 45 57 4f 52 4b 20 50 52 45 4c 4f 41 FRAMEWORK PRELOA 20ab0 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59 D_NATIVE_LIBRARY 20ac0 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 5c 0d RETARGETABLE \. 20ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c . SQL 20ae0 49 54 45 5f 53 54 41 4e 44 41 52 44 20 54 48 52 ITE_STANDARD THR 20af0 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54 OW_ON_DISPOSED T 20b00 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45 RACE TRACE_CONNE 20b10 43 54 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 CTION \.. 20b20 20 20 20 20 20 54 52 41 43 45 5f 44 45 54 45 43 TRACE_DETEC 20b30 54 49 4f 4e 20 54 52 41 43 45 5f 48 41 4e 44 4c TION TRACE_HANDL 20b40 45 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44 20 E TRACE_PRELOAD 20b50 54 52 41 43 45 5f 53 48 41 52 45 44 20 5c 0d 0a TRACE_SHARED \.. 20b60 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41 43 TRAC 20b70 45 5f 53 54 41 54 45 4d 45 4e 54 20 54 52 41 43 E_STATEMENT TRAC 20b80 45 5f 57 41 52 4e 49 4e 47 20 54 52 41 43 4b 5f E_WARNING TRACK_ 20b90 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 5c 0d 0a MEMORY_BYTES \.. 20ba0 20 20 20 20 20 20 20 20 20 20 20 20 55 53 45 5f USE_ 20bb0 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f 52 4b ENTITY_FRAMEWORK 20bc0 5f 36 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 _6 USE_INTEROP_D 20bd0 4c 4c 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56 LL USE_PREPARE_V 20be0 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 2 WINDOWS] {.. 20bf0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 20c00 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 20c10 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 69 6c ck if the compil 20c20 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 e-time option is 20c30 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65 20 6c listed in the l 20c40 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 ist of.. 20c50 20 20 23 20 20 20 20 20 20 20 22 64 65 66 69 6e # "defin 20c60 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70 e constants" kep 20c70 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20 74 68 t track of by th 20c80 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 e managed assemb 20c90 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ly... # 20ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 20cb0 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 kForSQLiteDefine 20cc0 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 Constant$::test
20cd0 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65  _channel $define 20ce0 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20 20 Constant.. 20cf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # 20d00 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 20d10 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 53 : Check if the S 20d20 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 20d30 65 20 70 72 6f 76 69 64 65 72 20 77 61 73 20 63 e provider was c 20d40 6f 6d 70 69 6c 65 64 20 77 69 74 68 0d 0a 20 20 ompiled with.. 20d50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75 # su 20d60 70 70 6f 72 74 20 66 6f 72 20 61 6e 79 20 65 6e pport for any en 20d70 63 72 79 70 74 65 64 20 64 61 74 61 62 61 73 65 crypted database 20d80 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 20d90 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 if {[have 20da0 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 Constraint \.. 20db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de 20dc0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 fineConstant.Sys 20dd0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 20de0 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 5d 20 7c INTEROP_CODEC] | 20df0 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 | \.. 20e00 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 [haveConstraint 20e10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20e20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 defineConsta 20e30 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 nt.System.Data.S 20e40 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 49 4e QLite.INTEROP_IN 20e50 43 4c 55 44 45 5f 53 45 45 5d 7d 20 74 68 65 6e CLUDE_SEE]} then 20e60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 20e70 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 20e80 45 3a 20 59 65 73 2c 20 61 64 64 20 67 65 6e 65 E: Yes, add gene 20e90 72 69 63 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 ric constraint f 20ea0 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 or use by the te 20eb0 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 st suite... 20ec0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 20ed0 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 20ee0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 20ef0 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 te.Encryption.. 20f00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 20f10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 20f20 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 NOTE: Check the 20f30 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 79 current build y 20f40 65 61 72 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c ear. Basically, 20f50 20 74 68 69 73 20 69 6e 64 69 63 61 74 65 73 0d this indicates. 20f60 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 20f70 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f which version o 20f80 66 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72 f MSBuild and/or 20f90 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 77 Visual Studio w 20fa0 61 73 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 as used to.. 20fb0 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 # comp 20fc0 69 6c 65 20 74 68 65 20 61 73 73 65 6d 62 6c 79 ile the assembly 20fd0 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 binaries under 20fe0 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 test... # 20ff0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 21000 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
21010 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
21020 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
21030 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
21040 4c 69 74 65 20 62 75 69 6c 64 20 79 65 61 72 2e  Lite build year.
21050 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .. "....
21060 73 65 74 20 79 65 61 72 20 5b 67 65 74 42 75 69  set year [getBui
21070 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20  ldYear]..
21080 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b   addConstraint [
21090 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64  appendArgs build
210a0 59 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20  Year. $year].. 210b0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
210c0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
210d0 65 6e 64 41 72 67 73 20 5c 22 20 24 79 65 61 72  endArgs \" $year 210e0 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 \"\n].... 210f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 21100 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 OTE: Check the c 21110 75 72 72 65 6e 74 20 62 75 69 6c 64 20 2e 4e 45 urrent build .NE 21120 54 20 46 72 61 6d 65 77 6f 72 6b 2e 20 20 42 61 T Framework. Ba 21130 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 sically, this.. 21140 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 # i 21150 6e 64 69 63 61 74 65 73 20 77 68 69 63 68 20 76 ndicates which v 21160 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 2e 4e ersion of the .N 21170 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 69 73 20 ET Framework is 21180 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 being.. # 21190 20 20 20 20 20 20 20 75 73 65 64 20 62 79 20 74 used by t 211a0 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 6e 61 he assembly bina 211b0 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74 2e ries under test. 211c0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 211d0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
211e0 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
211f0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
21200 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73  checking for Sys
21210 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
21220 62 75 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65  build .NET Frame
21230 77 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  work... "....
21240 20 20 20 20 20 73 65 74 20 6e 65 74 46 78 20 5b       set netFx [
21250 67 65 74 42 75 69 6c 64 4e 65 74 46 78 5d 0d 0a  getBuildNetFx]..
21260 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
21270 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
21280 73 20 62 75 69 6c 64 46 72 61 6d 65 77 6f 72 6b  s buildFramework
21290 2e 20 24 6e 65 74 46 78 5d 0d 0a 20 20 20 20 20  . $netFx].. 212a0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
212b0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
212c0 41 72 67 73 20 5c 22 20 24 6e 65 74 46 78 20 5c  Args \" $netFx \ 212d0 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 "\n].... 212e0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 212f0 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 E: Check the cur 21300 72 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 rent build confi 21310 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 guration. This 21320 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d should normally. 21330 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 21340 20 62 65 20 65 69 74 68 65 72 20 22 44 65 62 75 be either "Debu 21350 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 2e g" or "Release". 21360 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 21370 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
21380 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
21390 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
213a0 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73  checking for Sys
213b0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
213c0 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74  build configurat
213d0 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  ion... "....
213e0 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 75 72      set configur
213f0 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43  ation [getBuildC
21400 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20  onfiguration]..
21410 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
21420 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
21430 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74   buildConfigurat
21440 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72 61 74  ion. $configurat 21450 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 ion].. tp 21460 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
21470 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
21480 5c 22 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f  \" $configuratio 21490 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 n \"\n].... 214a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 214b0 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 73 65 74 NOTE: Try to set 214c0 75 70 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20 up an interrupt 214d0 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 74 callback using t 214e0 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67 67 he script debugg 214f0 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 er.. # 21500 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20 63 61 that will ca 21510 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75 65 ncel all SQL que 21520 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 ries in progress 21530 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 for all databas 21540 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 21550 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b connections k 21560 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 69 6e 74 nown to this int 21570 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 erpreter... 21580 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 21590 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 215a0 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65 72 ::no(sqliteInter 215b0 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d 20 ruptCallback)]} 215c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 215d0 20 20 73 65 74 75 70 44 62 49 6e 74 65 72 72 75 setupDbInterru 215e0 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 65 ptCallback$::te
215f0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 65  st_channel $::te 21600 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 st_log.. 21610 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 21620 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 21630 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 6e 61 Check for the na 21640 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 tive runtime opt 21650 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c 64 ion, which would 21660 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a 20 20 mean we are.. 21670 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 # us 21680 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f ing the mixed-mo 21690 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 de assembly... 216a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 216b0 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 checkForRuntime 216c0 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 Option$::test_c
216d0 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d  hannel native...
216e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
216f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
21700 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 73 75  k if the test su
21710 69 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e 74  ite should count
21720 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   the number of c
21730 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20  onnections..
21740 20 20 20 20 23 20 20 20 20 20 20 20 22 6f 70 65      #       "ope
21750 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 64  ned" and "closed
21760 22 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20  " from the pool
21770 77 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67  when determining
21780 20 69 66 20 61 20 74 65 73 74 0d 0a 20 20 20 20   if a test..
21790 20 20 20 20 23 20 20 20 20 20 20 20 70 61 73 73      #       pass
217a0 65 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 74  ed.  Disabling t
217b0 68 69 73 20 62 65 68 61 76 69 6f 72 20 69 73 20  his behavior is
217c0 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 73  sometimes necess
217d0 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20  ary (e.g...
217e0 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e     #       durin
217f0 67 20 74 68 65 20 72 65 6c 65 61 73 65 20 74 65  g the release te
21800 73 74 69 6e 67 20 70 72 6f 63 65 73 73 29 20 62  sting process) b
21810 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65  ecause there are
21820 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 20   several..
21830 20 20 23 20 20 20 20 20 20 20 74 65 73 74 73 20    #       tests
21840 74 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 65  that rely on the
21850 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 6f   "opened from po
21860 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 20  ol" count being
21870 67 72 65 61 74 65 72 0d 0a 20 20 20 20 20 20 20  greater..
21880 20 23 20 20 20 20 20 20 20 74 68 61 6e 20 7a 65   #       than ze
21890 72 6f 2e 20 20 54 68 65 73 65 20 74 65 73 74 73  ro.  These tests
218a0 20 6d 61 79 20 66 61 69 6c 20 64 75 65 20 74 6f   may fail due to
218b0 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d 69   the non-determi
218c0 6e 69 73 74 69 63 0d 0a 20 20 20 20 20 20 20 20  nistic..
218d0 23 20 20 20 20 20 20 20 62 65 68 61 76 69 6f 72  #       behavior
218e0 20 6f 66 20 74 68 65 20 43 4c 52 20 47 43 2c 20   of the CLR GC,
218f0 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72 65 20  even when there
21900 69 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 65  is no bug in the
21910 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 23   code..        #
21920 20 20 20 20 20 20 20 62 65 69 6e 67 20 74 65 73         being tes
21930 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ted...        #.
21940 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f  .        checkFo
21950 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24  rRuntimeOption $21960 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e ::test_channel n 21970 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20 oPoolCounts.... 21980 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 21990 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 219a0 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74 if the test suit 219b0 65 20 73 68 6f 75 6c 64 20 75 73 65 20 73 68 61 e should use sha 219c0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e 0d red-cache mode.. 219d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 219e0 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 checkForRunt 219f0 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 imeOption$::tes
21a00 74 5f 63 68 61 6e 6e 65 6c 20 73 68 61 72 65 64  t_channel shared
21a10 43 61 63 68 65 0d 0a 0d 0a 20 20 20 20 20 20 20  Cache....
21a20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
21a30 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 72  TE: Report the r
21a40 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 70 72  esource usage pr
21a50 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61  ior to running a
21a60 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20  ny tests...
21a70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
21a80 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72  portSQLiteResour
21a90 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  ces $::test_chan 21aa0 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 nel.... # 21ab0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 21ac0 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73 74 20 : Grab the list 21ad0 6f 66 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65 of native module 21ae0 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e s for the curren 21af0 74 20 70 72 6f 63 65 73 73 20 61 6e 64 0d 0a 20 t process and.. 21b00 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 # r 21b10 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 79 73 eport on the Sys 21b20 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 21b30 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20 related ones... 21b40 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 21b50 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 21b60 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d eObjectCommand]} 21b70 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 21b80 20 20 20 73 65 74 20 6d 6f 64 75 6c 65 73 20 5b set modules [ 21b90 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d object invoke \. 21ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 21bb0 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 ystem.Diagnostic 21bc0 73 2e 50 72 6f 63 65 73 73 2e 47 65 74 43 75 72 s.Process.GetCur 21bd0 72 65 6e 74 50 72 6f 63 65 73 73 20 4d 6f 64 75 rentProcess Modu 21be0 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 les].... 21bf0 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 object foreach 21c00 20 2d 61 6c 69 61 73 20 6d 6f 64 75 6c 65 20 24 -alias module$
21c10 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 20 20 20  modules {..
21c20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
21c30 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
21c40 65 20 6d 6f 64 75 6c 65 20 66 69 6c 65 20 6e 61  e module file na
21c50 6d 65 20 68 65 72 65 20 6d 75 73 74 20 62 65 20  me here must be
21c60 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d 0a 20 20 20  normalized...
21c70 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
21c80 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
21c90 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61  Name [file norma
21ca0 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 46 69  lize [$module Fi 21cb0 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 leName]].... 21cc0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 21cd0 69 6e 67 20 6d 61 74 63 68 20 2d 6e 6f 63 61 73 ing match -nocas 21ce0 65 20 2a 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 20 e */sqlite3.dll 21cf0 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
21d00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
21d10 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 21d20 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 21d30 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 21d40 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 21d50 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 4c 69 ound loaded SQLi 21d60 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 te native librar 21d70 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 y module: " \.. 21d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21d90 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a$fileName \n]..
21da0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
21db0 73 65 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61  seif {[string ma
21dc0 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  tch \..
21dd0 20 20 20 20 20 20 20 2d 6e 6f 63 61 73 65 20 2a         -nocase *
21de0 2f 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e  /SQLite.Interop.
21df0 64 6c 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  dll $fileName]} 21e00 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 21e10 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
21e20 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
21e30 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
21e40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
21e50 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20  -- found loaded
21e60 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61  SQLite interop a
21e70 73 73 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a 20  ssembly module:
21e80 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
21e90 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65         $fileName 21ea0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 21eb0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 21ec0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 21ed0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 21ee0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 21ef0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
21f00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
21f10 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74   "---- compile-t
21f20 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20  ime options for
21f30 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
21f40 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  ary... "....
21f50 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
21f60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
21f70 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
21f80 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
21f90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
21fa0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
21fb0 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51  QLite.SQLite3 SQ
21fc0 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  LiteCompileOptio
21fd0 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  ns..          }
21fe0 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20  compileOptions]
21ff0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
22000 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
22010 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 22020 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 [appendArgs [for 22030 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c matList [lsort \ 22040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22050 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e$compileOption
22060 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a  s] <none>] \n]..
22070 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
22080 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
22090 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 220a0 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d annel unknown\n. 220b0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 220c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 220d0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 220e0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
220f0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
22100 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
22110 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  -- compile-time
22120 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69  options for SQLi
22130 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  te interop assem
22140 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  bly... "....
22150 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
22160 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
22170 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
22180 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
22190 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
221a0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
221b0 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e  QLite.SQLite3 In
221c0 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69  teropCompileOpti
221d0 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ons..          }
221e0 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d   compileOptions]
221f0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
22200 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
22210 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 22220 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f [appendArgs [fo 22230 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 rmatList [lsort 22240 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22250 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f$compileOptio
22260 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d  ns] <none>] \n].
22270 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
22280 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
22290 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 222a0 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e hannel unknown\n 222b0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 222c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 222d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 222e0 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 NOTE: Show the 222f0 61 63 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73 active test cons 22300 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 traints... 22310 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 22320 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
22330 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
22340 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73  ---- constraints
22350 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
22360 20 20 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b     [formatList [
22370 6c 73 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72  lsort [getConstr
22380 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20  aints]] <none>]
22390 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
223a0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
223b0 3a 20 53 61 76 65 20 74 68 65 20 74 65 73 74 20  : Save the test
223c0 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20  constraints for
223d0 75 73 65 20 62 79 20 74 68 72 65 61 64 73 20 63  use by threads c
223e0 72 65 61 74 65 64 20 69 6e 20 74 68 69 73 0d 0a  reated in this..
223f0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
22400 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61  application doma
22410 69 6e 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63  in.  This is nec
22420 65 73 73 61 72 79 20 62 65 63 61 75 73 65 20 61  essary because a
22430 6c 6c 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20  ll the Eagle..
22440 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 74        #       "t
22450 65 73 74 20 63 6f 6e 74 65 78 74 22 20 69 6e 66  est context" inf
22460 6f 72 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 2d  ormation is per-
22470 74 68 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 20  thread...
22480 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
22490 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
224a0 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73  test_constraints
224b0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
224c0 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f       set ::test_
224d0 63 6f 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a 65  constraints $::e 224e0 61 67 6c 65 5f 74 65 73 74 73 28 63 6f 6e 73 74 agle_tests(const 224f0 72 61 69 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 raints).. 22500 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 22510 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 22520 20 4c 6f 61 64 20 74 68 65 20 22 61 66 74 65 72 Load the "after 22530 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 -constraints" cu 22540 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e stom per-user an 22550 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 d/or per-host.. 22560 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 22570 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 est settings now 22580 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 22590 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 uplevel 1 225a0 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 [list loadSQLite 225b0 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a TestSettings$::
225c0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66  test_channel .af
225d0 74 65 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ter]....
225e0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
225f0 45 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c  E: If necessary,
22600 20 65 6e 61 62 6c 65 20 73 68 61 72 65 64 2d 63   enable shared-c
22610 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a  ache mode now...
22620 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
22630 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69     if {[hasRunti
22640 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 43  meOption sharedC
22650 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ache]} then {..
22660 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 53           enableS
22670 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 65  haredCache $::te 22680 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d st_channel true. 22690 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 226a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 226b0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 # NOTE: Show wh 226c0 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 en our tests act 226d0 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 ually began (now 226e0 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 226f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
22700 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
22710 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
22720 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79          "---- Sy
22730 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
22740 20 74 65 73 74 73 20 62 65 67 61 6e 20 61 74 20   tests began at
22750 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
22760 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b   [clock format [
22770 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20  clock seconds]]
22780 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  \n]..      }..
22790 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
227a0 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69   runSQLiteTestFi
227b0 6c 65 73 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b  lesPrologue {} {
227c0 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20  ..      uplevel
227d0 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  1 {..        #..
227e0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
227f0 53 65 74 75 70 20 74 68 65 20 76 61 72 69 61 62  Setup the variab
22800 6c 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74  les that refer t
22810 6f 20 74 68 65 20 76 61 72 69 6f 75 73 20 6e 6f  o the various no
22820 6e 2d 64 61 74 61 20 66 69 6c 65 73 0d 0a 20 20  n-data files..
22830 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
22840 71 75 69 72 65 64 20 62 79 20 74 68 65 20 74 65  quired by the te
22850 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65  sts in this file
22860 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
22870 20 20 20 20 20 20 73 65 74 20 65 6e 74 69 74 79        set entity
22880 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65  FrameworkDllFile
22890 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
228a0 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
228b0 65 20 45 6e 74 69 74 79 46 72 61 6d 65 77 6f 72  e EntityFramewor
228c0 6b 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20  k.dll]....
228d0 20 20 73 65 74 20 69 6e 73 74 61 6c 6c 65 72 45    set installerE
228e0 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64  xeFile [getBuild
228f0 46 69 6c 65 4e 61 6d 65 20 49 6e 73 74 61 6c 6c  FileName Install
22900 65 72 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 20  er.exe]..
22910 20 73 65 74 20 73 71 6c 69 74 65 44 65 73 69 67   set sqliteDesig
22920 6e 65 72 44 6c 6c 46 69 6c 65 20 5b 67 65 74 42  nerDllFile [getB
22930 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 51 4c  uildFileName SQL
22940 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c  ite.Designer.dll
22950 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
22960 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74   systemDataSQLit
22970 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20  eDllFile \..
22980 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c          [getBuil
22990 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d  dFileName System
229a0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
229b0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
229c0 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74   systemDataSQLit
229d0 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 5c 0d 0a  eLinqDllFile \..
229e0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
229f0 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79  BuildFileName Sy
22a00 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
22a10 2e 4c 69 6e 71 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20  .Linq.dll]....
22a20 20 20 20 20 20 20 73 65 74 20 73 79 73 74 65 6d        set system
22a30 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c  DataSQLiteEf6Dll
22a40 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
22a50 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c      [getBuildFil
22a60 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74  eName System.Dat
22a70 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c  a.SQLite.EF6.dll
22a80 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
22a90 20 74 65 73 74 45 78 65 46 69 6c 65 20 5b 67 65   testExeFile [ge
22aa0 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74  tBuildFileName t
22ab0 65 73 74 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20  est.exe]..
22ac0 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71 45 78    set testLinqEx
22ad0 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46  eFile [getBuildF
22ae0 69 6c 65 4e 61 6d 65 20 74 65 73 74 6c 69 6e 71  ileName testlinq
22af0 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 20 20 73  .exe]..        s
22b00 65 74 20 74 65 73 74 45 66 36 45 78 65 46 69 6c  et testEf6ExeFil
22b10 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  e [getBuildFileN
22b20 61 6d 65 20 74 65 73 74 65 66 36 2e 65 78 65 5d  ame testef6.exe]
22b30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
22b40 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
22b50 65 74 75 70 20 74 68 65 20 76 61 72 69 61 62 6c  etup the variabl
22b60 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  es that refer to
22b70 20 74 68 65 20 76 61 72 69 6f 75 73 20 64 61 74   the various dat
22b80 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 20  a files..
22b90 20 23 20 20 20 20 20 20 20 72 65 71 75 69 72 65   #       require
22ba0 64 20 62 79 20 74 68 65 20 74 65 73 74 73 20 69  d by the tests i
22bb0 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20  n this file...
22bc0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
22bd0 20 73 65 74 20 74 65 73 74 4c 69 6e 71 4f 75 74   set testLinqOut
22be0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
22bf0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
22c00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22c10 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
22c20 74 61 50 61 74 68 5d 20 74 65 73 74 6c 69 6e 71  taPath] testlinq
22c30 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .out]]....
22c40 20 20 73 65 74 20 6e 6f 72 74 68 77 69 6e 64 45    set northwindE
22c50 66 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  fDbFile [file na
22c60 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
22c70 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
22c80 20 20 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65     [file dirname
22c90 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b   [file dirname [
22ca0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
22cb0 61 50 61 74 68 5d 5d 5d 20 5c 0d 0a 20 20 20 20  aPath]]] \..
22cc0 20 20 20 20 20 20 20 20 74 65 73 74 6c 69 6e 71          testlinq
22cd0 20 6e 6f 72 74 68 77 69 6e 64 45 46 2e 64 62 5d   northwindEF.db]
22ce0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
22cf0 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 20 5b 66   nonWalDbFile [f
22d00 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
22d10 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
22d20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
22d30 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
22d40 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a   nonWal.db]]....
22d50 20 20 20 20 20 20 20 20 73 65 74 20 77 61 6c 44          set walD
22d60 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  bFile [file nati
22d70 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
22d80 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
22d90 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
22da0 61 74 61 50 61 74 68 5d 20 77 61 6c 2e 64 62 5d  ataPath] wal.db]
22db0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
22dc0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
22dd0 54 68 65 20 76 61 72 69 6f 75 73 20 69 6e 73 74  The various inst
22de0 61 6c 6c 2f 75 6e 69 6e 73 74 61 6c 6c 20 6c 6f  all/uninstall lo
22df0 67 20 66 69 6c 65 73 20 75 73 65 64 20 74 6f 20  g files used to
22e00 74 65 73 74 20 74 68 65 0d 0a 20 20 20 20 20 20  test the..
22e10 20 20 23 20 20 20 20 20 20 20 64 65 73 69 67 6e    #       design
22e20 2d 74 69 6d 65 20 63 6f 6d 70 6f 6e 65 6e 74 20  -time component
22e30 69 6e 73 74 61 6c 6c 65 72 2e 0d 0a 20 20 20 20  installer...
22e40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
22e50 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  et testInstallVs
22e60 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c  2005LogFile [fil
22e70 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
22e80 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
22e90 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
22ea0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49  eTestDataPath] I
22eb0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
22ec0 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2005.log]]....
22ed0 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e        set testIn
22ee0 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69  stallVs2008LogFi
22ef0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
22f00 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
22f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
22f20 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
22f30 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f  Path] Installer_
22f40 54 65 73 74 5f 56 73 32 30 30 38 2e 6c 6f 67 5d  Test_Vs2008.log]
22f50 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  ]....        set
22f60 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
22f70 31 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20  10LogFile [file
22f80 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
22f90 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
22fa0 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
22fb0 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73  estDataPath] Ins
22fc0 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30  taller_Test_Vs20
22fd0 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20  10.log]]....
22fe0 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74      set testInst
22ff0 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
23000 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
23010 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
23020 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
23030 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
23040 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65  th] Installer_Te
23050 73 74 5f 56 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d  st_Vs2012.log]].
23060 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  ...        set t
23070 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33  estInstallVs2013
23080 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  LogFile [file na
23090 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
230a0 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
230b0 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
230c0 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61  tDataPath] Insta
230d0 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33  ller_Test_Vs2013
230e0 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
230f0 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c    set testInstal
23100 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 5b  lVs2015LogFile [
23110 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
23120 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
23130 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51            [getSQ
23140 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
23150 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74  ] Installer_Test
23160 5f 56 73 32 30 31 35 2e 6c 6f 67 5d 5d 0d 0a 0d  _Vs2015.log]]...
23170 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73  .        set tes
23180 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35  tUninstallVs2005
23190 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  LogFile [file na
231a0 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
231b0 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
231c0 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
231d0 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73  tDataPath] Unins
231e0 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30  taller_Test_Vs20
231f0 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20  05.log]]....
23200 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e      set testUnin
23210 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69  stallVs2008LogFi
23220 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
23230 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
23240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
23250 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
23260 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65  Path] Uninstalle
23270 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c 6f  r_Test_Vs2008.lo
23280 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  g]]....        s
23290 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c  et testUninstall
232a0 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b 66  Vs2010LogFile [f
232b0 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
232c0 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
232d0 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
232e0 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
232f0 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73   Uninstaller_Tes
23300 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a  t_Vs2010.log]]..
23310 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
23320 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31  stUninstallVs201
23330 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  2LogFile [file n
23340 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
23350 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
23360 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
23370 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e  stDataPath] Unin
23380 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
23390 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  012.log]]....
233a0 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69       set testUni
233b0 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46  nstallVs2013LogF
233c0 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
233d0 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
233e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
233f0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
23400 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c  aPath] Uninstall
23410 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33 2e 6c  er_Test_Vs2013.l
23420 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
23430 73 65 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c  set testUninstal
23440 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 5b  lVs2015LogFile [
23450 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
23460 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
23470 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51            [getSQ
23480 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68  LiteTestDataPath
23490 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65  ] Uninstaller_Te
234a0 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d 5d 0d  st_Vs2015.log]].
234b0 0a 0d 0a 20 20 20 20 20 20 20 20 23 23 23 23 23  ...        #####
234c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
234d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
234e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
234f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
23500 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  ##....        if
23510 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
23520 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
23530 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
23540 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $23550 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 entityFrameworkD 23560 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 llFile]]]} then 23570 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 23580 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
23590 63 68 61 6e 6e 65 6c 20 24 65 6e 74 69 74 79 46  channel $entityF 235a0 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d rameworkDllFile. 235b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 235c0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 235d0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 235e0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 235f0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 23600 65 20 74 61 69 6c 20 24 69 6e 73 74 61 6c 6c 65 e tail$installe
23610 72 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  rExeFile]]]} the
23620 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
23630 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 23640 74 5f 63 68 61 6e 6e 65 6c 20 24 69 6e 73 74 61 t_channel$insta
23650 6c 6c 65 72 45 78 65 46 69 6c 65 20 49 6e 73 74  llerExeFile Inst
23660 61 6c 6c 65 72 2e 65 78 65 0d 0a 20 20 20 20 20  aller.exe..
23670 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
23680 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
23690 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
236a0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
236b0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
236c0 20 24 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72   $sqliteDesigner 236d0 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e DllFile]]]} then 236e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch 236f0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
23700 5f 63 68 61 6e 6e 65 6c 20 24 73 71 6c 69 74 65  _channel $sqlite 23710 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 0d DesignerDllFile. 23720 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 23730 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 23740 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 23750 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 23760 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 23770 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61 e tail$systemDa
23780 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 5d  taSQLiteDllFile]
23790 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
237a0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
237b0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 237c0 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69$systemDataSQLi
237d0 74 65 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20 20  teDllFile..
237e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
237f0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
23800 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
23810 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
23820 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
23830 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69   $systemDataSQLi 23840 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 5d 5d 5d teLinqDllFile]]] 23850 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 23860 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 23870 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $23880 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 systemDataSQLite 23890 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 LinqDllFile.. 238a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 238b0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 238c0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 238d0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 238e0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 238f0 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 il$systemDataSQ
23900 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 5d 5d  LiteEf6DllFile]]
23910 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
23920 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
23930 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 23940 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74$systemDataSQLit
23950 65 45 66 36 44 6c 6c 46 69 6c 65 0d 0a 20 20 20  eEf6DllFile..
23960 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
23970 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
23980 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
23990 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
239a0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
239b0 69 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65 5d  il $testExeFile] 239c0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 239d0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 239e0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
239f0 20 24 74 65 73 74 45 78 65 46 69 6c 65 20 74 65   $testExeFile te 23a00 73 74 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 st.exe.. 23a10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 23a20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {![haveConstrain 23a30 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 23a40 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 le_ \.. 23a50 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 [file tail$t
23a60 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 5d 5d  estLinqExeFile]]
23a70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
23a80 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
23a90 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 23aa0 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65$testLinqExeFile
23ab0 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 0d 0a 20   testlinq.exe..
23ac0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
23ad0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
23ae0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
23af0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
23b00 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
23b10 74 61 69 6c 20 24 74 65 73 74 45 66 36 45 78 65  tail $testEf6Exe 23b20 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 23b30 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 23b40 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
23b50 61 6e 6e 65 6c 20 24 74 65 73 74 45 66 36 45 78  annel $testEf6Ex 23b60 65 46 69 6c 65 20 74 65 73 74 65 66 36 2e 65 78 eFile testef6.ex 23b70 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a e.. }.... 23b80 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 if {![ha 23b90 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 23ba0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c pendArgs file_ \ 23bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 .. [f 23bc0 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 4c 69 ile tail$testLi
23bd0 6e 71 4f 75 74 46 69 6c 65 5d 5d 5d 7d 20 74 68  nqOutFile]]]} th
23be0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
23bf0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 23c00 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 st_channel$test
23c10 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a 20 20 20  LinqOutFile..
23c20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
23c30 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
23c40 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
23c50 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
23c60 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
23c70 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44  il $northwindEfD 23c80 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b bFile]]]} then { 23c90 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 23ca0 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
23cb0 68 61 6e 6e 65 6c 20 24 6e 6f 72 74 68 77 69 6e  hannel $northwin 23cc0 64 45 66 44 62 46 69 6c 65 0d 0a 20 20 20 20 20 dEfDbFile.. 23cd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 23ce0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 23cf0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 23d00 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 23d10 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 23d20 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 5d 5d$nonWalDbFile]]
23d30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
23d40 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
23d50 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 23d60 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d 0a 20$nonWalDbFile..
23d70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
23d80 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
23d90 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
23da0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
23db0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
23dc0 74 61 69 6c 20 24 77 61 6c 44 62 46 69 6c 65 5d  tail $walDbFile] 23dd0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 23de0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 23df0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
23e00 20 24 77 61 6c 44 62 46 69 6c 65 0d 0a 20 20 20   $walDbFile.. 23e10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 23e20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 23e30 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 23e40 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 23e50 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 23e60 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 il$testInstallV
23e70 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d  s2005LogFile]]]}
23e80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
23e90 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
23ea0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
23eb0 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 35  estInstallVs2005
23ec0 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
23ed0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
23ee0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
23ef0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
23f00 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
23f10 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $23f20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 testInstallVs200 23f30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 8LogFile]]]} the 23f40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 23f50 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
23f60 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49  t_channel $testI 23f70 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 nstallVs2008LogF 23f80 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 23f90 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 23fa0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 23fb0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 23fc0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23fd0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
23fe0 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67  InstallVs2010Log
23ff0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
24000 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b  .          check
24010 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 24020 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 annel$testInsta
24030 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 0d  llVs2010LogFile.
24040 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
24050 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
24060 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
24070 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
24080 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
24090 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74  e tail $testInst 240a0 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 allVs2012LogFile 240b0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 240c0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 240d0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
240e0 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 240f0 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2012LogFile.. 24100 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 24110 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 24120 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 24130 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 24140 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 24150 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 il$testInstallV
24160 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d  s2013LogFile]]]}
24170 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
24180 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
24190 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
241a0 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33  estInstallVs2013
241b0 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
241c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
241d0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
241e0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
241f0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
24200 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $24210 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 testInstallVs201 24220 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 5LogFile]]]} 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 74 65 73 74 49  t_channel $testI 24260 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 nstallVs2015LogF 24270 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 24280 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 24290 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 242a0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 242b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 242c0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
242d0 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c  UninstallVs2005L
242e0 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  ogFile]]]} then
242f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
24300 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 24310 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 channel$testUni
24320 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46  nstallVs2005LogF
24330 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
24340 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
24350 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
24360 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
24370 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24380 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 24390 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c UninstallVs2008L 243a0 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 243b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 243c0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
243d0 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69  channel $testUni 243e0 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 nstallVs2008LogF 243f0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 24400 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 24410 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 24420 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 24430 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24440 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
24450 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c  UninstallVs2010L
24460 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  ogFile]]]} then
24470 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
24480 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 24490 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 channel$testUni
244a0 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46  nstallVs2010LogF
244b0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
244c0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
244d0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
244e0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
244f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24500 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 24510 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c UninstallVs2012L 24520 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 24530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 24540 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
24550 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69  channel $testUni 24560 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 nstallVs2012LogF 24570 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 24580 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 24590 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 245a0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 245b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 245c0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
245d0 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c  UninstallVs2013L
245e0 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  ogFile]]]} then
245f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65  {..          che
24600 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 24610 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 channel$testUni
24620 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46  nstallVs2013LogF
24630 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
24640 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
24650 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
24660 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
24670 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
24680 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 24690 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c UninstallVs2015L 246a0 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 246b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 {.. che 246c0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
246d0 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69  channel $testUni 246e0 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 nstallVs2015LogF 246f0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 24700 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 24710 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 ... proc runS 24720 51 4c 69 74 65 54 65 73 74 46 69 6c 65 73 45 70 QLiteTestFilesEp 24730 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 ilogue {} {.. 24740 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a uplevel 1 {.. 24750 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e unset -n 24760 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 ocomplain \.. 24770 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 testUni 24780 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 nstallVs2015LogF 24790 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c ile testUninstal 247a0 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5c lVs2013LogFile \ 247b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 .. te 247c0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 247d0 32 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e 69 2LogFile testUni 247e0 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 nstallVs2010LogF 247f0 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 24800 20 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c testUninstall 24810 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 74 65 Vs2008LogFile te 24820 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 stUninstallVs200 24830 35 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 5LogFile \.. 24840 20 20 20 20 20 20 20 20 74 65 73 74 49 6e 73 74 testInst 24850 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 allVs2015LogFile 24860 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 24870 31 33 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 13LogFile \.. 24880 20 20 20 20 20 20 20 20 20 74 65 73 74 49 6e 73 testIns 24890 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c tallVs2012LogFil 248a0 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 e testInstallVs2 248b0 30 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 010LogFile \.. 248c0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 49 6e testIn 248d0 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 stallVs2008LogFi 248e0 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 le testInstallVs 248f0 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 0d 0a 20 2005LogFile.... 24900 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f unset -no 24910 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 complain \.. 24920 20 20 20 20 20 20 20 20 6e 6f 72 74 68 77 69 6e northwin 24930 64 45 66 44 62 46 69 6c 65 20 74 65 73 74 4c 69 dEfDbFile testLi 24940 6e 71 4f 75 74 46 69 6c 65 20 5c 0d 0a 20 20 20 nqOutFile \.. 24950 20 20 20 20 20 20 20 20 20 77 61 6c 44 62 46 69 walDbFi 24960 6c 65 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d le nonWalDbFile. 24970 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 ... unset 24980 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a -nocomplain \.. 24990 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 test 249a0 45 66 36 45 78 65 46 69 6c 65 20 74 65 73 74 4c Ef6ExeFile testL 249b0 69 6e 71 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 inqExeFile \.. 249c0 20 20 20 20 20 20 20 20 20 20 74 65 73 74 45 78 testEx 249d0 65 46 69 6c 65 20 73 79 73 74 65 6d 44 61 74 61 eFile systemData 249e0 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 SQLiteEf6DllFile 249f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24a00 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 systemDataSQLite 24a10 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 73 79 73 74 LinqDllFile syst 24a20 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 emDataSQLiteDllF 24a30 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 24a40 20 20 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 sqliteDesigne 24a50 72 44 6c 6c 46 69 6c 65 20 69 6e 73 74 61 6c 6c rDllFile install 24a60 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 erExeFile \.. 24a70 20 20 20 20 20 20 20 20 20 65 6e 74 69 74 79 46 entityF 24a80 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d rameworkDllFile. 24a90 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 24aa0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e .... proc run 24ab0 53 51 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67 SQLiteTestEpilog 24ac0 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ue {} {.. # 24ad0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 24ae0 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 Skip running our 24af0 20 63 75 73 74 6f 6d 20 65 70 69 6c 6f 67 75 65 custom epilogue 24b00 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 if the main one 24b10 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 has been.. 24b20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 # skipped 24b30 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 24b40 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 24b50 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 sts ::no(epilogu 24b60 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 e.eagle)]} then 24b70 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 24b80 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh 24b90 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 ow when our test 24ba0 73 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 65 64 s actually ended 24bb0 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 (now)... 24bc0 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 24bd0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
24be0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
24bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
24c00 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  -- System.Data.S
24c10 51 4c 69 74 65 20 74 65 73 74 73 20 65 6e 64 65  QLite tests ende
24c20 64 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20  d at " \..
24c30 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72        [clock for
24c40 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e  mat [clock secon
24c50 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  ds]] \n]....
24c60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
24c70 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20   NOTE: Load the
24c80 22 65 70 69 6c 6f 67 75 65 22 20 63 75 73 74 6f  "epilogue" custo
24c90 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f  m per-user and/o
24ca0 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 0d  r per-host test.
24cb0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
24cc0 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a   settings now...
24cd0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
24ce0 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69     uplevel 1 [li
24cf0 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73  st loadSQLiteTes
24d00 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73  tSettings $::tes 24d10 74 5f 63 68 61 6e 6e 65 6c 20 2e 65 70 69 6c 6f t_channel .epilo 24d20 67 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 gue].... 24d30 23 0d 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 #.. # BUG 24d40 46 49 58 3a 20 42 65 66 6f 72 65 20 63 68 65 63 FIX: Before chec 24d50 6b 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 72 king the final r 24d60 65 73 6f 75 72 63 65 73 20 69 6e 20 75 73 65 20 esources in use 24d70 62 79 20 53 51 4c 69 74 65 2c 20 6d 61 6b 65 0d by SQLite, make. 24d80 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 24d90 20 20 20 73 75 72 65 20 62 6f 74 68 20 6f 66 20 sure both of 24da0 74 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74 the PRAGMA relat 24db0 65 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d ed directory nam 24dc0 65 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 es are freed... 24dd0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 24de0 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 checkForSQLite 24df0 44 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 Directories$::t
24e00 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65  est_channel true
24e10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
24e20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
24e30 6c 73 6f 20 72 65 70 6f 72 74 20 74 68 65 20 72  lso report the r
24e40 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 61 66  esource usage af
24e50 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20  ter running the
24e60 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20  tests...
24e70 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72  #..        repor
24e80 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73  tSQLiteResources
24e90 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 24ea0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 24eb0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 # NOTE: R 24ec0 65 70 6f 72 74 20 74 68 65 20 63 72 69 74 69 63 eport the critic 24ed0 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 al handle counts 24ee0 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 after running t 24ef0 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 he tests... 24f00 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 67 65 #.. ge 24f10 74 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 tSQLiteHandleCou 24f20 6e 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e nts$::test_chan
24f30 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  nel....        #
24f40 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
24f50 3a 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c 20  : If necessary,
24f60 64 69 73 61 62 6c 65 20 73 68 61 72 65 64 2d 63  disable shared-c
24f70 61 63 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a  ache mode now...
24f80 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
24f90 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69     if {[hasRunti
24fa0 6d 65 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 43  meOption sharedC
24fb0 61 63 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ache]} then {..
24fc0 20 20 20 20 20 20 20 20 20 65 6e 61 62 6c 65 53           enableS
24fd0 68 61 72 65 64 43 61 63 68 65 20 24 3a 3a 74 65  haredCache \$::te
24fe0 73 74 5f 63 68 61 6e 6e 65 6c 20 66 61 6c 73 65  st_channel false
24ff0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
25000 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
25010 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23      ############
25020 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25030 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25040 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25050 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
25060 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
25070 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25080 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e 4c  ## END Eagle ONL
25090 59 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  Y ##############
250a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
250b0 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
250c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
250d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
250e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
250f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25100 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20  #..  }....  #..
25110 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68   # NOTE: Save th
25120 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69  e name of the di
25130 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69  rectory containi
25140 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20  ng this file...
25150 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f   #..  if {![info
25160 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f 64   exists common_d
25170 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20  irectory]} then
25180 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d 6f  {..    set commo
25190 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c  n_directory [fil
251a0 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20  e dirname [info
251b0 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d  script]]..  }...
251c0 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE:
251d0 50 72 6f 76 69 64 65 20 74 68 65 20 53 79 73 74  Provide the Syst
251e0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74  em.Data.SQLite t
251f0 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f 20 74  est package to t
25200 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  he interpreter..
25210 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67 65 20  .  #..  package
25220 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d 2e 44  provide System.D
25230 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74 20  ata.SQLite.Test
25240 31 2e 30 0d 0a 7d 0d 0a                          1.0..}..